parser

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

 

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

Формирование списка всех URI сайта из примеров egr. Асы помогите понять алгоритм работы класса.

Артём 02.02.2003 16:55 / 02.02.2003 16:58

для себя щас пытаюсь опнять как это работает. Почти все понял, кроме

вот код который пробую
# работа с URI - формирование списка всех URI сайта
@CLASS
uri

#######
# конструктор
@init[]
$items[^table::create{id	parent_id	dir	title
1	0	hardware	Железо
11	1	computers	Компьютеры
12	1	printers	Принтеры
121	12	laser	Лазерные
122	12	ink	Струйные
2	0	software	Программное обеспечение
21	2	os	Операционные системы
22	2	editors	Текстовые редакторы
3	0	news	Новости}]
# входная таблица разделов
$self.items[$items]


# создание хэша из таблицы для ускорения поиска
$items_hash[^items.hash[id]]

#######
# форм. таблицы соответствий uri для всех разделов сайта
@get_all_site_uri[][uri]
$result[^table::create{uri	id	title}]
$uri{^if(def $items_hash.[$items.id].url){$items_hash.[$items.id].url}{^get_uri[$items.id]}}
^items.menu{

	^result.append{$uri	$items.id	$items.title}
}

#######
# получение uri раздела по заданному id
@get_uri[id][parent_id;uri]
$parent_id($id)
^while($parent_id){
	^if($items_hash.[$parent_id]){
		$uri[$items_hash.[$parent_id].dir/$uri]
		$items_hash.[$id].url[$uri]
		$parent_id($items_hash.[$parent_id].parent_id)
	}{
		$parent_id(0)
	}
}
$result[/$uri]


@show_uri[]
$site[^get_all_site_uri[]]
<table border=1 cellspacing=0>
^site.menu{
<tr>
<td class=defont>$site.uri</td>
<td class=defont>$site.id</td>
<td class=defont>$site.title</td>
</tr>
}
</table>
не могу понять, почему в функции @get_all_site_uri[][uri]
$uri{^if(def $items_hash.[$items.id].url){$items_hash.[$items.id].url}{^get_uri[$items.id]}}
^items.menu{

	^result.append{$uri	$items.id	$items.title}
}
переменная
$uri
определяется не в ^items.menu
т.е. так
@get_all_site_uri[][uri]
$result[^table::create{uri	id	title}]
^items.menu{
$uri{^if(def $items_hash.[$items.id].url){$items_hash.[$items.id].url}{^get_uri[$items.id]}}
	^result.append{$uri	$items.id	$items.title}
}
самое странное, что так пробую - результат тот же. Кто нибудь объясните почему так???