parser

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

 

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

Ответ

dev 02.12.2005 13:29

Т.е. примерно вот так все должно выглядеть?
@CLASS
uri

###################################################################
# Конструктор, items - таблица (поля: uri, id, title).
@init[items]
$children_of[^items.hash[parent_id][$.distinct[tables]]]

###################################################################
# Необязательный параметр parent_uri - адрес корневой директории, по умолчанию "/".
# Возвращает таблицу (поля: uri, id, title), содержащую полные адреса всех дочерних директорий.
@get[parent_uri]
^if(!def $parent_uri){$parent_uri[/]}
$_items[^table::create{uri	id	title}]
^_get[$children_of.0;$parent_uri]
$result[$_items]
$_items[]

###################################################################
# внутренний метод, рекурсивно обходит дочерние директории, вычисляет их адреса
# и добавляет их в таблицу _item.
@_get[sibling;parent_uri]
^sibling.menu{
	^_items.append{${parent_uri}$sibling.[dir]/	$sibling.id	$sibling.title}
	^if(def $children_of.[$sibling.id]){
		^_get[$children_of.[$sibling.id];${parent_uri}$sibling.[dir]/]
	}
}