![]() |
Показаны 2 сообщений на этой странице |
Форум сетевых администраторов (http://netadmin.ws/forum/index.php)
- PHP (http://netadmin.ws/forum/forumdisplay.php?forumid=6)
-- Деревья, рекурсивная функция (http://netadmin.ws/forum/showthread.php?threadid=12040)
Деревья, рекурсивная функция
Всем день добрый. У меня вопрос по деревьям. Делаю меню вида:
1ссылка
>>1подссылка
>>>>1подподссылка
>>>>2подподссылка
>>2подсссылка
>>>>1подподссылка
>>>>2подподссылка
2ссылка
>>1подссылка
>>>>1подподссылка
>>>>2подподссылка
>>>>3подподссылка
>>2подсссылка
3ссылка
>>1подссылка
>>>>1подподссылка
>>2подсссылка
Но одна проблема - список дерева выводится полностью.
Нужно чтобы при нажатии на главную категорию вылетал список его ее подкаталогов а остальные скрывались и оставались только главные категории(parent_id=0).
Т.е. видимо передавать параметр, и так для подкаталогов тоже.
Вот код который имеется, нужно только объяснить мне как сделать описанное выше. Потому как вылетает сразу вся менюха а не по категориям как сделано на www.softlinks.ru например.
Вот структура таблицы
CREATE TABLE `catalogs` (
`cat_id` int(11) NOT NULL auto_increment,
`parent_id` int(11) NOT NULL default '0',
`cat_name` varchar(200) NOT NULL default '',
PRIMARY KEY (`cat_id`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251 COLLATE=cp1251_bin AUTO_INCREMENT=13 ;
INSERT INTO `catalogs` VALUES (1, 0, 'Программирование');
INSERT INTO `catalogs` VALUES (2, 1, 'Веб программирование');
INSERT INTO `catalogs` VALUES (3, 1, 'Системное программирование');
INSERT INTO `catalogs` VALUES (4, 2, 'PHP');
INSERT INTO `catalogs` VALUES (5, 2, 'Perl');
INSERT INTO `catalogs` VALUES (6, 3, 'C++');
INSERT INTO `catalogs` VALUES (7, 6, 'Visual C++');
INSERT INTO `catalogs` VALUES (8, 3, 'Delphi');
INSERT INTO `catalogs` VALUES (9, 0, 'Базы данных');
INSERT INTO `catalogs` VALUES (10, 9, 'MySQL');
INSERT INTO `catalogs` VALUES (11, 9, 'Oracle');
INSERT INTO `catalogs` VALUES (12, 9, 'MS Access');
print "Дерево каталога<br><table border='1'>";
define ('DEF_INDENT',4);
function get_tree($parent_id=0,$deep){
//sql запрос
$nbsp=str_repeat (" ",$deep*DEF_INDENT);
$ok = mysql_query("SELECT * FROM catalogs WHERE parent_id='$w'");
while ($row = mysql_fetch_array($ok)){
//получение имени из базы данных
$name = $row['cat_name'];
$level = $row['cat_id'];
//получение длины отступа и имени
print "<TR><TD>$nbsp<a href='$php_self?w=$level'>$name</a></TD></TR>";
//вывод информации полученного каталога
if ($_GET['cat_id'] == $row['cat_id']){
get_tree($row['cat_id'],$deep+1);
}
}
}
get_tree (0,0);
print "</table>";
$w- откуда берется? судя по всему вообще нет
правмльно будет $ok = mysql_query("SELECT * FROM catalogs WHERE parent_id=" . intval($parent_id));
polo добавил 29-09-2006 в 12:14:17:
советую пересмотреть реализацию, при большом кол-ве подкатегорий база загнется.
__________________
Всегда есть решение.
| Формат времени GMT. Текущее время 20:26. | Показаны 2 сообщений на этой странице |
Powered by: vBulletin Version 2.2.4
Copyright © Jelsoft Enterprises Limited 2000, 2001.