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


15

У меня есть словарь, структурированный так:

  • Корень Альфа
    • Срок Альфа 1
    • Срок Альфа 2
      • Подтерм Альфа 1
  • Root Beta
  • Корневая гамма
    • Термин Гамма 1
    • Термин Гамма 2

Как мне отфильтровать представление, чтобы показать только корневые термины из словаря? В настоящее время мое представление отображает корневые термины, а также дочерние элементы (термин * *)

В дальнейшем я хотел бы передать аргумент 'Root Alpha' (или его tid, или что-то еще из контекста), а затем отфильтровать его только для прямых потомков Root Alpha. (Термин альфа *). Фильтрация на глубину дальше, чем это было бы бонусом.

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

  • Истинный корень
    • Корень Альфа
      • Срок Альфа 1
      • Срок Альфа 2
        • Подтерм Альфа 1
    • Root Beta
    • Корневая гамма
      • Термин Гамма 1
      • Термин Гамма 2

Я не уверен, какая структура Vocab является более правильной, написание этого заставило меня понять, что у меня есть кое-что для чтения, кроме выяснения этого с помощью представлений.

Ответы:


13

Для отображения только корневых терминов у меня есть решение, которое наверняка сделает кого-то лицом к лицу (по крайней мере, я это сделал):

  1. Добавьте контекстный фильтр в ваше представление таксономии
  2. Выберите термин Таксономия: родительский термин .

    Настройте его следующим образом: Когда значение фильтра недоступно : укажите значение по умолчанию - фиксированное значение . Установите значение 0 .

Да, это все. Термины без родителя имеют 0 здесь. Смотрите описание родительского поля таблицы taxonomy_term_hierarchy:

Первичный ключ: {taxonomy_term_data} .tid родителя термина. 0 указывает на отсутствие родителя.


Большое спасибо, определенно подтолкнул себя к этому. Так же, как примечание, если кто-то застрянет с этим, вы не можете указать «Термин таксономии» в качестве валидатора при этом, так как нет термина с
тид

2

если у вас есть статическая структура таксономии, вы можете фильтровать, используя filter criterion: Content: Has taxonomy terms (with depth)в этом месте вы можете выбрать только корневые термины для фильтрации:

критерий фильтра: Содержание: Имеет таксономические термины (с глубиной)

Я надеюсь, что информация будет полезной.


Структура таксономии не будет статичной, и это не позволит мне передать аргумент, а затем отфильтровать его по дочерним элементам корневого термина.
Фазы

@ moon.watcher: Как я могу использовать термин таксономии (с глубиной)? Я выбираю только родителей, но дети также появляются.
Сократис

1

Вы также можете сделать это с помощью простого фильтра и нестатической структуры таксономии:

  1. Добавить критерий фильтра: термин таксономии: родительский идентификатор
  2. Выберите оператор «равно» и заполните значение «NULL»

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

Он будет отображать только корневые термины вашей таксономии и будет работать, если вы позже измените структуру таксономии ...


Да, @scandel будет обрабатывать нестатическую структуру таксономии, но он не будет обрабатывать движение вниз по дереву, как изложено в вопросе, принятый ответ делает.
Фазы

0

Вы можете выбрать его с WHERE parent = 0помощью db_query()на своей странице.


Я не уверен, что вы подразумеваете под "на вашей странице", пожалуйста, объясните? Кроме того, я не выполняю запрос сам, представления есть, так что мне не придется изменять запрос?
Phizes
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.