Ответ
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 :)
Если интересно -- могу выслать.
- Предлагаю оптимизировать класс uri.p, mashi 29.11.2005 21:08 / 29.11.2005 21:13
- uri (класс): исправления и доработки, Никита Козин [M] 03.02.2006 14:36 / 03.02.2006 14:36
- Ответ, mashi 03.02.2006 20:26
- дополнения, dev 02.12.2005 18:20 / 02.12.2005 18:25
- Ответ, mashi 06.12.2005 20:48 / 06.12.2005 20:53
- Ответ, Misha v.3 [M] 01.12.2005 18:34 / 01.12.2005 18:56
- идея мне нравится, dev 01.12.2005 13:35
- ответ:, mashi 01.12.2005 15:37
- Ответ, dev 01.12.2005 18:12
- Ответ, mashi 02.12.2005 01:25
- Ответ, dev 02.12.2005 14:02
- Ответ, dev 02.12.2005 13:29
- children (-), Александр Петросян (PAF) [M] 01.12.2005 19:14
- @geveme...[] - афтар жжошь! пеши есчо! :) (-), Misha v.3 [M] 29.11.2005 22:14