Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
сама таблица в бд стандартна:
CREATE TABLE `leftmenu` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`title` CHAR(100) NOT NULL COLLATE 'utf8_unicode_ci',
`url` CHAR(255) NOT NULL DEFAULT '#' COLLATE 'utf8_unicode_ci',
`parent_id` INT(10) UNSIGNED NULL DEFAULT '0',
PRIMARY KEY (`id`)
)
далее получаем записи из бд и группируем по parent_id
$menu = Menu::orderBy('id')->get()->groupBy('parent_id');
основной вопрос таков, как это вывести во view?
на чистом php такой массив(тут коллекция) выводится рекурсией, но как эту рекурсию организовать в twig/blade?!
возможно есть другая реализация вывода многоуровневого меню?!
Не в сети
Кроме рекурсии, другого способа сделать многоуровневое меню с бесконечной вложенностью нет. Но... В вьюшке рекурсию делать не следует. Рекурсию делаешь в контролере. И результатом работы должна стать переменная в которой содержится весь html код.
$out_line='';
function build_tree($parent_id, $out_line)
{
....
return $outline;
}
И во вьюшке уже пишешь только {{$out_line}}
Содержимое $out_line должно быть что-то вроде "<ul><li>item1</li><li><ul><li>item1.1</li></ul></li></ul>"
Изменено Afatar (18.06.2015 05:07:57)
Не в сети
По идее и в контроллере это делать не следует. Завтра поменялось оформление, применяемые стили. И что править это в контроллере?! Тогда уже лучше во вьюхе... там же мы размещаем разные foreach, if и т.п. Ведь это не логика работы с данными, а логика вывода данных. А ей место во вью имхо.
Не в сети
Все верно, в контроллере этого делать не стоит.
Вот посмотри пример рекурсии здесь: http://www.sitepoint.com/laravel-blade- … -partials/
То, что нужно! Благодарю! Сейчас буду разбираться!
Не в сети
переписал http://www.sitepoint.com/laravel-blade- … -partials/ под Twig Работает!
Очень интересный подход рекурсии в шаблонизаторе!
Изменено voidshah (18.06.2015 23:26:12)
Не в сети
Вот правильный пример древовидного списка в Twig
По этому примеру можно сделать много чего интересного.
Зачем делать это с помощью PHP функций если шаблонизатор сам прекрасно это делает?
достаточно реализовать на базе вьюхи рекурсивный вызов самого себя. на данный момент это самое быстрое и самое правильное решение.
естессно надо городить условия, чтобы вызывать себя только при наличии потомков и в контроллере строить многоуровневый массив с вложениями веток.
Не в сети
Страницы 1