2013-04-04 9 views
6

'da nasıl geçersiz kılınır Plone arama işlevi plone.app.search paketinde uygulanmaktadır; İstekte yer alan sort_on değişken, search template'daki sonuçların sıralama düzenini kontrol etmek için kullanılır.Arama sonuçları sıralama düzeni Plone

Varsayılan olarak, bu değişkenin değeri yoksa, Plone, sıralama düzeni olarak alaka düzeyini kullanır.

Bunu değiştirmenin en kolay yolu tarih (en yeni önce)?

cevap

6

Yeni sıralama seçeneklerini ayarlamak ve herhangi bir sıralama yapılmadığında varsayılan sıralamayı değiştirmek için arama görünümünü özelleştirmeniz gerekir.

hala alaka düzeyine göre sıralamak mümkün gerekiyorsa, o zaman filter_query yöntemindeki değişiklik boş olmayan bir değeri kullanın:

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'), 
     ) 

Ardından sitenize bu görüşü kayıt; Eğer kolay olurdu bir tema katmanını kullanıyorsanız:

<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> 

Sen plone.app.search paketinden search.pt ve updated_search.pt şablonlar üzerinde kopyalamak gerekecektir.

+0

Teşekkürler! Çözümünüzü son çalışma kodunu yansıtacak şekilde düzeltdim, ancak değişiklikleri göremiyorum. – hvelarde

+0

@hvelarde: Önerilen düzenlemeniz yorumcular için biraz radikal; Sürümümü sizinkilerden güncelledim. –

+0

Bu yorumcular zaten kimler? insanlar Plone hakkında hiçbir şey bilmiyorlar ve bir kurguyu gözden geçirebileceklerini düşünüyorlar? Teşekkürler! – hvelarde