parser

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

 

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

Предлагаю оптимизировать класс uri.p

mashi 29.11.2005 21:08 / 29.11.2005 21:13

Суть оптимизации заключается в том, что при создании объекта
мы переводим полученную таблицу (items) разделов не в хеш с ключем id, а в хеш таблиц с ключем parent_id.

В этом случае значительно упрощается построение урлов (более чем в три раза!).

Для совместимости с Парсер 3.2, я заменил названия методов.
@CLASS
uri

###################################################################
@init[items]
$childs_of[^items.hash[parent_id][$.distinct[tables]]]

###################################################################
@geveme_all_site_uri[parent_uri]
^if(!def $parent_uri){$parent_uri[/]}
$_items[^table::create{uri	id	title}]
^_giveme_uri[$childs_of.0;$parent_uri]
$result[$_items]
$_items[]
### End of @get_all_site_uri[]

###################################################################
@_giveme_uri[sibling;parent_uri]
^sibling.menu{
	^_items.append{${parent_uri}$sibling.[dir]/	$sibling.id	$sibling.title}
	^if(def $childs_of.[$sibling.id]){
		^_giveme_uri[$childs_of.[$sibling.id];${parent_uri}$sibling.[dir]/]
	}
}
### End of @_giveme_uri[sibling;parent_uri]
P.S.
Теперь, при построении урлов, можно задать "начало урла".
Например:

1. Так можно получить урлы относительно корня (по умолчанию)
$site_uri[^uri::init[]]
$site_uri[^site_uri.geveme_all_site_uri[/]]
2. А так -- относительно директории '/some_path/'
$some_uri[^uri::init[]]
$some_uri[^site_uri.geveme_all_site_uri[/some_path/]]