|
ChaoS ↓
|
 |
|
11 Август, 2010, 09:14:35
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: 0
Сообщений: 14 Сила слова: 0
|
Нужно сделать меню вида:
КАРАНДАШ
красный
синий
РУЧКА
ТЕТРАДЬ
если ручка то
КАРАНДАШ
РУЧКА
шариковая
перо
ТЕТРАДЬ
если тетрадь то
КАРАНДАШ
РУЧКА
ТЕТРАДЬ
школьная
общая
и заранее неизвестно сколько будет подпунктов, т.е может быть так:
КАРАНДАШ
РУЧКА
ТЕТРАДЬ
школьная
в клетку
в линию
общая
где ТЕТРАДЬ - родитель записей школьная и общая, а школьная родитель записей в клетку и в линию ну и т.д.
Подскажите пож-то скрипт на такое меню
|
|
|
|
|
Записан
|
|
|
|
|
Абырвалг ↓
|
 |
|
11 Август, 2010, 09:19:05 , спустя 4 минуты 30 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
PHP Infected, симфоеб, маконенавистник
Группа: Джедаи Карма: 80
Сообщений: 6094 Сила слова: 1.31
|
|
|
|
|
|
Записан
|
PHP does the job since 1995 Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
|
|
|
|
Givi ↓
|
 |
|
11 Август, 2010, 10:17:30 , спустя 58 минут 25 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Адекваты Карма: 42
Сообщений: 2305 Сила слова: 1.82
|
ChaoS, мне вот этот список очень помог в свое время.
|
|
|
|
|
Записан
|
Все, что говорят другие - неправда! До тех пор, пока ты сам в это не поверишь. Если человек дурак, то... чур это не я!
|
|
|
|
ChaoS ↓
|
 |
|
11 Август, 2010, 01:14:52 , спустя 2 часа 57 минут 22 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: 0
Сообщений: 14 Сила слова: 0
|
Ну вот есть функция построения дерева:
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);
можно ли это дерево как нибудь сворачивать и разворачивать,чтобы получилось меню подскажите пож-то
|
|
|
|
|
Записан
|
|
|
|
|
Givi ↓
|
 |
|
11 Август, 2010, 01:39:52 , спустя 25 минут
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Адекваты Карма: 42
Сообщений: 2305 Сила слова: 1.82
|
ChaoS, можно, мы не против.
|
|
|
|
|
Записан
|
Все, что говорят другие - неправда! До тех пор, пока ты сам в это не поверишь. Если человек дурак, то... чур это не я!
|
|
|
|
Абырвалг ↓
|
 |
|
11 Август, 2010, 01:43:21 , спустя 3 минуты 29 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
PHP Infected, симфоеб, маконенавистник
Группа: Джедаи Карма: 80
Сообщений: 6094 Сила слова: 1.31
|
|
|
|
|
|
Записан
|
PHP does the job since 1995 Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
|
|
|
|
Givi ↓
|
 |
|
11 Август, 2010, 02:37:32 , спустя 54 минуты 11 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Адекваты Карма: 42
Сообщений: 2305 Сила слова: 1.82
|
Абырвалг, это баян, он сворачивается и разворачивается =)))
А вообще хз что именно хочет ТС, но думаю что для начала ему достаточно сделать простое полностью открытое меню, ибо один хрен указанную выше функцию ещё дорабатывать нужно (дабы сократить кол-во запросов к БД до одного). А раскрывашки/закрывашки он уже со временем будет делать.
п.с. Говорю так от того, что практически сам (как минимум поиском пользовался сам) смог сделать "постоянно-октрытое" меню в виде дерева. И вопросы по дереву задавать начал лишь тогда, когда возникла необходимость сократить кол-во запросов к БД + сделать раскрывающееся субменю при выборе родителя. Так что пусть с этим разберется нормально.
|
|
|
|
|
Записан
|
Все, что говорят другие - неправда! До тех пор, пока ты сам в это не поверишь. Если человек дурак, то... чур это не я!
|
|
|
|
ChaoS ↓
|
 |
|
12 Август, 2010, 09:02:52 , спустя 18 часов 25 минут 20 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: 0
Сообщений: 14 Сила слова: 0
|
ППц и как сделать чтобы запросов меньше было? Спустя 1 минуту 9 секунд добавил и вообще зачем делать меньше запросов? на что это влияет?
|
|
|
|
|
Записан
|
|
|
|
|
Troy ↓
|
 |
|
12 Август, 2010, 09:03:29 , спустя 37 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Джедаи Карма: 45
Сообщений: 2393 Сила слова: 1.88
|
ChaoS, Nested Sets это 1 запрос
|
|
|
|
|
Записан
|
|
|
|
|
Givi ↓
|
 |
|
12 Август, 2010, 10:11:20 , спустя 1 час 7 минут 51 секунду
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Адекваты Карма: 42
Сообщений: 2305 Сила слова: 1.82
|
ChaoS, на скорость работы скрипта и на нагрузку на сервер. Если на сайте будет сидеть одновременно порядка 100 людей. то сервер начнет тормозить ужасно, а то и вовсе "ляжет" под неоптимизированными скриптами. Как сделать одним запросом: выбирай все. что тебе нужно одним запросом и складывай это все дело в правильно-структуризированный массив.
.Troy, НС ему очень рано. Да и в его случае вполне достаточно будет списков смежности. Просто нужно делать выборку в массив и уже с массивом работать как тебе удобно. У меня этот массив (с одного единственного запроса) идет на построение меню, построение "хлебных крошек" и ещё на некоторые мелочи, которые по сути нужны только мне и только в данном проекте.
|
|
|
|
|
Записан
|
Все, что говорят другие - неправда! До тех пор, пока ты сам в это не поверишь. Если человек дурак, то... чур это не я!
|
|
|
|
Pasha ↓
|
 |
|
12 Август, 2010, 12:32:27 , спустя 2 часа 21 минуту 7 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
|
|
ChaoS ↓
|
 |
|
12 Август, 2010, 01:10:25 , спустя 37 минут 58 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: 0
Сообщений: 14 Сила слова: 0
|
Ну а как нить без всего этого можно обойтись? тогда вот так вот функция:
$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 и т.д.
|
|
|
|
|
Записан
|
|
|
|
|
Pasha ↓
|
 |
|
12 Август, 2010, 01:12:51 , спустя 2 минуты 26 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Адекваты Карма: 7
Сообщений: 1028 Сила слова: 0.68
|
ChaoS, я бы сказал да не матюгаюсь :)
зачем усложнять? скачай что я тебе посоветовал, посмотри. Там хорошо реализованный класс, есть демо примеры. Правильно реализовано удаление детей/ родителей, перемещение детей/ родителей.
|
|
|
|
|
Записан
|
r.i.p. puppy
|
|
|
|
Givi ↓
|
 |
|
12 Август, 2010, 02:09:05 , спустя 56 минут 14 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Адекваты Карма: 42
Сообщений: 2305 Сила слова: 1.82
|
Pasha, дума. ему оно не нужно, ибо НестедСетс реально сложная для понимания фишка, если опыта с деревьями нет совсем. Хотя класс отличный, спорить не стану.
ChaoS, ну все правильно нашел. Осталось только сделать вывод менюшки правильно. Подумай немного, ведь по сути у тебя уже есть готовый оптимизированный массив, теперь только указывай ему нужные тебе ключи и циклов выведешь все дерево.
|
|
|
|
|
Записан
|
Все, что говорят другие - неправда! До тех пор, пока ты сам в это не поверишь. Если человек дурак, то... чур это не я!
|
|
|
|