Форум сетевых администраторов
Показаны 2 сообщений на этой странице

Форум сетевых администраторов (http://netadmin.ws/forum/index.php)
- PHP (http://netadmin.ws/forum/forumdisplay.php?forumid=6)
-- Деревья, рекурсивная функция (http://netadmin.ws/forum/showthread.php?threadid=12040)


Помещено link26 31-08-2006 в 17:02:

Деревья, рекурсивная функция

Всем день добрый. У меня вопрос по деревьям. Делаю меню вида:

1ссылка
>>1подссылка
>>>>1подподссылка
>>>>2подподссылка
>>2подсссылка
>>>>1подподссылка
>>>>2подподссылка
2ссылка
>>1подссылка
>>>>1подподссылка
>>>>2подподссылка
>>>>3подподссылка
>>2подсссылка
3ссылка
>>1подссылка
>>>>1подподссылка
>>2подсссылка


Но одна проблема - список дерева выводится полностью.
Нужно чтобы при нажатии на главную категорию вылетал список его ее подкаталогов а остальные скрывались и оставались только главные категории(parent_id=0).
Т.е. видимо передавать параметр, и так для подкаталогов тоже.
Вот код который имеется, нужно только объяснить мне как сделать описанное выше. Потому как вылетает сразу вся менюха а не по категориям как сделано на www.softlinks.ru например.

Вот структура таблицы

code:

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');



А вот сам код меню

PHP:

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 принимает значение cat_id при обновлении страницы и в запросе тоже используется вывод всех parent_id='$w'.
Но при нажатии на ссылки всеравно ничего не происходит, и нет выпадающих подкатегорий.
Где возможная ошибка? Плз не давайте ссылки на мануал, я его уже обчитался, расписал все по пунктам.


Помещено polo 29-09-2006 в 12:12:

$w- откуда берется? судя по всему вообще нет
правмльно будет $ok = mysql_query("SELECT * FROM catalogs WHERE parent_id=" . intval($parent_id));

polo добавил 29-09-2006 в 12:14:17:
советую пересмотреть реализацию, при большом кол-ве подкатегорий база загнется.

__________________
Всегда есть решение.


Формат времени GMT. Текущее время 19:37.
Показаны 2 сообщений на этой странице

Powered by: vBulletin Version 2.2.4
Copyright © Jelsoft Enterprises Limited 2000, 2001.