Есть ли способ сделать portal_catalog, который сохраняет иерархическую структуру? - PullRequest
2 голосов
/ 19 августа 2011

Предположим:

Folder
  - Document
  - Document
  - Folder1
    - Document
    - Document

Если я делаю portal_catalog, используя папку в качестве пути, я получаю:

[<Products.ZCatalog.Catalog.mybrains object at 0xdba8d9c>, 

<Products.ZCatalog.Catalog.mybrains object at 0xdd71234>, 

<Products.ZCatalog.Catalog.mybrains object at 0xdd71324>, 

<Products.ZCatalog.Catalog.mybrains object at 0xdd712fc>, 

<Products.ZCatalog.Catalog.mybrains object at 0xdd71194>]

Но я бы хотел иметь каталог portal_catalog, который поддерживает иерархический контекст , например:

{
    "Folder": 
             [
             <Products.ZCatalog.Catalog.mybrains object at 0xdba8d9c>,
<Products.ZCatalog.Catalog.mybrains object at 0xdba8d9c>, 
              {
               "Folder1":[
                          <Products.ZCatalog.Catalog.mybrains object at 0xdba8d9c>, <Products.ZCatalog.Catalog.mybrains object at 0xdba8d9c>
                         ]
              }
             ]
}

Итак, если это папочный тип, его id - это ключ от dict.

Возможно ли иметь похожую структуру данных (которая сохраняет иерархическую структуру объекта), или мне придется создать собственную рекурсивную функцию (я знаю, что приведенная выше структура, возможно, не будет существовать, но я думаю, что вы можете получить идея)? Я думаю об использовании portal_catalog и мозгов из-за проблем с производительностью.

Спасибо!

Ответы [ 2 ]

4 голосов
/ 19 августа 2011

Я думаю, вы можете sort_on индекс path.Это означает, что результаты вашего каталога будут отсортированы по иерархии.Затем вы можете рекурсивно использовать itertools.groupby , чтобы получить итератор для описываемой вами структуры.Сложной частью будет рекурсия.Вы захотите использовать ключевую функцию для groupby, которая выбирает соответствующую часть brain.getPath () для текущей глубины / уровня рекурсии папки.

2 голосов
/ 19 августа 2011

Вы также можете взглянуть на генератор карты сайта, который предоставляет вложенную структуру навигации.

Здесь (бит) связанная ссылка: Портлет навигации: все дети всегда расширяются

...