Рейтинг:2

Pathauto alias full path for hierarchical taxonomy terms

флаг nr

My client has content tagged by a hierarchical taxonomy of arbitrary depth.

Currently the maximum depth is three, but that could change:

ParentTerm
└── ChildTerm
    └── GrandchildTerm

Each Term has a unique TID (of course), but many Terms (especially descendants) share identical strings for Name.

However, the full Taxonomy tree path to each term is guaranteed to be unique (two adjacent Terms will never be identically named.)

All nodes tagged with GrandchildTerm of TID = 42 appear in a View at /taxonomy/term/42.

I would like to use Pathauto to generate aliases for each Term at the full taxonomy tree path, like so:

/ParentTerm/ChildTerm/GrandchildTerm

I was looking for Tokens to accomplish this.

I found instead that the paths are set by a View which generates the list of Nodes tagged with the Term ID.

The View has a contextual filter which accepts {{ arguments.tid }}.

Under Page Settings, the value for Path is /taxonomy/term/%.

Someone on this forum said setting up two contextual filters would help, but that does not apply here.

I do not want /taxonomyname/taxonomyterm as the path; I want /ParentTerm/ChildTerm/GrandchildTerm as the path (or, if necessary, /tags/ParentTerm/ChildTerm/GrandchildTerm).

It is possible to set a contextual filter Content: Has taxonomy term ID (with depth) but I haven't been able to get the path I seek this way.

Also, I would like a ParentTerm taxonomy page to return results for its descendants, but the current View only displays items for the specific TID. (The Views Tree module would help here, but it does not work with Drupal 9 yet.)

If this were not a requirement, I might try flattening the taxonomy and using term names like ParentTerm-ChildTerm-GrandchildTerm to differentiate identically named descendant terms. (This would solve another problem the client has: the ambiguity of selecting the correct term from the "Tags" vocabulary when tagging content.)

Рейтинг:2
флаг in

Я думаю, вы действительно будете бороться, чтобы заставить это работать, используя представление страницы термина таксономии по умолчанию. Однако вы можете отключить представление, а затем использовать отображение полного содержимого объекта по умолчанию для терминов и делать с ним все, что хотите (точно так же, как страница узла).

  1. Отключите отображение термина таксономии, которое управляет /таксономия/термин/%tid. Это позволит каноническому маршруту объекта термина контролировать себя.
  2. Создайте псевдоним pathauto для ваших терминов с желаемым шаблоном. Я думаю, вы, вероятно, можете использовать существующие токены для родительской части пути, что-то вроде [термин:родитель:url:путь]/[термин:имя]. (Или просто создайте собственный токен, если существующий токен не работает.)
  3. Клонируйте отображение, отключенное на шаге 1 (как блок или встраивание — в зависимости от того, как вы хотите его разместить) и поместите его на страницы терминов таксономии (через макет блока, контекст, предварительную обработку, ветку или что-то еще). Я не думаю, что это будет проблемой, но если у вас возникли проблемы с получением правильного набора tid для контекстного фильтра с использованием параметров представления по умолчанию, вы можете использовать hook_views_pre_view() чтобы получить прилив из маршрута и программно передать его в представление.
hotwebmatter avatar
флаг nr
Спасибо @sonfd, я попробую и приму ваш ответ, если получится. Как насчет возврата результатов для потомков - должен ли я опубликовать это как отдельный вопрос?
sonfd avatar
флаг in
@hotwebmatter - ой, извините, я пропустил эту часть. Это то, для чего предназначен контекстуальный фильтр _Content: Имеет идентификатор термина таксономии (с глубиной)_, поэтому вы должны иметь возможность его использовать. Я думаю, что если у вас заработают остальные и у вас возникнут проблемы с этой частью, то стоит задать отдельный вопрос.
hotwebmatter avatar
флаг nr
Я никогда не заставлял иерархическую таксономию работать так, как хотел, и в итоге выбрал другой подход, но я принимаю этот ответ, потому что он был полезен.

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

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