Выделение активного пункта меню силами CSS, PHP, 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!
Спасибо огромное! Очень помогло.
на здоровье! Рад видеть на блоге.
Спасибо, уточнил момент. Помогло с выводом в цикле.
Пожалуйста! Буду рад видеть на блоге еще!
можно проще.
Меню включаем строчкой типа
<?php $page= basename(__FILE__); include (“menu.php”) ?>
А выводим вот так:
<li <?php if($page==”photo.html”){echo “class=\”current\””;} ?> ><a href=”photo.html”>Фотоальбом </a></li>
Спасибо за подсказку. Такой вариант действительно проще чем мой.
Классная замедко! В закладки!
подскажите как создать древовидное меню (на основе css) из базы)
Данную статью планирую сделать, но к сожалению, пока руки не доходят…
Могу посоветовать почитать, например тут.
Спасибо, вывод в цикле прошёл.
Спасибо, очень пригодилось ваше меню. Хорошая идея, творческих успехов вам и новых скриптом нам. (от вас)
Вам тоже спасибо за комментарий. Буду рад новым визитам
Спасибо, недаром статья в Яше на 1 месте
Пожалуйста. Приходите еще!
Много, конечно, интересных конструкций
[code][/code]
Почему не так:
[code][/code]
&
для можно использовать ссылки на pastebin.ru
http://pastebin.ru/FdJWfHsm
возможно Давно не практиковался в php. Со времен данной статьи
Привет. Всё сделал, как у вас написано, но ничего не получается. Но вот что интересно- ошибок тоже нет. Вот мой код:
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)
);
Подскажите, пожалуйста, в чём моя ошибка? Заранее благодарю.
Привет, Роман.
наверно, код лучше вставить куда-нибудь на pastebin.com
Mc.Sim
Спасибо! Давно ищу этот механизм!
Класснецкий сайт с кучей полезной информации. автору выражаю глубокое уважение и благодарность, долгих лет жизни.
Вот спасибо тебе , добрый человек , админ! Очень помогло меню с выводом из бд.Подставил свои данные и все ок !
Спасибо, очень помогли!