Я пытаюсь иметь multi level menu
через JSON data
, следующий мой JSON
формат данных:
{"pages": [
{"pagelink": "index.html", "pagename": "Mysite", "submenu": [
{"pagelink": "#", "pagename": "sublevel1", "submenu": "NULL"},
{"pagelink": "#", "pagename": "submenu2", "submenu": [
{"pagelink": "#", "pagename": "sublevel2", "submenu": "NULL"}
]
}
]
},
{"pagelink": "templates.html", "pagename": "Templates", "submenu": "NULL"},
{"pagelink": "aboutus.html", "pagename": "About Us", "submenu": "NULL"},
{"pagelink": "contactus.html", "pagename": "Contact Us", "submenu": "NULL"}
]
}
Когда у меня не было sub menu
поле, которое я использовал для вызова меню следующим образом:
<nav id="nav">
<ul id="main-nav" class="hidden-mobile">
@foreach($contents->pages as $pages)
<li class="menu-item-has-children">
<a href="{{ $pages->pagelink }}">{{ $pages->pagename }}</a>
</li>
@endforeach
</ul>
</nav>
Когда я добавил подменю, я попытался использовать следующий код:
<nav id="nav">
<ul id="main-nav" class="hidden-mobile">
@foreach($contents->pages as $pages)
<li class="menu-item-has-children">
<a href="{{ $pages->pagelink }}">{{ $pages->pagename }}</a>
@if(isset($contents->pages->submenu))
<ul class="sub-nav">
@foreach($contents->pages->submenu as $submenu)
<li><a href="{{ $submenu->pagelink }}">{{ $submenu->pagename }}</a> </li>
@endforeach
</ul>
@endif
</li>
@endforeach
</ul>
</nav>
Но это не работает.
Пожалуйста, ведите меня, мне нужно изменить JSON data
формат или есть какой-либо выход в blade
сам файл.
Вы должны позвонить $pages
не $contents->pages
@if(isset($pages->submenu))
<ul class="sub-nav">
@foreach($pages->submenu as $submenu)
<li><a href="{{ $submenu->pagelink }}">{{ $submenu->pagename }}</a> </li>
@endforeach
</ul>
@endif
Если вы хотите создать многомерный JSON и не знаете, сколько у вас будет вложенных массивов, вам нужно создать дополнительный блейд для подменю.
<ul class="sub-nav">
@foreach($pages as $submenu)
<li>
<a href="{{ $submenu->pagelink }}">{{ $submenu->pagename }}</a>
@if (isset($submenu->submenu))
@include('submenu', ['pages' => $submenu->submenu])
@endif
</li>
@endforeach
</ul>
И тогда ваше меню будет выглядеть так:
<nav id="nav">
<ul id="main-nav" class="hidden-mobile">
@foreach($contents->pages as $pages)
<li class="menu-item-has-children">
<a href="{{ $pages->pagelink }}">{{ $pages->pagename }}</a>
@if(isset($pages->submenu))
@include('submenu', ['pages' => $pages->submenu])
@endif
</li>
@endforeach
</ul>
</nav>
Это решение должно работать, если вы удалите "submenu": "NULL"
, Если нет, вы должны дополнительно проверить, если элемент submenu
это массив во всех условных выражениях.
Других решений пока нет …