Как добавить класс active в html меню на php

как добавить стиль в меню на php чтобы выделить активный пунктЕсли вам захочется оформить навигационное меню таким образом чтобы при открытии какой то конкретной странички меню этой странички как то подсветилось (выделилось), то тут понятное дело решение может быть только с помощью стилей – CSS. Но как же таблица стилей поймет, какая страничка у нас сейчас открыта? Давайте разберемся. И так, если мне не изменяет память, то решить этот вопрос можно двумя методами. О первом я прочел у гуру верстки Эрика Мэера. В его способе нет надобности в программировании. Там суть заключается в том, что каждой страничке присваивается свой id для тега body, например <body id=’news’> или <body id=’articles’> и так далее. Подробнее из книжки гляну.

Теперь глянем как добавить класс active в меню средствами PHP. Этот вариант я считаю самым удобным и простым. И так, наверняка меню у вас в ваши странички подключается includ-ом во все ваши странички. Тогда остается перед include завести какую-нибудь переменную – метку, которая и будет тем флажком указывающем на определенную страничку:

<html>
   <head></head>
   <body>
      <?php $page = 'news'; include('navigation.php'); ?>
   </body>
</html>

Тогда подключаемый файл с меню – menu.php будет выглядеть следующим образом:

<div id="nav">
   <ul>
      <li>
          <a <?php echo ($page == 'news') ? "class='active'" : ""; ?>
                 href="index1.php">Новости</a>
     </li>
      <li>
          <a <?php echo ($page == 'articles') ? "class='active'" : ""; ?>
                  href="index2.php">Статьи</a>
     </li>
      <li>
          <a <?php echo ($page == 'about') ? "class='active'" : ""; ?>
                  href="index3.php">О нас</a>
   </li>
   </ul>
</div>

Т.е. как мы видим, тут идет проверка в сокращенной записи условия соответствия. Если есть совпадение, то к ссылке добавляется class=’active’, иначе ничего не приписывается. Вроде все просто и логично.

Еще в процессе написания заметки нашел альтернативный метод на php:

<?php foreach($result as $item): ?>
<a href="/link.php?menu=<?php echo $item['id']; ?>"
<?php if($_GET['menu'] == $item['id']) { echo "class='active'";} ?>>
<?php echo $item['name']; ?></a>
<?php endforeach; ?>

Здесь, как я понимаю меню формируется динамически. В GET параметре ['menu'] мы передаем id меню, и в цикле проверяем совпадение с id лежащем в массиве $result. Т.е. в ассоциативном массиве $result лежат названия и ссылки нашего меню, например $result[1] = (id=>1, name=>’About’), $result[2] = (id=>2, name=>’News’) и так далее. Если id совпали то при формировании меню, для данного id присвоится класс active.

И напоследок  вариант на jQuery:

<script type="text/javascript">
 $('document').ready(function() {
    $('.menu a').each(function() {
        if ('http://site.ru'+$(this).attr('href') == window.location.href)
        {
            $(this).addClass('active');
        }
    });
});
 </script>

Здесь все просто. Пробегаемся по ссылкам меню, и читаем их атрибут href, который затем сравнивается с частью URL. Например смотрим что ссылка в меню <a href=”/about”>About</a>, берем /about, добавляем его к конец URL site.ru/about и проверяем с помощью window.location.href  есть ли совпадение. Если есть то добавляется класс active. Вообщем тоже вариант довольно простой.

Таким образом, перед вами несколько вариантов ответов на вопрос как добавить класс active в html меню на php и также на jQuery. Думаю наверняка есть еще варианты, и я буду признателен если кто-то поделится своим вариантом.

Написать комментарий

XHTML: Вы можете использовать эти теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*

*