parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Деревья 2

dima 30.08.2004 13:50

Прошу прощения за новый подобный тред, но тот, что я создавал ушел далеко вниз...

прошу вас помочь мне вот с чем:

есть такая таблица:
id	pid	name
1	0	name_1
2	0	name_2
3	0	name_3
4	0	name_4
5	1	name_1_1
6	1	name_1_2
7	1	name_1_3
8	1	name_1_4
9	2	name_2_1
10	2	name_2_2
11	2	name_2_3
12	2	name_2_4
13	3	name_3_1
14	3	name_3_2
15	3	name_3_3
16	3	name_3_4
17	15	name_15_1
18	15	name_15_2
19	15	name_15_3
из нее нужно сделать дерево:
@main[]
$tree[^table::load[tree.cfg]]
###############

@tree[parent_id][level]

$level[^tree.select($parent_id == $tree.pid)]

<ul>
^level.menu{
	$id($form:id)

	$parents[^hash::create[]]
	$str_hash[^tree.hash[id]]
	$pid($id)
	^while($pid){
  		^parents.add[
    		$.[$pid][$pid]
  		]
  	$pid($str_hash.[$pid].pid)
	}
	
	^if($form:id == $level.id){
		<li>$level.name</li>
	}{
		<li><a href="?id=$level.id">$level.name</a></li>
	}
	^if($parents.[$level.id]){
		^tree[$level.id]
	}	
	
}
</ul>
################
все работает как часы
# это не тестовый код, вместо него, но по такому же алгоритму я
# использую класс с такими параметрами:
# 1. беру из базы таблицу
# 2. делаю из нее хеш
# 3. формирую все полные uri (в базе храняться без слешей и родительских путей)
# 4. кладу это все в хеш и рекурсивно вызываю  
а проблема вот в чем, id родителей ищется по $form:id, это я делал для того, чтобы не создавть кучу папок.
но ведь у меня есть uri, и form:id мне не нужен больше. Но вот проблема - я не знаю, как определить родительский id другим способом, подскажите пожалуйста.

спасибо