Plone 有没有一种方法可以创建一个保持层次结构的门户目录?

Plone 有没有一种方法可以创建一个保持层次结构的门户目录?,plone,plone-3.x,Plone,Plone 3.x,假设: Folder - Document - Document - Folder1 - Document - Document 如果我使用文件夹作为路径创建门户目录,我会得到: [<Products.ZCatalog.Catalog.mybrains object at 0xdba8d9c>, <Products.ZCatalog.Catalog.mybrains object at 0xdd71234>, <Products

假设:

Folder
  - Document
  - Document
  - Folder1
    - Document
    - Document
如果我使用文件夹作为路径创建门户目录,我会得到:

[<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>]
[,,
, 
, 
, 
]
但我希望有一个保持层次上下文的门户目录,如:

{
    "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>
                         ]
              }
             ]
}
{
“文件夹”:
[
,
, 
{
“Folder1”:[
, 
]
}
]
}
所以,如果它是folderish类型,那么它的id是dict中的一个键

是否可能有类似的数据结构(保持对象的层次结构),或者我必须创建自己的递归函数(我知道上面的结构可能不存在,但我认为您可以理解)?由于性能问题,我正在考虑使用
portal\u catalog
和大脑


谢谢

我认为您可以对
路径
索引进行排序。这意味着您的目录查询结果将按层次结构排序。然后,您可以使用递归方式在所描述的结构上获得迭代器。棘手的部分将是递归。您需要为groupby使用一个键func,为当前文件夹的递归深度/级别选择brain.getPath()的适当部分。

您还可以查看站点地图生成器,它提供了一个嵌套的导航结构


这里有一个(bit)相关链接:

首先,你应该小心这一点。很可能你试图解决错误的问题,或者试图以错误的方式解决好问题。请随便说说为什么要这样做,也许会有更好的答案。我正在将一个对象结构从一个上下文复制到另一个上下文,但仅限于某些内容类型。第二个上下文将不具有相同类型的对象,它将具有其他对象,但具有相同的id和标题。但是为什么要尝试这样做?这需要更多的背景。我不能提供更多的细节…:(事实上,第一个上下文将有许多我对其id/名称感兴趣的内容类型,这些内容类型将在另一个上下文中使用,该上下文将具有本地权限,但需要具有相同的结构。我担心您无法在ExtendedPathIndex上排序。您必须手动进行排序,或者使用一个单独的可排序路径索引,该索引是一个FieldIndex.Hmm,我知道我做过一次,但那可能是在ExtendedPathIndex成为默认值之前。不久前,我不得不使用ExtendedPathIndex处理这个完全相同的用例。可排序路径是一个很好的方法。我可以遍历从门户目录收到的列表,并从顺序列表(而不是创建)中执行我需要的处理一个中介结构,上面有DICT。谢谢!