2013-04-04 6 views
6

में खोज परिणाम सॉर्ट ऑर्डर को ओवरराइड करने के लिए कैसे करें plone.app.search पैकेज में प्लोन खोज कार्यक्षमता लागू की गई है; sort_on अनुरोध में शामिल वैरिएबल का उपयोग search template पर परिणामों के क्रम क्रम को नियंत्रित करने के लिए किया जाता है।प्लोन

डिफ़ॉल्ट रूप से, जब इस चर के पास कोई मान नहीं है, तो प्लोन प्रासंगिकता क्रम के रूप में का उपयोग करता है।

इसे दिनांक (सबसे पहले सबसे पहले) में बदलने का सबसे आसान तरीका क्या है?

उत्तर

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> 

आप plone.app.search पैकेज से search.pt और updated_search.pt टेम्पलेट्स पर कॉपी करने की आवश्यकता होगी।

+0

धन्यवाद! मैंने अंतिम समाधान कोड को प्रतिबिंबित करने के लिए आपके समाधान को ठीक किया है लेकिन मैं संशोधन नहीं देख सकता। – hvelarde

+0

@ हॉवेलर्ड: आपके सुझाए गए संपादन समीक्षाकर्ताओं के लिए थोड़ा कट्टरपंथी था; मैंने अपना संस्करण आपके से अपडेट किया है। –

+0

वैसे भी इन समीक्षकों कौन हैं? लोग प्लोन के बारे में कुछ नहीं जानते हैं और उन्हें लगता है कि वे एक संपादन की समीक्षा कर सकते हैं? धन्यवाद! – hvelarde

संबंधित मुद्दे