Код (Text): <? $link = mysql_connect('localhost', 'root', ''); if (!$link) {die('Не удалось соединиться : ' . mysql_error());}$db_selected = mysql_select_db('content', $link);if (!$db_selected) {die ('Не удалось выбрать базу mysite: ' . mysql_error());} @mysql_query('set character_set_client="utf8"'); @mysql_query('set character_set_results="utf8"'); @mysql_query('set collation_connection="utf8_general_ci"'); $id = (isset($_GET['id']))?(int)$_GET['id']:1; $sql2 = "SELECT * FROM `dmitrov_seodrift_ru` WHERE `id`=$id LIMIT 1";//выбираем запись с id=переданный_параметр $res2 = mysql_query($sql2); $pageData = mysql_fetch_array($res2); $sql = "SELECT id,namelinks,title,namezagolovok FROM `content`"; $res = mysql_query($sql); while ($row = mysql_fetch_array($res)){ $sel=($id==$row['id'])?' class="sel"':'';//текущую страницу подсвечиваем echo sprintf('<li><a href="?id=%s"%s>%s</a>%s', $row['id'], $sel, $row['namelinks'], "</li>"); } ?> ------------------------ CREATE TABLE IF NOT EXISTS `content` ( `id` int(11) NOT NULL AUTO_INCREMENT, `namelinks` varchar(255) NOT NULL, `psevdonim` varchar(255) NOT NULL, `title` varchar(255) NOT NULL, `namezagolovok` varchar(255) NOT NULL, `contents` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=12 ; Добавлено спустя 3 минуты 33 секунды: Вопрос как сделать подменю, имея меню такого вида?
О, процентов на 70 в моём стиле Только элементы li должны быть внутри контейнера-списка ul или ol. Чтобы вывести подменю, нужно, чтобы оно как-то было организовано в общем. В таблице "content", например, можно сделать поле "parent" типа INT, в котором указывать id родительского документа. Тогда можно будет организовать подменю и вообще структуру.
Допустим в parent я запишу id родительской категории.. Вопрос в том, как ее вставить в этот цикл? while ($row = mysql_fetch_array($res)){ $sel=($id==$row['id'])?' class="sel"':'';//текущую страницу подсвечиваем echo sprintf('<li><a href="?id=%s"%s>%s</a>%s', $row['id'], $sel, $row['namelinks'], "</li>");
Разбирайтесь Код (PHP): <?php $id=(isset($_GET['id']))?(int)$_GET['id']:1; $out='';//тут будет меню function menu(&$arr,&$out,$parent=0,&$level=0){ global $id; foreach($arr as $row){ if($row['parent']==$parent){ $sel=($row['id']==$id)?' class="sel"':''; $level++; $out.=sprintf('%s<li%s>[url="?id=%d"]%s[/url]', str_repeat("\t",$level),$sel,$row['id'],$sel,$row['title_menu']); $inner=''; $level++; menu($arr,$inner,$row['id'],$level); $level--; if(strlen($inner)>0){ $out.=sprintf('%s%s<ul>%s%s%s</ul>%s%s', "\n",str_repeat("\t",$level+1),"\n",$inner,str_repeat("\t",$level+1),"\n",str_repeat("\t",$level)); } $out.="</li>\n"; $level--; } } } $mysqli=new mysqli('127.0.0.1','root','pass','struct');//хост,логин,пароль,бд $result=$mysqli->query("SELECT id,parent,title_menu FROM pages"); $structArr=array(); while($res=$result->fetch_assoc()){$structArr[]=$res;} $result->close(); menu($structArr,$out,0);//генерируем меню в переменную $out unset($structArr);//массив больше не нужен ?> <style> a.sel{ text-decoration:underline; color:#f00; } </style> <ul class="menu"> <?=$out?> </ul>
Что я Вам за это должен? Работает) Получается, чтобы третий уровень меню добавить, нужно еще одну ячейку в таблицы создать?
Это рекурсивная функция, будет выводить всё дерево сайта. Третий уровень появится, если в записи БД указать в parent - id элемента со 2 уровня. Такая связь Код (Text): id parent title 1 0 Главная 2 1 Второй уровень, дочерняя к 1 3 2 Третий уровень, дочерняя к 2 построит мини-дерево. Объясняйте и помогайте другим, как делать такие меню и прочие штучки.
Понял)))Спасибо буду помогать молодым, чем смогу)) Добавлено спустя 50 минут 25 секунд: Последний вопрос)Как можно добавить стили в меню??? Добавлено спустя 5 минут 23 секунды: Чтобы в меню один класс, а в подменю, другой ?? Либо - это нужно через css настраивать?
Если выводите, как в примере выше Код (PHP): <ul class="menu"> <?=$out?> </ul> , то Код (Text): /*стиль для всего блока*/ .menu{ list-style:none outside none; margin:0; padding:0 0 0 20px; } /*для всех вложенных списков*/ .menu ul{ list-style:none outside none; margin:0; padding:0 0 0 20px; } /*для всех элементов li*/ .menu li{ font-style:normal; } /*стиль для элемента li, в котором ссылка на текущий документ*/ /*может быть полезно для всяких раскрывающихся меню*/ .menu li.sel{ list-style-type:square; } /*для всех ссылок*/ .menu a{ text-decoration:none; } /*при наведении на ссылку*/ .menu a:hover{ text-decoration:underline; } /*тот самый наш sel для текущей страницы*/ .menu a.sel{ text-decoration:underline; color:#f00; } /*стиль только для элемента li второго уровня*/ .menu>li>ul>li{ font-weight: bold; } Полезная инфа тут http://htmlbook.ru/css/
Благодарен за это))И последний момент, как отрисовывать данное меню в горизонтальное и вертикальное меню)Я так понимаю нужно функцию сделать, но опять же...Допустим я в БД создаю таблицу pol_menu. В этом меню vertikal на вертикальное меню, а горизонтальное gorizont. Какой переменной не хватает?Подскажите
Нарисуйте картинку, каким хотите видеть меню, а то не понятно. Обычно всё стилями делается. Если нужно вывести два меню от разных родителей, то нужно два раза вызвать функцию и указать id разных родителей: Код (PHP): menu($structArr,$out1,0);//меню от корня, будет в переменной $out1 menu($structArr,$out2,10);//меню от элемента с id=10, будет в переменной $out2 Как-то так. Ну или я не понял, голова занята другим.
Ну а что в них, полное меню сайта? Если да, то только стилями. Код (Text): <ul class="menuTop"><?=$out?></ul> <ul class="menuLeft"><?=$out?></ul> От классов menuTop и menuLeft будет зависеть внешний вид Код (Text): <style> .menuTop ul{ /*стиль списка с классом menuTop*/ } .menuLeft ul{ /*стиль списка с классом menuLeft*/ } Вроде, очевидные вещи...
А как код узнает о том, что <ul class="menuTop"><?=$out?></ul> - это верхнее меню? <ul class="menuLeft"><?=$out?></ul> - а это меню слева? Добавлено спустя 1 минуту 16 секунд: Вот этот код нужно брать?
Сделал вот так...от 0 - $out1 выводится и также выводится $out1 от 11...а $out2 не выводится...в чем может быть дело? Добавлено спустя 9 минут 31 секунду: Т.е. если вывожу $out1, то оно выходить с 0 по 10 значение, а если вывожу $out2 должно выводится с 10 и до конечного значения. Вопрос, как сделать ограничитель на $out1 ?