Здесь курят мануал.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Мы в твиттере!
Мы вконтакте!
Мы на яндексе!

Краснодарское время: 24 Май, 2012, 10:29:19

Страниц: [1]
Печать
Автор Тема: Вертикальное выпадающее меню из БД  (Прочитано 626 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
ChaoS    ↓ 
11 Август, 2010, 09:14:35
НЕ ХУЕТА! ХУЕТА!

Карма: 0
Сообщений: 14
Сила слова: 0

Нужно сделать меню вида:
 
КАРАНДАШ
  красный
  синий
РУЧКА
ТЕТРАДЬ
 
если ручка то
 
КАРАНДАШ
РУЧКА
  шариковая
  перо
ТЕТРАДЬ
 
если тетрадь то
 
КАРАНДАШ
РУЧКА
ТЕТРАДЬ
  школьная
  общая
 
и заранее неизвестно сколько будет подпунктов, т.е может быть так:
 
КАРАНДАШ
РУЧКА
ТЕТРАДЬ
  школьная
    в клетку
    в линию
  общая
 

где ТЕТРАДЬ - родитель записей школьная и общая, а школьная родитель записей в клетку и в линию ну и т.д.
Подскажите пож-то скрипт на такое меню
Записан
Абырвалг    ↓ 
11 Август, 2010, 09:19:05 , спустя 4 минуты 30 секунд
НЕ ХУЕТА! ХУЕТА!

PHP Infected, симфоеб, маконенавистник
Группа: Джедаи

Карма: 80
Сообщений: 6094
Сила слова: 1.31

http://yandex.ua/yandsearch?text=php%20mysql%20%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE&stype=first&clid=46511&lr=141&ncrnd=9279
Записан

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

Ну вот есть функция построения дерева:
PHP

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

сворачивалось/разворачивалось - это на 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
Записан

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 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 7
Сообщений: 1028
Сила слова: 0.68


ChaoS, мне вот этот список очень помог в свое время.
ChaoS, тебе же дали уже где копать
 
Это еще посмотри http://php.russofile.ru/ru/authors/sql/nestedsets01/
Записан

r.i.p. puppy
ChaoS    ↓ 
12 Август, 2010, 01:10:25 , спустя 37 минут 58 секунд
НЕ ХУЕТА! ХУЕТА!

Карма: 0
Сообщений: 14
Сила слова: 0

Ну а как нить без всего этого можно обойтись? тогда вот так вот функция:
 
PHP

$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, ну все правильно нашел. Осталось только сделать вывод менюшки правильно. Подумай немного, ведь по сути у тебя уже есть готовый оптимизированный массив, теперь только указывай ему нужные тебе ключи и циклов выведешь все дерево.
Записан

Все, что говорят другие - неправда! До тех пор, пока ты сам в это не поверишь.
Если человек дурак, то... чур это не я!
Страниц: [1]
Печать
 

Перейти в:  

Этот топик скрыли: adw0rd, artoodetoo