Выделение активного пункта меню силами CSS, PHP, MySQL

Июнь 30th, 2010 Рубрики: CSS, MySQL, PHP, Web

Активный пункт меню PHP CSS MySQLДоброго всем времени, давно не писал, совсем не до блога было...

Некоторое время назад заинтересовался я Web-разработкой. Даже решил создать свой собственный движок для маленького сайта, который изначально был написан и сверстан (если тогда это можно было назвать версткой :) ) на голом ХТМЛ. Потом решив поднять свой уровень в знаниях Веб разработки, принялся кодить на PHP.  Даже получилось переверстать сайт на блочной верстке и php-инклюдах. В тот момент и возник вопрос у меня, как же можно реализовать выделение активного пункта меню на CSS, PHP, MySQL.

Долго искал, смотрел разные решения, в итоге пришел к такому единому знаменателю. "Знаменатель" представлен в 2х видах:

1. Меню выводится циклом из базы:

<?php
$getmenu = mysql_query ("SELECT id, title FROM site_subcat",$db); /*выбор данных из базы и занесение в переменную $getmenu*/
$menurow = mysql_num_rows($getmenu); /*извлечение из переменной $getmenu первой строки и занесение её в переменную $menurow*/
$allmenu = mysql_fetch_array ($getmenu); /*извлечение из переменной $getmenu массива и занесение его в переменную $allmenu*/
if (isset($_GET['id'])) $id=$_GET['id'];
   do {
       if ($allmenu['id'] == $id) $curr = "id='current'";
       else $curr = ""; /*Сравниваем id-шники, если совпадает - id/class=current, если нет стиль m (обычный)*/
       printf ("
       <li %s><a href=\"/services.php?id=%s\" title='%s'>%s</a></li>
       ", $curr, $allmenu['id'], $allmenu['title'], $allmenu['title']); /*формируем и выводим строку=пункт меню*/
   }
   while ($allmenu = mysql_fetch_array ($getmenu));
?>

2. Меню статические и выводится не циклом:

фрагмент кода файла 1.php

<div id="content">
 <div id="left-content">
 <?php $n=1; include ('blocks/submenu/index.php');?> /* В файле, куда инклудим меню, задаем переменную с индивидуальным значением */
 </div>
</div>

фрагмент кода файла 2.php

 <div id="content">
 <div id="left-content">
 <?php $n=2; include ('blocks/submenu/index.php');?>
 </div>
 </div>

Между 2 и n может быть произвольное количество файлов, в зависимости от количества пунктов меню

фрагмент кода файла n.php

<div id="content">
 <div id="left-content">
 <?php $n=n; include ('blocks/submenu/index.php');?>
 </div>
</div>

код файла blocks/submenu/index.php

<div id="submenu">
 <ul>
 <li <?php if (isset($n)) { if ($n==1) echo "id='current'";} /* Проверяем соответствие заданной выше переменной и индивидуальному значению */ ?>><a href="/1.php">Первая страница</a></li>
 <li <?php if (isset($n)) { if ($n==2) echo "id='current'";} ?>><a href="/2.php">Вторая страница</a></li> /* Между строкой с ($n==2) и строкой с ($n==n) может быть произвольное количество значений, в зависимости от пункта меню */
 <li <?php if (isset($n)) { if ($n==n) echo "id='current'";} ?>><a href="/n.php">n-я страница</a></li>
 </ul>
</div>

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

С Уважением, Mc.Sim!


Другие материалы в категории CSS


Теги: , , , ,

23 комментария к “Выделение активного пункта меню силами CSS, PHP, MySQL”

  1. Samson56633
    Сентябрь 27th, 2010 at 21:46
    1

    Спасибо огромное! Очень помогло.

    • Сентябрь 27th, 2010 at 21:57
      2

      на здоровье! Рад видеть на блоге.

  2. Антон
    Ноябрь 11th, 2010 at 00:29
    3

    Спасибо, уточнил момент. Помогло с выводом в цикле.

    • Ноябрь 11th, 2010 at 00:44
      4

      Пожалуйста! Буду рад видеть на блоге еще!

  3. Peter
    Январь 24th, 2011 at 20:26
    5

    можно проще.
    Меню включаем строчкой типа
    <?php $page= basename(__FILE__); include («menu.php») ?>

    А выводим вот так:
    <li <?php if($page==»photo.html»){echo «class=\»current\»»;} ?> ><a href=»photo.html»>Фотоальбом </a></li>

    • Январь 25th, 2011 at 09:51
      6

      Спасибо за подсказку. Такой вариант действительно проще чем мой.

  4. Март 2nd, 2011 at 14:28
    7

    Классная замедко! В закладки! :)

  5. Артем
    Май 12th, 2011 at 13:45
    8

    подскажите как создать древовидное меню (на основе css) из базы)

    • Май 12th, 2011 at 16:56
      9

      Данную статью планирую сделать, но к сожалению, пока руки не доходят…
      Могу посоветовать почитать, например тут.

  6. toouur
    Май 23rd, 2011 at 23:11
    10

    Спасибо, вывод в цикле прошёл.

  7. Алексей
    Август 9th, 2011 at 10:40
    11

    Спасибо, очень пригодилось ваше меню. Хорошая идея, творческих успехов вам и новых скриптом нам. (от вас)

    • Август 9th, 2011 at 10:43
      12

      Вам тоже спасибо за комментарий. Буду рад новым визитам :)

  8. Алексей
    Март 24th, 2012 at 15:37
    13

    Спасибо, недаром статья в Яше на 1 месте =)

    • Март 25th, 2012 at 00:36
      14

      Пожалуйста. Приходите еще!

  9. Влад
    Апрель 4th, 2012 at 12:14
    15

    Много, конечно, интересных конструкций :)

    [code][/code]

    *CRAZY*

    Почему не так:

    [code][/code]

    & :)

    • Апрель 4th, 2012 at 17:59
      16

      для можно использовать ссылки на pastebin.ru

      • Влад
        Апрель 4th, 2012 at 18:59
        17
        • Апрель 4th, 2012 at 19:03
          18

          возможно :) Давно не практиковался в php. Со времен данной статьи :)

  10. Роман
    Август 30th, 2012 at 17:33
    19

    Привет. Всё сделал, как у вас написано, но ничего не получается. Но вот что интересно- ошибок тоже нет. Вот мой код:
    result2 = mysql_query («SELECT * FROM categories», $db);
    if (!$result2) {
    echo «код ошибки»;
    exit (mysql_error());}

    if (mysql_num_rows ($result2) > 0) {
    $row2 = mysql_fetch_array ($result2);
    if (isset($_GET[‘id’])) $id = $_GET[‘id’];
    do {
    if ($row2[‘id’] == $id) $curr = «id = ‘current'»;else $curr = »;
    printf (»

    § %s«,
    $curr, $row2 [«id»], $row2 [«title»]);
    }
    while (
    $row2 = mysql_fetch_array ($result2)
    );

    Подскажите, пожалуйста, в чём моя ошибка? Заранее благодарю.

    • Сентябрь 6th, 2012 at 20:45
      20

      Привет, Роман.
      наверно, код лучше вставить куда-нибудь на pastebin.com

  11. olga
    Декабрь 24th, 2012 at 16:58
    21

    Mc.Sim
    Спасибо! Давно ищу этот механизм!

  12. max
    Декабрь 1st, 2013 at 22:58
    22

    Класснецкий сайт с кучей полезной информации. автору выражаю глубокое уважение и благодарность, долгих лет жизни. *THUMBS UP*

  13. Денис
    Март 21st, 2014 at 20:48
    23

    Вот спасибо тебе , добрый человек , админ! Очень помогло меню с выводом из бд.Подставил свои данные и все ок !

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