6
Plone搜索功能在plone.app.search包中實現;請求中包含的sort_on變量用於控制search template上結果的排序順序。如何覆蓋Plone中的搜索結果排序順序
默認情況下,當此變量沒有值時,Plone使用相關性作爲排序順序。
將此更改爲日期的最簡單方法是什麼(最新的第一個)?
Plone搜索功能在plone.app.search包中實現;請求中包含的sort_on變量用於控制search template上結果的排序順序。如何覆蓋Plone中的搜索結果排序順序
默認情況下,當此變量沒有值時,Plone使用相關性作爲排序順序。
將此更改爲日期的最簡單方法是什麼(最新的第一個)?
您需要自定義搜索視圖以設置新的排序選項,並在未設置排序時更改默認排序。
如果您仍然需要能夠按相關性排序,使用一個非空值,你再在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
包複製。
謝謝!我修復了您的解決方案以反映最終的工作代碼,但我看不到修改。 – hvelarde 2013-04-06 20:58:24
@hvelarde:你的建議編輯對評論者來說有點激進;我更新了你的版本。 – 2013-04-06 21:26:47
這些評論者是誰?人們對Plone一無所知,他們覺得他們可以評論一下編輯嗎?謝謝! – hvelarde 2013-04-07 15:53:02