laravel меню на всех страницах

Магазин на Laravel 7, часть 20. Показ отдельной страницы и верхнее меню всех страниц

Показ страницы

Давайте создадим контроллер для показа страницы сайта в публичной части. У этого контроллера будет только одно действие, а следовательно — только один метод. Создать заготовку такого контроллера можно с помощью artisan-команды.

Добавим маршрут в файл routes/web.php :

И осталось только создать шаблон views/page/show.blade.php :

laravel меню на всех страницах. Смотреть фото laravel меню на всех страницах. Смотреть картинку laravel меню на всех страницах. Картинка про laravel меню на всех страницах. Фото laravel меню на всех страницах

Небольшое отступление

Верхнее меню

Нам нужно получать от модели все страницы и показывать ссылки на эти страницы в верхнем меню.

В Bootstrap сделано так, что элемент панели Navbar может быть либо ссылкой, либо выпадающим списком. Но не может быть одновременно и тем и другим. Поэтому, если у страницы есть дочерние страницы, то первым элементом выпадающего списка будет ссылка на страницу первого уровня, а дальше — ссылки на дочерние страницы.

laravel меню на всех страницах. Смотреть фото laravel меню на всех страницах. Смотреть картинку laravel меню на всех страницах. Картинка про laravel меню на всех страницах. Фото laravel меню на всех страницах

В классе ComposerServiceProvider будем передавать переменную pages в шаблон layout.part.pages :

В layout-шаблоне подключим шаблон layout.part.pages с помощью директивы @include() :

laravel меню на всех страницах. Смотреть фото laravel меню на всех страницах. Смотреть картинку laravel меню на всех страницах. Картинка про laravel меню на всех страницах. Фото laravel меню на всех страницах

laravel меню на всех страницах. Смотреть фото laravel меню на всех страницах. Смотреть картинку laravel меню на всех страницах. Картинка про laravel меню на всех страницах. Фото laravel меню на всех страницах

Заголовки страниц

Совсем про них забыл, так что давайте это исправим. В layout-шаблоне зададим значение по умолчанию для заголовка и будем передавать из дочерних шаблонов актуальное значение заголовка.

Источник

Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

#1 05.10.2017 20:04:09

Вывод одного меню на всех страницах

Подскажите пожалуйста как осуществить вывод меню? Если оно у меня выводится динамически и есть возможность редактировать его из админки(делать активным/паcивным). Не пойму как и куда передать его чтоб выводилось на всех страницах сайта а не заново писать запрос в каждом контроллере получать меню. Сам запрос по нахождению меню

Не в сети 29.09.2017

#2 05.10.2017 21:23:09

Re: Вывод одного меню на всех страницах

Ты можешь использовать например виджеты как быстрый вариант, есть огромное количество пакетов!

Обязательно установи пакет и попробуй понять как они устроены. Успехов!

Не в сети 22.01.2017

#3 05.10.2017 23:55:32

Re: Вывод одного меню на всех страницах

Добрый день.
Если бы я делал делал так.
1) Создать MenuController в нем единственный метод index;

// Тут важно вернуть Json
return response()->json($menuTop);
>

2) В routax прописиваем

3) Далее идете в свой шаблон и прописываете там какой то

Получаете сайт работающий с rest запросами, а это:
Стильно,
Модно,
Современно! laravel меню на всех страницах. Смотреть фото laravel меню на всех страницах. Смотреть картинку laravel меню на всех страницах. Картинка про laravel меню на всех страницах. Фото laravel меню на всех страницах

4 пункт напишите сами мне писать забесплатно лень. Но можно, как коллега говорит и через библиотеки модулей.

А вообще я бы не задрачивался и выводил бы меню отдельным статическим блоком. У меня в юносте тоже были такие порывы на Drupal 4, делать динамическое меню из терминов таксономии и дергать его из базы. Сейчас я к этому охладел. laravel меню на всех страницах. Смотреть фото laravel меню на всех страницах. Смотреть картинку laravel меню на всех страницах. Картинка про laravel меню на всех страницах. Фото laravel меню на всех страницахМеню в основном это статика, как показывает практика на 99% это так.

Источник

Многоуровневое меню Laravel

Нужно многоуровневое меню, которое будет выводиться из БД. Структура пока такая. Есть общий шаблон:

В контроллере пытался такую выборку сделать, но что возвращать, если на catalog ссылки то нет:

В роуте соответственно: Route::get(‘catalog’, ‘MainController@catalog’);

Ну и в самой вьюхе :

2 ответа 2

Получем все элементы меню (разделы каталога)

И передаем эту переменную в шаблон, скажем layout.part.tree (с помощью ComposerServiceProvider )

Шаблон подключает себя рекурсивно, позволяя реализовать меню любого уровня вложенности. Причем, мы используем только один запрос к БД. И подключаем этот шаблон там, где нужно показать меню каталога:

Версия Laravel 8.x (решение подходит для двухуровневого меню)
В общем, перерыв весь инет, взяв некоторую инфу с разных источников в том числе и с доков, нашел не сложный и рабочий метод как вывести из БД многоуровневое меню(работает для двухуровневого, для большего количества не пробовал). Объясню максимально подробно, вдруг будут смотреть новички.

Т.к. у меня меню, header и footer подключаются через @inlude сделать стандартным методом через контроллер, передав во вьху переменную, не получалось. Поэтому нашел на просторах сети, в том числе и доках способ как это сделать иначе. В laravel предусмотрен данный функционал, называется VIEW COMPOSERS (не путать с пакетным менеджером composer ). Для начала нам нужно создать новый провайдер следующей командой:

php artisan make:provider ComposerServiceProvider

И теперь осталось вывести эти данные в нашей вьюехе. Делал я следующим образом:

Я НЕ ЯВЛЯЮСЬ автором данных решений, инфу брал с разных сайтов и источников и выбрал то, что подошло мне (это для справки уточнил, на всякий случай). Надеюсь кому-то помог.

Источник

laravel меню на всех страницах. Смотреть фото laravel меню на всех страницах. Смотреть картинку laravel меню на всех страницах. Картинка про laravel меню на всех страницах. Фото laravel меню на всех страницахСоздание меню в Laravel 5

В данной заметке будет рассмотрен вариант создания меню в фреймворке Laravel с помощью расширения lavary/laravel-menu. Ознакомиться со всем его функционалом можно по ссылке. Я приведу пример базового использования данного расширения для создания многоуровневого меню.
Сам вывод на экран пунктов меню без оформления стилей выглядит следующим образом:

laravel меню на всех страницах. Смотреть фото laravel меню на всех страницах. Смотреть картинку laravel меню на всех страницах. Картинка про laravel меню на всех страницах. Фото laravel меню на всех страницах

Установка.

Процесс установки подробно описан тут. Для этого выполняем в консоли (перейдя в каталог проекта) команду

далее добавляем пункт в массив провайдеров (файл config/app.php)
и в массив алиасов:

Базовое использование.

Расширение имеет много полезных методов, которые могут пригодиться при создании сложных меню. В моем примере будут описаны только самые важные.

Информацию относящуюся к меню лучше всего хранить в БД. То есть создаем таблицу «menus» с такой структурой (минимально):

laravel меню на всех страницах. Смотреть фото laravel меню на всех страницах. Смотреть картинку laravel меню на всех страницах. Картинка про laravel меню на всех страницах. Фото laravel меню на всех страницах

для дочерних пунктов меню прописывается id их родительских пунктов в поле parent_id.
В поле path нужно прописать ссылки на страницы к которым относятся данные пункты.

Конечно нужно создать модель для работы с данной таблицей. Для этого в консоли:

Функционал по созданию пунктов меню с помощью данного расширения лучше всего вынести в отдельный класс или в метод главного (наследуемого) контроллера. Т.к. меню должно формироваться не для одного контроллера, а для многих (возможно для всех).

Для того, чтобы использовать расширение, сначала получаем данные о пунктах меню из БД используя модель. Для этого в нужном методе контроллера (который должен вывести страницу с нашим меню) получаем данные из таблицы menus в таком формате:

laravel меню на всех страницах. Смотреть фото laravel меню на всех страницах. Смотреть картинку laravel меню на всех страницах. Картинка про laravel меню на всех страницах. Фото laravel меню на всех страницах

и передаем их на обработку методу buildMenu().
То есть, действие контроллера будет содержать такой код:

Метод buildMenu() создающий пункты меню:

Методу make(), в качестве первого аргумента, передается произвольное название меню. Название нужно для того, чтобы была возможность создавать дополнительные меню, например в боковой панели. В качестве второго аргумента передается анонимная функция. Чтобы получить доступ к данным полученным из модели, даем к ним доступ с помощью

Результат работы метода buildMenu() сохраняется в переменной $menu, которая будет содержать объект Builder, и далее передаем ее в шаблон наряду с другими переменными.

Как тут видно, шаблон наследует от макета, который располагается в resources\views\layouts\app.blade.php
в макете секцию меню нужно подключить как и остальные блоки:

Пункты меню будем выводить в дополнительном, подключаемом шаблоне, это нужно для создания многоуровневого меню – шаблон будет рекурсивно вызывать сам себя для формирования дочерних пунктов меню неограниченной вложенности. Для подключение данного подшаблона прописана директива
которая подключит шаблон resources\views\customMenuItems.blade.php и передаст в переменной items массив объектов только родительских пунктов меню.

Активному пункту меню присваивается класс active для того, чтобы придать ему определенное оформление, при надобности.
Для каждого пункта меню проверяется наличие дочерних элементов и если они есть, то шаблон подключается рекурсивно для формирования вложенности пунктов меню.

Источник

Магазин на Laravel 7, часть 7. Меню каталога товаров и популярные бренды в левой колонке

Два меню с сайдбаре

И будем подключать эти два шаблона внутри layout-шаблона:

Теперь создадим поставщика услуг ComposerServiceProvider :

И сразу добавим его в массив providers файла конфигурации config/app.php :

Далее редактируем созданный app/Providers/ComposerServiceProvider.php :

Все, можно проверять, что получилось в итоге:

laravel меню на всех страницах. Смотреть фото laravel меню на всех страницах. Смотреть картинку laravel меню на всех страницах. Картинка про laravel меню на всех страницах. Фото laravel меню на всех страницах

laravel меню на всех страницах. Смотреть фото laravel меню на всех страницах. Смотреть картинку laravel меню на всех страницах. Картинка про laravel меню на всех страницах. Фото laravel меню на всех страницах

Добавляем javascript

Давайте добавим возможность сворачивать и разворачивать меню каталога в сайдбаре. При загрузке страницы видны будут только корневые разделы каталога. При клике по иконке с плюсом будут показаны дочерние категории. При повторном клике по иконке (но уже с минусом) дочерние категории будут скрыты.

Создадим файл site.js в директории public/js и добавим в него следующий код:

Подключим этот js-файл в layout-шаблоне и посмотрим результат:

laravel меню на всех страницах. Смотреть фото laravel меню на всех страницах. Смотреть картинку laravel меню на всех страницах. Картинка про laravel меню на всех страницах. Фото laravel меню на всех страницах

Жадная загрузка

Сейчас для построения меню у нас выполняется пять запросов к базе данных, которые получают корневые категории + дочерние категории для каждой корневой.

Но в данном случае вместо отложенной загрузки нужно использовать другой вариант загрузки связанных данных — жадную загрузку. Этот вариант выбирает данные всегда, вне зависимости от того, потребуются ли они в дальнейшем. Но мы точно знаем, что дочерние категории нам потребуются, так что будем их выбирать из базы данных сразу.

Теперь вместо пяти запросов к базе данных будет выполнено только два:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *