Создание меню из данных JSON в представлениях лезвия laravel

Я пытаюсь иметь 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 сам файл.

2

Решение

Вы должны позвонить $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 это массив во всех условных выражениях.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]