如何在我的CKAN实例中为自定义字段添加搜索过滤器选项(facet)? 即我想在此图片的左侧边栏中添加一个选项。
我在我的扩展程序中使用了CKAN Theme集成来替换CUSTOM搜索过滤器而不是组和组织。但我想为添加数据集时创建的自定义字段添加自定义搜索过滤器。
http://docs.ckan.org/en/latest/extensions/plugin-interfaces.html#ckan.plugins.interfaces.IFacets
是否可以添加自定义搜索过滤器?如果有人能够知道,请帮助我。
答案 0 :(得分:4)
如果我理解正确,您的数据集会有一个额外的(自定义)字段,并且您希望在搜索中添加 facet ,以使用户能够按该字段搜索(过滤)。
您引用的文档显示了如何更改现有方面的示例':
facets_dict['groups'] = p.toolkit._('Publisher')
(因为'群组'已经存在于facets_dict
中)并且还要添加新的群组:
facets_dict['secondary_publisher'] = p.toolkit._('Secondary Publisher')
因此,您只需将自定义字段添加为facets_dict
中的新密钥,就像后一个示例一样。
答案 1 :(得分:0)
对于那些绊脚石的人,我会提供更多的细节,但是other answer是正确的。
要实现,您可以更新plugin.py
,为插件实现IFacets,然后使用dataset_facets()
函数(或适当的*_facets()
函数)添加新的方面。
# plugin.py
# encoding: utf-8
import ckan.plugins as plugins
class ExampleIFacetsFunctionsPlugin(plugins.SingletonPlugin):
plugins.implements(plugins.IFacets)
def dataset_facets(self, facets_dict, package_type):
'''Add new search facet (filter) for datasets.
This must be a field in the dataset (or organization or
group if you're modifying those search facets, just change the function).
'''
# This keeps the existing facet order.
facets_dict['secondary_publisher'] = p.toolkit._('Secondary Publisher')
# Return the updated facet dict.
return facets_dict
答案 2 :(得分:0)
@ user3366016的answer很有帮助,但我并不完全正确。需要导入ckan.plugins.toolkit。
这种代码的工作方式:
# plugin.py
# encoding: utf-8
import ckan.plugins as plugins
import ckan.plugins.toolkit as toolkit
class ExampleIFacetsFunctionsPlugin(plugins.SingletonPlugin):
plugins.implements(plugins.IFacets)
def dataset_facets(self, facets_dict, package_type):
facets_dict['secondary_publisher'] = toolkit._('Secondary Publisher')
# Return the updated facet dict.
return facets_dict