xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Вывод контента у термина и всех его дочерних терминов

Опубликовано в

Есть древовидный словарь таксономии. Нужно на странице catalog/% вывести контент у термина указанного в адресе и всех его дочерних терминов.

Вариант 1

Если заранее известна максимальная глубина дерева, то можно добавить в представление контекстный фильтр по Content: Has taxonomy term ID (with depth) в котором указать максимальную глубину:

При таком варианте на каждый уровень вложенности создаётся отдельный sql join, что возможно не лучший выход (скриншот).

Вариант 2

Если максимальный уровень заранее неизвестен или хочется избавиться от джоинов, то можно добавить контекстный фильтр по полю термина (в моём случае это "Content: Tags (field_tags)"), отметить опцию Allow multiple values и подменить значение фильтра с помощью кода:

$tids = [$argument];
foreach (taxonomy_get_tree(VID_СЛОВАРЯ, $argument) as $terms) {
  $tids[] = $terms->tid;
}
$handler->argument = implode('+', $tids);
return TRUE;

Profit.

Полезное — как получить список всех дочерних терминов любой глубины

Написанное актуально для Views 3
Похожие записи

Комментарии RSS

Подскажите пожалуйста, может конечно и не по теме вопрос - пытаюсь вывести на странице каталога уберкарт поле описание термина, но во вьюс uc_catalog (Содержимое) GRID такого поля нет? Причем если я кликаю по ссылке из словаря таксономии поле отображается именно в том термине, где я заполнила поле - то есть как и надо.

Добавьте relationship с полем термина

Спасибо, все работает

есть словарь таксономии.
1
1.1
1.1.1
пытаюсь сделать так, что бы выводились 1.1 и 1.1.1
при добавлении Контекстного фильтра по 1, выводится 1.1, а 1.1.1 не выводится... как это сделать, подскажите, пожалуйста.

в статье написано как

почему-то он не работает

Здравствуйте, Хandeadx
Помогите пожалуйста. Ваш код, прекрасно работает и все выводит как надо.
Но, он выводит в заголовке и Title страницы все названия терминов через запятую. Как можно ограничить этот вывод, чтобы заголовок содержал только имя первого термина (аргумента)? %1 в контектном фильтре не помогает. Views сделана для отображения товаров из Facet API (Solr Apache).

Буду очень благодарен Вам за помощь.

$tids = [$argument];
foreach (taxonomy_get_tree(VID_СЛОВАРЯ, $argument) as $terms) {
$tids[] = $terms->tid;
}
$handler->argument = implode('+', $tids);
return TRUE;

код не меняет заголовок

Хandeadx, можете подсказать, что необходимо добавить в код, чтобы он влиял на заголовок? А то у меня выводятся названия всех дочерних терминов в заголовке

ищите место, где выводятся названия, меняйте вывод как вам нужно

Почему, указывая глубину, нажимая на родительский термин вменю у меня пустая страница?

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании