Название таксономического термина как контекстный фильтр для просмотра

18

В D7 я смог отфильтровать представление по названию термина таксономии, взятому из URL. Примером может быть этот URL

http://www.gbyte.co/tags/drupal-planet/rss.xml

"drupal-planet" будет преобразован в идентификатор термина таксономии, который затем соответствующим образом отфильтрует результаты просмотра.

Теперь я настроил соответствующее представление D8 с контекстным фильтром «Content: Tags (field_tags)», field_tags является полем таксономии. Однако представление D8 будет показывать результаты только тогда, когда я передам фактический идентификатор термина в URL-адрес следующим образом:

http://www.gbyte.co/tags/9/rss.xml

Я хотел бы, чтобы он также работал с названием термина, как D7. Отсутствует ли функциональность или мне нужно настроить представление по-другому?

gbyte.co
источник
Есть новости по этому поводу? У меня такая же проблема
Джероен

Ответы:

20

Название термина, преобразованное в фильтр идентификатора термина, похоже, отсутствует в представлениях D8.

Один из обходных путей для конструктора сайтов заключается в добавлении терминов « Связь» и « Таксономия» на узле, а затем добавлении фильтра « Таксономия: имя» в контекстные фильтры с использованием вышеупомянутых отношений. Проверка указать критерии проверки флажка, установите Validator в систематику термин имя и проверить соответствующую таксономию для фильтрации.

Шон Конн
источник
12
Подводный камень в конструкторе D8 добавляет пользовательский интерфейс контекстного фильтра: заголовок контекстного фильтра - «Имя», а категория - «Таксономический термин». При поиске по таксономии этот фильтр не будет отображен, так как ищется только заголовок и описание, а не категория.
Китм
1
Кроме того , вы можете переписать заголовок с {{ arguments.name }}в настройках контекстного фильтра.
cptstarling
3

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

Вот код для ловушки представлений:

/**
 * Implements hook_views_pre_view().
 */
function my_module_views_pre_view(\Drupal\views\ViewExecutable $view, $display_id, array &$args) {
  if ($view->id() == 'blog' && $display_id == 'feed') {
    if (isset($args[0])) {
      $term = taxonomy_term_load_multiple_by_name($args[0], 'tags');
      if (empty($term)) {
        $term = taxonomy_term_load_multiple_by_name(str_replace("-", " ", $args[0]), 'tags');
      }
      if (!empty($term)) {
        $tid = key($term);
        $args[0] = $tid;
      }
    }
  }
}
gbyte.co
источник
2

Чтобы расширить ответ Шона Конна:

  • В представлении конфигурации в разделе «Дополнительно» -> «Отношения» нажмите «Добавить».
  • Теперь выберите «Термины таксономии на узле»
  • На следующем экране выберите словарь «теги» и потребуйте отношения.
  • Теперь в разделе «Дополнительно» -> «Контекстные фильтры» нажмите «Добавить».
  • В разделе «Когда фильтр недоступен», выберите «Предоставить значение по умолчанию», «Исходное значение из URL». Выберите любые другие варианты, соответствующие вашим потребностям.
  • В разделе «Когда фильтр доступен или задано значение по умолчанию» выберите «Указать критерии проверки» и выберите «Имя таксономического термина» для валидатора. Выберите словарь тегов и нажмите «Применить».

Надеюсь, это поможет!

axlroach
источник
1

Я не знаю, если у вас все еще есть эта проблема, но я смог создать отношение для «Термины таксономии на узле», используя нужный словарь таксономии, а затем создать контекстный фильтр, используя это отношение для «Термин таксономии: Имя», который позволяет вам для проверки на основе имени, а не TID.

Тодд Блум
источник
2
У меня та же проблема, описанная в этом вопросе, можете ли вы быть более ясным. Я уже установил связь, но контекстный фильтр работает только с тидом вместо названия термина. Конечно, мы говорим о D8. Заранее спасибо.
Вагнер
1

@kiethm предоставил правильный подход к этому - в контекстных фильтрах вам нужно выбрать «Имя», а не «Идентификатор термина таксономии», а затем установить критерии проверки для использования «Название термина таксономии» .

flamesquirrel
источник
1

Эй, я долго искал этот ответ. Для любого, как я, ищущего, как заставить это работать, я проделал свой путь к моему успеху частично отсюда и результатам drupal.org, а затем также из следующего: http://redcrackle.com/blog/adding-contextual-filter -view-Друпал-8

Я использую Drupal 8 и Zircon. Я новичок, поэтому я могу использовать неправильные термины. Я хотел сделать ссылки на контекстные изображения в "Panel first col 1" на основе категории страницы, на которой кто-то находится. Что я сделал, так это зашел в «Структура»> «Представления»> «Карусель» (представление с изображениями в этой области блока)> «Дополнительно»> «Добавить по контекстным фильтрам»> «Имеет идентификатор термина таксономии»> выберите «Предоставить значение по умолчанию: идентификатор термина таксономии из URL» (что не имеет смысла для меня, но все равно)> тогда я установил все три поля: Загрузить фильтр по умолчанию со страницы терминов, Загрузить фильтр по умолчанию со страницы узла, это хорошо для связанных блоков таксономии, Ограничить термины по словарю. Затем для словарей я проверил категории.

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

seizethecarp
источник
1

Я написал крошечный модуль, чтобы восстановить недостающую функциональность и снова заставить ее работать правильно:

https://www.drupal.org/project/views_taxonomy_term_name_into_id

Он повторно добавляет валидатор аргумента «Преобразовать имя термина в идентификатор» для терминов таксономии, используемых в «контекстных фильтрах» в представлениях. Смотрите страницу проекта для получения дополнительной информации и инструкций.

Наслаждайтесь, -Derek (dww)

Дерек
источник
0

Вы можете сделать это, добавив контент: имеет идентификатор термина таксономии в контекстном фильтре, затем вы можете использовать таксономию в контекстуальном, отрегулировав критерии фильтра

введите описание изображения здесь

Adi
источник
Вы сделали снимок экрана с установкой D7. В D8 нет валидатора «Термин таксономии». Вместо этого есть «Идентификатор термина таксономии» или «Имя термина таксономии», которые не принимают название таксономии из URL. Они только принимают удостоверение личности.
gbyte.co
0

Я добился этого в Drupal-8, взяв контекстный фильтр: «Термин таксономии: Имя»

Затем укажите значение по умолчанию. Тип Таксономический термин ID из URL

Затем укажите следующие критерии проверки:

введите описание изображения здесь

Рими Б
источник