Здравствуйте.
--
Решил использовать стандартную модель меню в Yii2, и запихал туда код, который выводит пункты меню из БД. Посчитал, что так удобнее управлять менюшкой, не надо лезть в код, чтобы управлять разделами и подразделами. Вот что у меня получилось:
<?php
use yii\helpers\Html;
use yii\bootstrap\Nav;
use yii\bootstrap\NavBar;
?>
<?php
NavBar::begin([
'brandLabel' => '<img src="/img/logo_black.png" alt="Логотип"/>',
'brandUrl' => Yii::$app->homeUrl,
'options' => [
'class' => 'navbar navbar-default navbar-fixed-top',
],
]);
foreach ($link as $l){
($_SERVER['REQUEST_URI'] == $l->href) ? $menuItems[] = ['label' => $l->name, 'url' => [''], 'options' => ['class' => 'active']] : $menuItems[] = ['label' => $l->name, 'url' => [$l->href]];
}
if (!Yii::$app->user->isGuest) {
$menuItems[] = ['label' => '<i class="ionicons ion-android-create"></i>', 'url' => ['/admin']];
}
echo Nav::widget([
'options' => ['class' => 'navbar-nav navbar-right'],
'items' => $menuItems,
]);
NavBar::end();
?>
Что тут не так? Спросите вы, да очень просто, надо заменить
$_SERVER['REQUEST_URI']
на переменную Yii2, которая показывает весь WEB-путь, а не директорию с сервера, я про код
<?=Yii::getAlias('@webroot', $model->id);?>
По крайней мере, если его применять на OpenServer, видно весь путь начиная с диска, на котором он установлен. Мне надо так: Если текущий адрес браузера совпадает, тогда класс "эктив", если не совпадает, тогда нет этого класса.
Второе. Безопасность. Я просто готов отбить себе пальцы за это, но пока не понял как вывести
<?php
$link = Menu::find()->orderBy(['sort' => SORT_ASC])->limit(10)->all();
?>
в контроллере так, чтобы это работало в "лэйауте" на всех страницах, чтобы каждый раз не писать эту строку в экшене (ну вы поняли про что я говорю).
Третье. Многоуровневое меню.
--
Скажем так, что в таблице БД, есть некий столбец, назовём его url, и он будет отвечать за уровни, грубо говоря, если ссылка имеет url=12, то на сайте будут все подменю размещены там, где указан этот уровень.
Для тех кому не понятно, вот пример работы, архитектура и DOM-дерево меню.
www.magisters.org/community/3/17
На bootstrap 4 - возможно всё иначе, ещё не смотрел. Но в примере по ссылке, видно, что там 3 уровня, думаю неплохо, и вполне годно для стандартных решений. Условия с подсветкой активной ссылки, думаю можно сделать аналогично.
--
Заранее благодарю за участие в этом вопросе. Юный подаван ждёт мудрого совета на путь истинный.
Да прибудет с нами сила)))