2011-08-18 7 views
2

と仮定します。階層構造を保持するportal_catalogを実行する方法はありますか?

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のキーです。

類似のデータをstrcuture(オブジェクトの階層構造を保持する)することは可能ですか、自分自身の再帰関数を作成する必要がありますか(上記の構造は存在しない可能性がありますが、アイデアを得る)?私はperformaceの問題のためにportal_catalogと脳を使用することを考えています。

ありがとうございます!

+1

まず、この点に注意してください。間違った問題を解決しようとしているか、間違った方法で良い問題を解決しようとしている可能性があります。なぜあなたがこれをやっているのか、より良い答えがあるかもしれないことについて、もっと言いたいことがあります。 –

+0

私は、コンテキストから別のコンテキストにオブジェクト構造を複製していますが、一部のコンテンツタイプのみを複製しています。 2番目のコンテキストは同じタイプのオブジェクトを持ちません。他のコンテキストは同じIDとタイトルを持ちます。 –

+0

しかし、なぜこれをやろうとしていますか?これにはもっと多くの文脈が必要です。 –

答えて

4

sort_onpathのインデックスができると思います。つまり、カタログクエリの結果は階層別にソートされます。次に、itertools.groupbyを再帰的に使用して、記述した構造体のイテレータを取得できます。トリッキーな部分は再帰になります。あなたは、現在のフォルダ深度/再帰レベルのbrain.getPath()の適切な部分を選択するgroupbyのキーfuncを使いたいでしょう。

+2

ExtendedPathIndexで並べ替えることができないのではないかと懸念しています。手動で並べ替えを行うか、FieldIndexという別のsortable_pathインデックスを使用する必要があります。 –

+0

うーん、 –

+0

ExtendedPathIndexを使ってまったく同じように使用していました。 –

2

また、ネストされたナビゲーション構造を提供するサイトマップジェネレータを見ることもできます。

ここでは、(ビット)関連リンク:Navigation portlet: all childen always expanded

関連する問題