@php /** @var array $nodes */ /** @var array $expanded */ /** @var string $selected */ /** @var string $self_route */ $headers = $headers ?? []; $meta_keys = $meta_keys ?? []; $colspan = 1 + count($headers); $buildUrl = function (string $toggle) use ($self_route, $expanded, $selected) { $qs = http_build_query([ 'toggle' => $toggle, 'expanded' => implode(',', $expanded), 'selected' => $selected, ]); return $self_route . '?' . $qs; }; $selectUrl = function (string $id) use ($self_route, $expanded) { $qs = http_build_query([ 'expanded' => implode(',', $expanded), 'selected' => $id, ]); return $self_route . '?' . $qs; }; // Flatten tree depth-first so we can emit one per visible node. $flatten = function (array $nodes, callable $self) use (&$flatten): array { $out = []; foreach ($nodes as $n) { $out[] = $n; if (!empty($n['children'])) { foreach ($flatten($n['children'], $self) as $child) { $out[] = $child; } } } return $out; }; $visible = $flatten($nodes, $flatten); @endphp @if(!empty($headers)) @foreach($headers as $h) @endforeach @endif @forelse($visible as $i => $node) @php $isExpanded = in_array($node['id'], $expanded, true); $isSelected = $selected === $node['id']; $depth = (int) ($node['depth'] ?? 0); $type = $node['type'] ?? 'L'; // Legacy cell classification (UI §2.6): // Level 0 + Type A -> use TH tag // Level 1 + Type A with children -> TD with class=menu // Otherwise -> plain TD $rowClass = 'TR' . (($i % 2) + 1); if ($isSelected) $rowClass .= ' Sel'; @endphp @php $cellClass = ''; $cellTag = 'TD'; if ($depth === 0 && $type === 'A') { $cellTag = 'TH'; } elseif ($depth === 1 && $type === 'A' && !empty($node['has_children'])) { $cellClass = 'menu'; } @endphp <{{ $cellTag }} ALIGN=LEFT @if($cellClass) CLASS="{{ $cellClass }}" @endif> {{-- Indentation: one "img-branch-cont-2" per parent depth --}} @for($d = 0; $d < $depth; $d++) | @endfor @if($depth > 0) - @endif @if(!empty($node['has_children'])) {{ $isExpanded ? '-' : '+' }} @else @endif {{ $node['label'] }} @foreach($meta_keys as $mk) @endforeach @empty @endforelse
Hiérarchie{{ $h }}
@php $v = $node['meta'][$mk] ?? null; @endphp @if(is_float($v)) {{ number_format($v, 2) }} @elseif(is_int($v)) {{ $v }} @else {{ $v ?? '' }} @endif
Aucune donnée.
{{-- Preserve tree state across subsequent form POSTs on the same page. --}}