为horea资源规划系统提供搜索功能
horae.search的Python项目详细描述
简介
horae.search提供了horea的搜索功能 实现ajax驱动的全文搜索的资源规划系统 以及可插入的高级搜索表单。此外,它还实现了 基于所提供的实现的受限特殊Query实现 通过hurry.query仅 返回允许用户查看的结果。
用法
有几种方法可以扩展和调整搜索行为 通过注册特殊适配器生成表单和结果。以下可能性 可用于从horae.search.search.SearchMixin进行子分类的任何视图。
扩展高级搜索表单
高级搜索表单可以通过注册命名的多适配器进行扩展 实现horae.search.interfaces.IAdvancedSearchFieldProvider 调整context和request。例如,如果有人 要在自定义目录中添加新的TextLine字段搜索 实现方式如下:
import grok from zope import interface from zope import schema from zope.publisher.interfaces.browser import IBrowserRequest from hurry import query from horae.search import interfaces class SampleAdvancedSearchFieldProvider(grok.MultiAdapter): grok.adapts(interface.Interface, IBrowserRequest) grok.implements(interfaces.IAdvancedSearchFieldProvider) grok.name('sampleadvancedfieldprovider') def __init__(self, context, request): self.context = context self.request = request def fields(self): """ Returns a list of fields to be added to the form """ return [ schema.TextLine( __name__ = 'sample_text_line', title = u'Sample text line' ) ] def query(self, **data): """ Returns a list of queries """ queries = [] if 'sample_text_line' in data: queries.append(query.Text(('samplecatalog', 'text'), data['sample_text_line'])) return queries
调整默认排序
默认情况下,搜索结果按目录中的特殊整数索引排序。 这个整数可以通过注册一个名为 horae.search.interfaces.ISortingProvider并调整对象的排序 应该改成。例如,如果一个人想移动每一张有 设置在搜索结果底部的特殊属性 会是这样的:
from horae.ticketing.interfaces import ITicket class SampleSortingProvider(grok.Adapter): grok.context(ITicket) grok.implements(interfaces.ISortingProvider) grok.name('samplesortingprovider') def add(self): """ Returns an integer to be added to the sorting """ return 0 def adjust(self, sorting): """ Adjusts the sorting after all providers sorting where added and returns the adjusted sorting """ if (self.context.get_property('my_special_property', None) is not None): return 0 return sorting
更改默认排序
如上所述,搜索结果的默认排序是一个特殊的整数索引 在目录里。这可以通过注册实现 horae.search.interfaces.IDefaultSortingProvider并调整 搜索视图或搜索视图以及所需的上下文。示例实现 更改高级搜索结果的默认排序如下:
from horae.search import search class SampleDefaultSortingProvider(grok.Adapter): grok.context(search.AdvancedSearch) grok.implements(interfaces.IDefaultSortingProvider) def sort_field(self): """ The index used to sort """ return ('samplecatalog', 'sorting') def reverse(self): """ Whether to reverse the sort order """ return False
添加列
通过注册命名适配器,可以向结果表添加新列 实现horae.search.interfaces.IColumnProvider以适应所需的context。 下面是在horae.search.search中找到的示例实现 显示对象是否已完成的列:
class CompleteColumnProvider(grok.Adapter): """ Column provider adding the complete column """ grok.implements(interfaces.IColumnProvider) grok.context(interface.Interface) grok.name('horae.search.column.complete') name = 'complete' title = _(u'Completed') sortable = None insert_after = '*' def __init__(self, context): self.context = context def filterable(self): """ Returns a vocabulary for filtering the column or None if no filtering is available """ return vocabulary.SimpleVocabulary([ vocabulary.SimpleTerm(0, 'no', _p(u'No')), vocabulary.SimpleTerm(1, 'yes', _p(u'Yes')) ]) def factory(self, object, request): """ Returns the value to be displayed for the given object """ return (IComplete(object, lambda: False)() and _p(u'Yes') or _p(u'No')) def cache_key(self, key, *args, **kwargs): """ Modifies the cache key if needed and returns it """ return key + parents_modification_cache_key(self.context)
添加行css类
最后但不是最不重要的一个可以通过注册将自定义css类添加到行中 实现^{tt13}的命名适配器$ 调整所需的context。添加css类的示例实现 special如果票证有一个特殊的属性集,则如下所示:
class SampleRowClassProvider(grok.Adapter): grok.context(ITicket) grok.implements(interfaces.IRowClassProvider) def classes(self): """ Returns a list of CSS classes to be set on the row """ if (self.context.get_property('my_special_property', None) is not None): return ['special'] return []
依赖关系
霍拉
更改日志
1.0a1(2012-01-16)
- 初始版本