parser

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

 

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

Я понял вас наконец-то. Ступил, сорики

Лозовенко Виктор 29.08.2004 12:31

Но, кстати, в XML там есть встроенные средства движения по оси от корня до элемента. А тут их надо самому придумывать:

Во первых, не стоит в рекурсивных функциях загружать таблицу разделов каждый раз
@main[]
$pages[^table::load[pages.dat]]
ее можно загрузить где-нибудь снаружи, хоть в @main[]

Во вторых,
создаем такую таблицу (тоже один раз, где-нибудь в начале):
$parents[^table::create{id}]
В третьих, при нажатию на ссылку, которая как-нибудь идентифицирует себя через id, вызываем такую функцию:
^findparents[id]
^parents.sort[$parents.id]

# ------------------------------------------

@findparents[id]
^if(^pages.locate($pages.id==$id)){^parents.append{$pages.id} ^findparents[$pages.pid]}
Вот, теперь у вас в таблице $parents перечислены все id разделов, включая корневой и тот элемент, на который нажали. Я не проверял для 20-ти элементов, мне кажется, для 20 тоже будет работать.

Теперь вы можете указывать, какие разделы нужно разворачивать, а какие нет.

Функцию типа @showchilds[pid] - показать детей - писать не буду, думаю, должно и у вас получиться.