Результат каталога по позиционному порядку в содержании - PullRequest
0 голосов
/ 11 января 2012

Я хочу, чтобы результаты каталога отображались с использованием следующих кодов из моего пакета 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">
  ...

Ответы [ 2 ]

8 голосов
/ 11 января 2012

Каталог возвращает товары во внутреннем порядке, если вы явно не запросили заказ. Это можно сделать с помощью параметра sort_on, который должен быть именем индекса, используемого для сортировки.

Большинство индексов можно использовать для сортировки, за исключением заметных полнотекстовых индексов (поэтому в каталоге Plone существует индекс sortable_title).

Вы, вероятно, хотите отсортировать по индексу getObjPositionInParent, который содержит индекс каждого объекта в своем контейнере:

    results = catalog(
        path=dict(query=folder_path, depth=1),
        portal_type=('File', 'Chapter'),
        sort_on='getObjPositionInParent',
    )
1 голос
/ 11 января 2012

Вам необходимо отсортировать результаты по этому индексу:

getObjPositionInParent
...