Как добавить опцию фильтра поиска (фасета) для настраиваемого поля в CKAN

Как я могу добавить параметр фильтра поиска (фасет) для моего настраиваемого поля в моем экземпляре CKAN? search page т. е. я хочу добавить опцию на левую боковую панель этого изображения.

Я использовал интеграцию с темой CKAN в своем расширении, чтобы заменить ПОЛЬЗОВАТЕЛЬСКИЙ поисковый фильтр вместо групп и организации. Но я хочу добавить пользовательский фильтр поиска для настраиваемого поля, которое я создал при добавлении набора данных.

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

Можно ли добавить пользовательский фильтр поиска? Пожалуйста, помогите мне, если кто-нибудь может знать об этом.


person Manish J    schedule 24.08.2015    source источник


Ответы (3)


Если я правильно понимаю, в ваших наборах данных есть дополнительное (настраиваемое) поле, и вы хотите добавить к поиску фасет, чтобы пользователи могли искать (фильтровать) по этому полю.

Документы, которые вы цитируете, показывают пример того, как изменить существующие группы аспектов:

facets_dict['groups'] = p.toolkit._('Publisher')

(поскольку «группы» уже существуют в facets_dict), а также добавить новую:

facets_dict['secondary_publisher'] = p.toolkit._('Secondary Publisher')

Поэтому вам просто нужно добавить свое пользовательское поле в качестве нового ключа в facets_dict, как в этом последнем примере.

person D Read    schedule 15.09.2015
comment
эта проблема была решена, я создал плагин с пользовательскими аспектами - person Manish J; 18.09.2015
comment
Пожалуйста, отметьте этот ответ как правильный или создайте новый ответ с фактическим решением. Это поможет другим, находящимся в том же положении, что и вы, которые заходят сюда, и именно так работает этот сайт. - person D Read; 21.09.2015

ответ пользователя @user3366016 был очень полезным, но я был не совсем прав. 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
person botivegh    schedule 13.08.2019
comment
спасибо, что отметили мою опечатку. Я импортирую плагины, а затем использую плагины, чтобы получить набор инструментов p.toolkit. Но, как вы указали, p.toolkit в этом случае не работает. Это должно быть plugins.toolkit, или я должен изменить свой импорт на as p и все последующие ссылки на plugins. Я сейчас обновился. - person user3366016; 12.09.2019

Только для тех, кто наткнулся на это, я включаю немного больше деталей, но другой ответ правильный.

Для реализации вы можете обновить 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'] = plugins.toolkit._('Secondary Publisher') 

        # Return the updated facet dict.
        return facets_dict
person user3366016    schedule 19.11.2018