2012-01-11 55 views
0

我想使用以下代碼從我的Archetypes包中顯示目錄結果。問題是顯示的列表不符合內容選項卡中的位置順序。我錯過了什麼?目錄結果按位置順序排列內容

class BookView(BrowserView): 

    implements(IBookView) 

    def get_chapters(self): 
     context = aq_inner(self.context) 
     catalog = getToolByName(context, 'portal_catalog') 
     folder_path = '/'.join(context.getPhysicalPath()) 
     results = catalog(
         path={'query': folder_path, 'depth': 1}, 
         portal_type=('File', 'Chapter') 
       ) 
     return results 


<div class="books-pdf" 
    tal:define="chapters view/get_chapters" 
    tal:condition="chapters"> 
    <span class="listname" 
     i18n:translate="">Chapter Name</span> 
    <span class="iconname" 
     i18n:translate="">File Type</span> 
    <span class="sizename" 
     i18n:translate="">File Size</span> 
    <tal:chapters repeat="chapter chapters"> 
    ... 

回答

8

目錄返回內部訂單項目。您可以使用sort_on參數來完成此操作,該參數應該是用於排序的索引的名稱。

大多數索引可以用於排序,顯着的例外是全文索引(這就是爲什麼在Plone目錄中有sortable_title索引)。

你可能想排序的getObjPositionInParent指數,後者持有它的每個對象的索引的容器:

results = catalog(
     path=dict(query=folder_path, depth=1), 
     portal_type=('File', 'Chapter'), 
     sort_on='getObjPositionInParent', 
    ) 
1

您需要通過這個指標來對結果進行排序:除非您明確請求判令

getObjPositionInParent