Как передать контекстные фильтры на просмотр через сервисы


11

У меня есть представление, которое принимает контекстный фильтр, чтобы вернуть правильные результаты. Я использую Сервисы 3 и Drupal 7. Я могу создать конечную точку и получить представление через сервисы. Но кажется, что нет способа пройти контекстный фильтр, потому что services_views имеет только метод получения (который использует GET). Кто-нибудь знает, возможно ли это, и если да, то как это можно сделать?

Ответы:



3

Пока фильтры отображаются в представлении, имена полей доступны как контекстные фильтры. Например, выставьте NID в списке фильтров, и вы можете сделать

GET /endpoint?nid=5

1
Это решение работает для открытых критериев фильтра. Насколько я знаю, контекстные фильтры не работают, но это выдающийся обходной путь.
Брент

3

Это уже отвеченный вопрос, но для других, просматривающих здесь в будущем, я бы рекомендовал использовать и взглянуть на документацию в представлении служб . В нем разъясняется, как передавать контекстные фильтры вместе с кучей других возможных аргументов, а также имеется демонстрационное видео и примеры.


1
После дальнейших исследований выясняется, что это невозможно без изменения services_views.
user379468

2

Если вам нужно использовать несколько значений в вашем контекстном фильтре, я предлагаю сделать следующее:

  • Создайте свой контекстный фильтр (в моем случае: nid)
  • Нажмите «Предоставить значение по умолчанию» и установите тип, так как PHP Contextual Filter ожидает строку с несколькими значениями, разделенными + или запятой.

return str_replace("|", "+", $_GET['nid']);

  • В разделе «Дополнительно» установите флажок «Разрешить несколько значений».

Теперь при вызове службы предоставьте свои контекстные фильтры следующим образом: ... / my_service? Nid = 1 | 2 | 3


2

Для тех из вас, у кого все еще есть проблемы, убедитесь, что при добавлении фильтра в представление в настройках для указанного поля есть идентификатор фильтра. Это должен быть аргумент, передаваемый в строку запроса в двух форматах, перечисленных в документации по представлениям служб.


Я боролся с этим, совсем не интуитивно, так как представлял название для использования в качестве ключа фильтра. Спасибо!
Donnadulcinea

1

Мне удалось получить контекстный фильтр с помощью Drupal Services: 1) включив модуль «Запрос контекстного фильтра Views» ( https://drupal.org/project/views_contextual_filter_query ) 2) пропустив контекстный фильтр через URL-адрес в виде строки запроса.

В контекстном фильтре вам нужно будет выбрать «КОГДА ЗНАЧЕНИЕ ФИЛЬТРА НЕ ДОСТУПНО» -> «Параметр запроса из URL. После этого вы сможете добавить имя параметра, которое вы будете использовать в URL. Это также позволяет использовать + и | символы для выбора нескольких критериев фильтра.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.