@php
// Menu dinamik dari modul Frontend Menu (variable $menuTree dari PortalHandler).
// Item yang di-assign dari DB ada kunci 'menu_id'; fallback halaman site tidak ada.
$__siteSlug = (string) ($siteSlug ?? '');
$__menuItems = collect($menuTree ?? [])->values();
$__assignedMenu = $__menuItems->contains(fn ($item) => isset($item['menu_id']));
$__path = trim(request()->path(), '/');
if ($__siteSlug !== '') {
if ($__path === $__siteSlug) {
$__path = '';
} elseif (str_starts_with($__path, $__siteSlug.'/')) {
$__path = substr($__path, strlen($__siteSlug) + 1);
}
}
$__href = fn ($link) => trim((string) $link) !== '' ? $link : '#';
$__isActive = function ($link) use ($__path, $__siteSlug) {
$link = trim((string) $link);
if ($link === '' || $link === '#') {
return false;
}
$path = trim((string) parse_url($link, PHP_URL_PATH), '/');
if ($__siteSlug !== '' && str_starts_with($path, $__siteSlug.'/')) {
$path = substr($path, strlen($__siteSlug) + 1);
}
if ($path === '') {
return $__path === '';
}
$pathMatch = $path === ''
? $__path === ''
: ($__path === $path || str_starts_with($__path, $path.'/'));
if (! $pathMatch) {
return false;
}
// Parameter pada pautan menu mesti hadir sama dalam URL semasa
// (cth ?jenis=keratan) supaya item berbeza yang berkongsi path
// yang sama tidak aktif serentak. Param tambahan dalam URL
// (cth &tahun=2026) tidak menghalang status aktif.
parse_str((string) parse_url($link, PHP_URL_QUERY), $linkQuery);
foreach ($linkQuery as $key => $value) {
$current = request()->query($key);
if (is_array($current) || (string) $current !== (string) $value) {
return false;
}
}
return true;
};
@endphp
@if(! $__assignedMenu)
-
No menu has been assigned yet.
@else
@foreach($__menuItems as $item)
@php $children = $item['children'] ?? []; @endphp
@if(!empty($children))
-
@else
@endif
@endforeach
@endif