Форум → Разработка → Базы данных → Вертикальное выпадающее меню из БД
Вертикальное выпадающее меню из БД
-
Нужно сделать меню вида:
КАРАНДАШ
красный
синий
РУЧКА
ТЕТРАДЬ
если ручка то
КАРАНДАШ
РУЧКА
шариковая
перо
ТЕТРАДЬ
если тетрадь то
КАРАНДАШ
РУЧКА
ТЕТРАДЬ
школьная
общая
и заранее неизвестно сколько будет подпунктов, т.е может быть так:
КАРАНДАШ
РУЧКА
ТЕТРАДЬ
школьная
в клетку
в линию
общая
где ТЕТРАДЬ - родитель записей школьная и общая, а школьная родитель записей в клетку и в линию ну и т.д.
Подскажите пож-то скрипт на такое меню -
-
11 августа 2010 г. 10:17, спустя 58 минут 25 секунд
ChaoS, мне вот этот список очень помог в свое время. -
11 августа 2010 г. 13:14, спустя 2 часа 57 минут 22 секунды
Ну вот есть функция построения дерева:
function ShowTree ($parent) {
$sql = "SELECT `num`, `parent`, `title` FROM `rubr` WHERE `parent` = $parent ORDER BY `title`";
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0) {
echo '<ul>';
while ($row = mysql_fetch_array($result)) {
echo '<li><a href="/?num='.$row['num'].'">'.$row['title'].'</a></li>';
ShowTree ($row['num']);
}
echo '</ul>';
}
}
ShowTree (0);
можно ли это дерево как нибудь сворачивать и разворачивать,чтобы получилось меню подскажите пож-то -
-
11 августа 2010 г. 13:43, спустя 3 минуты 29 секунд
сворачивалось/разворачивалось - это на css/jsСпустя 20 сек.http://yandex.ua/yandsearch?text=%D0%B2%D1%8B%D0%BF%D0%B0%D0%B4%D0%B0%D1%8E%D1%89%D0%B5%D0%B5%20%D0%BC%D0%B5%D0%BD%D1%8E&stype=first&clid=46511&lr=141&ncrnd=8853 -
11 августа 2010 г. 14:37, спустя 54 минуты 11 секунд
Абырвалг, это баян, он сворачивается и разворачивается =)))
А вообще хз что именно хочет ТС, но думаю что для начала ему достаточно сделать простое полностью открытое меню, ибо один хрен указанную выше функцию ещё дорабатывать нужно (дабы сократить кол-во запросов к БД до одного). А раскрывашки/закрывашки он уже со временем будет делать.
п.с. Говорю так от того, что практически сам (как минимум поиском пользовался сам) смог сделать "постоянно-октрытое" меню в виде дерева. И вопросы по дереву задавать начал лишь тогда, когда возникла необходимость сократить кол-во запросов к БД + сделать раскрывающееся субменю при выборе родителя. Так что пусть с этим разберется нормально. -
12 августа 2010 г. 9:02, спустя 18 часов 25 минут 20 секунд
ППц и как сделать чтобы запросов меньше было?Спустя 69 сек.и вообще зачем делать меньше запросов? на что это влияет? -
-
12 августа 2010 г. 10:11, спустя 1 час 7 минут 51 секунду
ChaoS, на скорость работы скрипта и на нагрузку на сервер. Если на сайте будет сидеть одновременно порядка 100 людей. то сервер начнет тормозить ужасно, а то и вовсе "ляжет" под неоптимизированными скриптами. Как сделать одним запросом: выбирай все. что тебе нужно одним запросом и складывай это все дело в правильно-структуризированный массив.
.Troy, НС ему очень рано. Да и в его случае вполне достаточно будет списков смежности. Просто нужно делать выборку в массив и уже с массивом работать как тебе удобно. У меня этот массив (с одного единственного запроса) идет на построение меню, построение "хлебных крошек" и ещё на некоторые мелочи, которые по сути нужны только мне и только в данном проекте. -
12 августа 2010 г. 12:32, спустя 2 часа 21 минуту 7 секунд
ChaoS, мне вот этот список очень помог в свое время.
ChaoS, тебе же дали уже где копать
Это еще посмотри http://php.russofile.ru/ru/authors/sql/nestedsets01/ -
12 августа 2010 г. 13:10, спустя 37 минут 58 секунд
Ну а как нить без всего этого можно обойтись? тогда вот так вот функция:
$queryresult = mysql_query('SELECT num, parent, title FROM rubr ORDER BY parent, num');
while ($row = mysql_fetch_assoc($queryresult)) {
$v_arr[$row['parent']][$row['num']] = $row['title'];
}
$v_tree=array();
function built_tree($arr,&$tree,$par_id=-1)
{ for($i=0;$i<count($arr);$i++)
{ if($arr[$i]['parent']==$par_id)
{ if(is_array($tree))
{ $tree[$arr[$i]['ID']]=null; }
else { $tree=array();
$tree[$arr[$i]['ID']]=null;
}
built_tree($arr,$tree[$arr[$i]['ID']],$arr[$i]['ID']);
}
else {}
}
}
на выводе вот такая вещь получается:
Array
(
[0] => Array
(
[208] => Пункт 1
[209] => Пункт 2
[210] => Пункт 3
)
[208] => Array
(
[211] => Пункт 1.1
[212] => Пункт 1.2
)
[209] => Array
(
[216] => Пункт 2.1
[217] => Пункт 2.2
[251] => Пункт 2.3
)
[210] => Array
(
[218] => Пункт 3.1
[219] => Пункт 3.2
)
[211] => Array
(
[221] => Пункт 1.1.1
[222] => Пункт 1.1.2
)
) и т.д ,т.е. массив что то типо наподобие дерева, можно его как нибудь отсортировать, чтобы получилось так:
[208] => Пункт 1
[211] => Пункт 1.1
[221] => Пункт 1.1.1
[222] => Пункт 1.1.2
[212] => Пункт 1.2
[209] => Пункт 2
[210] => Пункт 3 и т.д. -
12 августа 2010 г. 13:12, спустя 2 минуты 26 секунд
ChaoS, я бы сказал да не матюгаюсь :)
зачем усложнять? скачай что я тебе посоветовал, посмотри. Там хорошо реализованный класс, есть демо примеры. Правильно реализовано удаление детей/ родителей, перемещение детей/ родителей. -
12 августа 2010 г. 14:09, спустя 56 минут 14 секунд
Pasha, дума. ему оно не нужно, ибо НестедСетс реально сложная для понимания фишка, если опыта с деревьями нет совсем. Хотя класс отличный, спорить не стану.
ChaoS, ну все правильно нашел. Осталось только сделать вывод менюшки правильно. Подумай немного, ведь по сути у тебя уже есть готовый оптимизированный массив, теперь только указывай ему нужные тебе ключи и циклов выведешь все дерево.
Пожалуйста, авторизуйтесь, чтобы написать комментарий!