parser

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

 

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

Ответ

mashi 16.02.2006 16:53

Не оптимально, потому что при каждом вызове методов @get_uri[] или @get_id[] запускается рекурсивный метод @get[]. Нужно что бы он вызывался один раз при инициализации или, что лучше всего, в админке при редактировании дерева объектов.

По поводу функциональности.
Я пользуюсь структурой базы engine v.4, описанной Мишей.
Рассматриваемый в этом треде класс uri у меня переродился в класс object, который работает с объектами сайта.

В конструкторе класса я просто беру (из базы или кеша) готовую таблицу с объектами сайта, будучи абсолютно увуренным, что в ней есть посчитанные поля full_path, thread_id и nesting. После этого мне остается сделать только два хеша с ключами по id и по parent_id. Причем, в памяти реально будит храниться только таблица, а хеши будут ссылаться на ее данные.

С таким подходом отпадает необходимость в методе получения полного пути объекта (@get_uri[]), т.к. можно легко получить ту же строку (или др инф) из хеша
$ALL.[25].full_path
Задача определения идентификатора объекта сводится к простому поиску в таблице
^if(^ALL_table.locate[full_path;$full_path]){
	$result($ALL_table.id)
}{
	^throw[object;Not found]
}
PS
Имеются и др полезные методы в классе object :)
Если интересно -- могу выслать.