如何在CKAN

时间:2015-08-24 06:00:34

标签: python python-2.7 ckan

如何在我的CKAN实例中为自定义字段添加搜索过滤器选项(facet)? search page即我想在此图片的左侧边栏中添加一个选项。

我在我的扩展程序中使用了CKAN Theme集成来替换CUSTOM搜索过滤器而不是组和组织。但我想为添加数据集时创建的自定义字段添加自定义搜索过滤器。

http://docs.ckan.org/en/latest/extensions/plugin-interfaces.html#ckan.plugins.interfaces.IFacets

是否可以添加自定义搜索过滤器?如果有人能够知道,请帮助我。

3 个答案:

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