Заморочка с меню.

defence

Деклассированный элемент
Заморочка с меню.

Привет люди! Вопрос к вам: есть меню, которое выбирается из базы с такой структурой:

id | name | parent
1 | категория 1 | 0
2 | категория 2 | 0
3 | категория 3 | 0
4 | подкатегория 1.1 | 1
5 | подкатегория 1.2 | 1
6 | подкатегория 2.1 | 2

Здесь понятно какая подкатегория какой категории принадлежит. Выводится все это дело следующим образом, если кликнуть на первую категорию:

Категория 1
- подкатегория 1.1
- подкатегория 1.2
Категория 2
Категория 3


А если на вторую, то так вот:

Категория 1
Категория 2
- подкатегория 2.1
- подкатегория 2.2
Категория 3


Вот код, который все это делает:

PHP:
if (!$cid)
return; 
$mas=array(); 
$list_cat=mysql_query("SELECT * FROM categories WHERE parent='$cid' ORDER BY name"); 
$num=mysql_num_rows($list_cat); 
for($i=0; $i<$num; $i++) { 
  $mas[]=mysql_fetch_array($list_cat); 
} 
  
$list_cat=mysql_query("SELECT * FROM categories WHERE parent=0 ORDER BY cid"); 
$num=mysql_num_rows($list_cat); 
for($i=0; $i<$num; $i++) { 
  $lc=mysql_fetch_array($list_cat);
  if($lc["cid"] == $cid) { 
  echo '<font class=catlink_activ><li><b>'.$lc["name"].'</b></li></font><br>'; 
  } else {
  echo '<a class=catlink href=catalog.php?cid='.$lc["cid"].'><li><b>'.$lc["name"].'</b></li></a><br>';
  }

  if ($lc['cid']==$cid){ 
     for ($j=0;$j<sizeof($mas);$j++){ 

	 if($sub !== $mas[$j]["cid"]) {
	echo '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- <a class=catnav href=catalog.php?cid='.$mas[$j]["parent"].'&sub='.$mas[$j]["cid"].'>'.$mas[$j]["name"].'</a><br>';
	    } else {
	echo '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- <font class=subcat>'.$mas[$j]["name"].'</font><br>'; 
 
     } 
  } 
}
}
Вопрос вот в чем: босс хочет чтоб также работали категории третьего уровня, типа "подподкатегории". Т.е.,

Категория 1
Категория 2
- подкатегория 2.1
- подподкатегория 2.1.1
- подподкатегория 2.1.2
- подкатегория 2.2
Категория 3


Подскажите, пожалуйста, как это реализовать. Просто все это нужно срочно, а я 2 месяца вообще к компу не подходил, ничего в голове собрать не могу (
 

zerkms

TDD infected
Команда форума
что мешает в parent для новой записи прописать '6'
??
 

defence

Деклассированный элемент
если выводить просто деревом, то ничего не мешает... Надо чтоб они открывались и закрывались как на http://mir-podarkov.ru/catalog.php?cid=43 . Пощелкай там по жирным категориям.
 

msdn11

Новичок
ну рекурсия обычная. если не знаеш могу готовое нарыть. у меня такое было где-то.
просто ф-ция которая выводит должна сама к себе обращатся с ид очередной записи .
 

kost

Новичок
Могу кинуть готовый класс, только он работает со Smarty. А вообще им пользоваться просто.

$tree->insert($data, $parent_id, $this_id);

плюс шаблоны для менюшки.
 
Сверху