2013-04-04 2 views
6

Функция поиска Plone реализована в пакете plone.app.search; переменная, включенная в запрос, используется для управления порядком сортировки результатов на search template.Как изменить порядок сортировки результатов поиска в Plone

По умолчанию, когда эта переменная не имеет значения, Plone использует релевантность как порядок сортировки.

Что является самым простым способом изменить это на с датой (сперва новые)?

ответ

6

Вам нужно будет настроить вид поиска, чтобы установить новые параметры сортировки, и изменить сортировку по умолчанию, если сортировка не задана.

Если вам все еще нужно, чтобы иметь возможность сортировать по релевантности, используйте непустое значение, которое вы затем изменить в filter_query метода:

from plone.app.search.browser import _, Search, SortOption 

class MyCustomSearch(Search): 
    def filter_query(self, query): 
     query = super(MyCustomSearch, self).filter_query(query) 

     if 'sort_on' not in query: 
      # explicitly set a sort; if no `sort_on` is present, the catalog sorts by relevance 
      query['sort_on'] = 'EffectiveDate' 
      query['sort_order'] = 'reverse' 
     elif query['sort_on'] == 'relevance': 
      del query['sort_on'] 

     return query 

    def sort_options(self): 
     """ Sorting options for search results view. """ 
     return (
      SortOption(self.request, _(u'date (newest first'), 
       'EffectiveDate', reverse=True 
      ), 
      SortOption(self.request, _(u'relevance'), 'relevance'), 
      SortOption(self.request, _(u'alphabetically'), 'sortable_title'), 
     ) 

Затем зарегистрировать этот вид на ваш сайт; если вы используете тему слой, который был бы самым простым:

<configure 
    xmlns="http://namespaces.zope.org/zope" 
    xmlns:browser="http://namespaces.zope.org/browser" 
    i18n_domain="plone"> 

    <browser:page 
     name="search" 
     layer=".interfaces.IYourCustomThemeLayer" 
     class=".yourmodule.MyCustomSearch" 
     permission="zope2.View" 
     for="*" 
     template="search.pt" 
     /> 

    <browser:page 
     name="updated_search" 
     layer=".interfaces.IYourCustomThemeLayer" 
     class=".yourmodule.MyCustomSearch" 
     permission="zope2.View" 
     for="Products.CMFCore.interfaces.IFolderish" 
     template="updated_search.pt" 
    /> 

</configure> 

Вам нужно скопировать над search.pt и updated_search.pt шаблонов из plone.app.search пакета.

+0

спасибо! Я исправил ваше решение, чтобы отразить окончательный рабочий код, но я не вижу изменений. – hvelarde

+0

@hvelarde: ваше предложенное редактирование было немного радикальным для рецензентов; Я обновил свою версию с вашей. –

+0

Кто эти обозреватели? люди ничего не знают о Plone, и они чувствуют, что могут просматривать редактирование? благодаря! – hvelarde

Смежные вопросы