Вот что значит использовать для отображения дерева таблицы.
В Cache всё было бы значительно проще:
пусть данные хранятся в глобале ^Tree
Распечатаем глобал и посмотри что внутри: zw ^Tree
^Tree(«Россия»)=1
^Tree(«Россия»,«Воронеж»)=2
^Tree(«Россия»,«Воронеж»,«ООО „“Рога и копыта»"")=3
^Tree(«Россия»,«Воронеж»,«ООО „“Рога и копыта»"",«Главный офис»)=6
^Tree(«Россия»,«Воронеж»,«ООО „“Рога и копыта»"",«Офис 1»)=7
^Tree(«Россия»,«Воронеж»,«ООО „“Рога и копыта»"",«Офис 2»)=8
^Tree(«Россия»,«Воронеж»,«ООО „“Рога и копыта»"",«Офис 2»,«Сервер 1»)=9
^Tree(«Россия»,«Лиски»)=5
^Tree(«Россия»,«Лиски»,«ЛискиПресс»)=10
^Tree(«Россия»,«Москва»)=4
Уже это дерево легко преобразовать в xml и отобразить в интерфейсе.
Предположим что этого не достаточно и нам необходимо самим рекурсивно оббегать структуру — будем использовать низкоуровневую функцию $query ($q)
результатом выполнения комманды: s l="^Tree" f { s l=$q(@l) q:l="" s len=$ql(l) w l,! }
будет:
^Tree(«Россия»)
^Tree(«Россия»,«Воронеж»)
^Tree(«Россия»,«Воронеж»,«ООО „“Рога и копыта»"")
^Tree(«Россия»,«Воронеж»,«ООО „“Рога и копыта»"",«Главный офис»)
^Tree(«Россия»,«Воронеж»,«ООО „“Рога и копыта»"",«Офис 1»)
^Tree(«Россия»,«Воронеж»,«ООО „“Рога и копыта»"",«Офис 2»)
^Tree(«Россия»,«Воронеж»,«ООО „“Рога и копыта»"",«Офис 2»,«Сервер 1»)
^Tree(«Россия»,«Лиски»)
^Tree(«Россия»,«Лиски»,«ЛискиПресс»)
^Tree(«Россия»,«Москва»)
Добавим отступы (пусть никого не пугает вложенный цикл f i=1:1:len {w " "} ) и идентефикаторы выполним комманду:
s l="^Tree" f { s l=$q(@l) q:l="" s len=$ql(l) f i=1:1:len {w " "} w "(",$g(@l),") ",$qs(l,len),! }
получим:
(1) Россия
(2) Воронеж
(3) ООО "Рога и копыта"
(6) Главный офис
(7) Офис 1
(8) Офис 2
(9) Сервер 1
(5) Лиски
(10) ЛискиПресс
(4) Москва
Всё. Никаких хитростей никаких наворотов стандартные низкоуровневые функции. Стандартное дерево, в котором и хранятся все данные. Даже индексы не задействованы.
«и слишком общее описание способа хранения этой структуры» — я описал конкретный используемое мной способ хранения (конечно структура представлена сокращённо).
В Cache xml не хранится. Дело в том что любой xml — можно отобразить в глобал но не любой глобал — можно отобразить в xml. Поэтому xml — используется только как тело пост запроса (ответа). В самом Cache данные так и хранятся — в дереве.
Если действительно интересно прочитать про каше — то я опишу механизмы хранения данных и индексов используемые мной.
Странно, что никто не обратил внимание на новый проект avtomagazine.ua Совсем молодой проект, объявлений достаточно, скорость есть, правда ребятам ещё над дизайном поработать надо, но в целом достаточно достойный сайт.
ria.ua по вашему перегружена — ребят да у вас на 5 объявлений — 7 экранов внизу заполненных непонятно чем.
Скорость можно оценивать только на большом объёме данных (сейчас вообще не видно количество объявлений) и при большой нагрузке пользователей ( ни одного счётчика я не нашёл).
Яваскрипты — сами по себе ничего не дают (на том же am.ua яваскрипты получше будут).
Для таких сайтов самое важное функционал и качественный контент (а красивости людей в последнюю очередь интересуют).
Как-то очень громко написано — про более чем скромное начинание.
Предлагаю не пиаром обмениваться — а решениями и обсуждениями человеческо-технических проблем, с которыми мы сталкиваемся при разработке таких проектов. В общем — делиться опытом.
В Cache всё было бы значительно проще:
пусть данные хранятся в глобале ^Tree
Распечатаем глобал и посмотри что внутри:
zw ^Tree
^Tree(«Россия»)=1
^Tree(«Россия»,«Воронеж»)=2
^Tree(«Россия»,«Воронеж»,«ООО „“Рога и копыта»"")=3
^Tree(«Россия»,«Воронеж»,«ООО „“Рога и копыта»"",«Главный офис»)=6
^Tree(«Россия»,«Воронеж»,«ООО „“Рога и копыта»"",«Офис 1»)=7
^Tree(«Россия»,«Воронеж»,«ООО „“Рога и копыта»"",«Офис 2»)=8
^Tree(«Россия»,«Воронеж»,«ООО „“Рога и копыта»"",«Офис 2»,«Сервер 1»)=9
^Tree(«Россия»,«Лиски»)=5
^Tree(«Россия»,«Лиски»,«ЛискиПресс»)=10
^Tree(«Россия»,«Москва»)=4
Уже это дерево легко преобразовать в xml и отобразить в интерфейсе.
Предположим что этого не достаточно и нам необходимо самим рекурсивно оббегать структуру — будем использовать низкоуровневую функцию $query ($q)
результатом выполнения комманды:
s l="^Tree" f { s l=$q(@l) q:l="" s len=$ql(l) w l,! }
будет:
^Tree(«Россия»)
^Tree(«Россия»,«Воронеж»)
^Tree(«Россия»,«Воронеж»,«ООО „“Рога и копыта»"")
^Tree(«Россия»,«Воронеж»,«ООО „“Рога и копыта»"",«Главный офис»)
^Tree(«Россия»,«Воронеж»,«ООО „“Рога и копыта»"",«Офис 1»)
^Tree(«Россия»,«Воронеж»,«ООО „“Рога и копыта»"",«Офис 2»)
^Tree(«Россия»,«Воронеж»,«ООО „“Рога и копыта»"",«Офис 2»,«Сервер 1»)
^Tree(«Россия»,«Лиски»)
^Tree(«Россия»,«Лиски»,«ЛискиПресс»)
^Tree(«Россия»,«Москва»)
Добавим отступы (пусть никого не пугает вложенный цикл
f i=1:1:len {w " "} ) и идентефикаторы выполним комманду:
s l="^Tree" f { s l=$q(@l) q:l="" s len=$ql(l) f i=1:1:len {w " "} w "(",$g(@l),") ",$qs(l,len),! }
получим:
Всё. Никаких хитростей никаких наворотов стандартные низкоуровневые функции. Стандартное дерево, в котором и хранятся все данные. Даже индексы не задействованы.
В Cache xml не хранится. Дело в том что любой xml — можно отобразить в глобал но не любой глобал — можно отобразить в xml. Поэтому xml — используется только как тело пост запроса (ответа). В самом Cache данные так и хранятся — в дереве.
Если действительно интересно прочитать про каше — то я опишу механизмы хранения данных и индексов используемые мной.
ria.ua по вашему перегружена — ребят да у вас на 5 объявлений — 7 экранов внизу заполненных непонятно чем.
Скорость можно оценивать только на большом объёме данных (сейчас вообще не видно количество объявлений) и при большой нагрузке пользователей ( ни одного счётчика я не нашёл).
Яваскрипты — сами по себе ничего не дают (на том же am.ua яваскрипты получше будут).
Для таких сайтов самое важное функционал и качественный контент (а красивости людей в последнюю очередь интересуют).
Как-то очень громко написано — про более чем скромное начинание.
Предлагаю не пиаром обмениваться — а решениями и обсуждениями человеческо-технических проблем, с которыми мы сталкиваемся при разработке таких проектов. В общем — делиться опытом.