Как добавить class = “active” к активному элементу меню

144
24 января 2019, 05:30

В шаблоне есть код для меню, которое берется из БД.

<div class="container-fluid p-0">
<nav class="navbar navbar-expand-lg navbar-dark bg-dark sticky-top">
    <a href="/" class="navbar-brand">
        <img src="/images/Brand.png"  height="50" alt="logo">
    </a>
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
    </button>
    <div class="collapse navbar-collapse" id="navbarSupportedContent">
        <ul class="navbar-nav  align-content-between w-100">
            {foreach $menu as $item}
                {if ($item->isActive)}
                    <li class="nav-item m-auto active">
                        <a href="{$item->url}{$item->id}/" class="nav-link">{$item->label}</a>
                    </li>
                {/if}
            {/foreach}
        </ul>
    </div>
</nav>

Как сделать так что бы к тегу

  • добавлялся class = "active" если пользователь находится на данной странице? {if ($item->isActive)} это проверка, выводить этот пункт меню или нет. Если понадобится код с контроллера

    function indexAction($smarty){
    $menu = getItemsMenu();
    $partners = getItemsPartners();
    $smarty->assign('menu', $menu);
    $smarty->assign('partners', $partners);
    $smarty->assign('pageTitle', 'ТМТ Энерго');
    loadTemplate($smarty, 'mainHeader');
    loadTemplate($smarty, 'index');
    loadTemplate($smarty, 'footer');
    

    }

    Используется шаблонизатор смарти, можно показать как это сделать в phtml и php, дальше сам разберусь.

  • Answer 1

    Я бы проверял на совпадение ссылки с адресом страницы. Я не знаю как работать со Смарти, принцип опишу, если что поправишь как нужно.

    {foreach $menu as $item}
        {set elem_href = $item->url . $item->id}
        {if ($item->isActive)}
            {set ative = ''}
            {if elem_href == this_url}
                {set ative = 'active'}
            {/if}
            <li class="nav-item m-auto {active}">
                <a href="elem_href/" class="nav-link">{$item->label}</a>
            </li>
        {/if}
    {/foreach}
    

    Как-то так. this_url это адрес текущей страницы. Если нельзя его получить из шаблонизатора (всяко бывает), передай его из контроллера. И подставляй active тому элементу, внутри которого у ссылки href совпадает с текущим адресом.

    P.S. $item->isActive я не понял что у тебя делает и связан ли он как-то с... думаю, его можно будет убрать, если связан.

    READ ALSO
    Как ждать сообщение от пользователя telegram bot

    Как ждать сообщение от пользователя telegram bot

    Подскажите пожалуйста, есть telegram botЕсть условие, если клиент написал "Привет" бот скидывает клиенту сообщения "Напишите ваше имя"

    147
    PHP не создает базу SQLite

    PHP не создает базу SQLite

    Установлен PHP 71, echo phpinfo() сообщает о подключенном драйвере SQLite

    176
    ЧПУ ссылки Wordpress

    ЧПУ ссылки Wordpress

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

    191
    unordered_map с кастомнымными функциями в классе

    unordered_map с кастомнымными функциями в классе

    Мне надо хранить в классе соответствия между строками и числамиПорядок не важен, поэтому хочу использовать std::unordered_map, причём строки должны...

    131