Навигация по сайту
Давайте сделаем меню блога. В дизайне меню выводится в двух местах: шапка блога и боковая панель, которая выезжает по нажатию на “гамбургер” справа.

Я планирую разместить в обоих местах абсолютно одинаковые ссылки: “Главная, Блоги, Теги, Контакты”.
Оглавление
Получаем данные
Меню выводится на всех страницах. Значит, в каждом контроллере писать свой метод для получения меню? А если что-то изменится, мы будем вынуждены поправить все имеющиеся контроллеры. Это не путь самурая.
Очень вовремя мы сделали BaseController, от которого наследуем все остальные контроллеры, не так ли?
Давайте сделаем отдельный метод для получения таких вот глобальных данных.
Добавьте этот код в BaseController.php:
public function globalElements() {
$menu = $this->evo->runSnippet('DLMenu',[
'parents' => 0,
'maxDepth' => 1,
'returnDLObject' => 1
]);
$this->data['menu'] = $menu->getMenu();
return $this;
}
Здесь мы закидываем в переменную $data ключ menu, в котором при помощи сниппета DLMenu строим менюшку. Обратите внимание, здесь мы используем не getDocs, а getMenu.
Теперь вызов метода globalElements надо прописать в __construct, иначе он так и останется неиспользуемым. Поправьте ещё немного BaseController.php.
public function __construct()
{
$this->evo = EvolutionCMS();
$this->render();
$this->globalElements();// вот он
$this->sendToView();
}
Давайте протестируем? Откройте любую страницу сайта и в панели Tracy зайдите во вкладку view

Из-за особенностей DLMenu наша менюшка там лежит под индексом [0]. Это надо будет учесть. Раскройте какой-нибудь элемент и посмотрите, какие ключи в нём есть. Мы будем использовать новый ключ url, которого нет в обычном getDocs.
Главное меню
Верхнее меню мы вынесли вместе с шапкой в файл views/parts/header.blade.php.
Откройте его и найдите разметку <nav class="links">.
Правим по аналогии с постами.
<nav class="links">
<ul>
@foreach ($menu[0] as $item)
<li><a href="{{ $item['url']}}">{{ $item['pagetitle'] }}</a></li>
@endforeach
</ul>
</nav>
Боковое меню
Боковое меню вынесено отдельно в файл views/parts/menu.blade.php.
Делаем там абсолютно то же самое.
<section>
<ul class="links">
@foreach ($menu[0] as $item)
<li><a href="{{ $item['url'] }}">{{ $item['pagetitle'] }}</a></li>
@endforeach
</ul>
</section>
Всё, сайт обзавёлся менюшками. Изучите на досуге то, что выдал нам Tracy в переменной menu. Там есть практически всё, чтобы создать меню неограниченной сложности. Заодно пробегитесь по документации DLMenu.
Итого
- Сделали меню
- Поняли, как круто, когда есть базовый контроллер.
Пора добить последний кусочек сайта, который ещё не трогали - сделаем сайдбар.