Drupal → Иерархические синонимы терминов таксономии с помощью Pathauto

26.05.2011

Имеем словарь:

Список терминов таксономии

Нужно с помощью Pathauto создать для каждого термина синоним с учётом вложенности, т.е:

catalog/kuhnya
catalog/kuhnya/holodnie-zakuski
catalog/kuhnya/salati
catalog/kuhnya/salati/ovochnie
catalog/kuhnya/salati/myasnie
catalog/napitki
catalog/napitki/alkogolnie
catalog/napitki/bezalkogolnie

Чтобы это реализовать, достаточно прописать термину шаблон:

catalog/[term:parents:join-path]/[term:name]

Pathauto удалит пустоты из синонимов, которые не имеют родителей, и на выходе получатся красивые человекопонятные иерархические адреса.

Способ подходит как для Drupal 7 так и для Drupal 8.

Написанное актуально для
Drupal 7, Drupal 8
Похожие записи

Комментарии

Гость
26.05.2011, 09:41

а что старого доброго catpath-raw уже нету?

Есть замечательный модуль http://drupal.org/project/nodehierarchy. Позволяет удобно создавать разнообразные иерархии и при помощи токена [fullhierarchytitlepath-raw] указывать полный иерархический путь.

Виктор
26.05.2011, 14:58

Эй, xandeadx чё творим? Этож геморойынй способ! А если родительских терминов с десяток?
В семерке возможностей токена больше, но алгоритм другой, так правильней будет:
menu/[term:parent:url:alias]/[term:name]

Виктор
26.05.2011, 15:03

Или можно
[term:parent:url:path] использовать, чтоб наверняка, но никак не [term:...:parent:name]

так правильней будет:
menu/[term:parent:url:alias]/[term:name]

не работает! получается каша:

menu/menu/taxonomy/term/8/salaty/ovoshchnye
Или можно
[term:parent:url:path]

тоже не работает

Этож геморойынй способ!

другого рабочего не нашёл, может в новых версиях Token появятся соответствующие токены, но пока видимо только так

Виктор
26.05.2011, 21:42

хм... похоже я лохонулся... такой способ обычно использую:
[term:parent:url:alias]/[term:name]

Но когда надо впереди еще адрес подставить, будь то menu, или имя словаря он не работает, действительно каша получается...

Установлено:
Pathauto 7.x-1.0-rc2
Token 7.x-1.0-beta3

Но [term:parent:parent:name]/[term:parent:name]/[term:name] что-то не срабатывает...

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

Есть словарь с адресами и словарь с номерами домов
1 словарь: Город > Улица
2 словарь: 1, 1А, 2, 3, 4, 4А, 4Б...

для первого словаря создаю алиасы так: adresa/[term:parent:name]/[term:name]
для второго хотелось бы так: adresa/[term:parent:name-СЛОВАРЬ1]/[term:name-СЛОВАРЬ1]/[term:name]

до этого второй словарь у меня был как поле, но хочется сделать вывод информации не только по улицам, но и по домам

Игорь
21.10.2011, 11:46

Нашел здесь как всегда ответ на свой вопрос: как прописать всех родителей пункта меню - у меня меню обязательный пункт
[node:menu-link:parent:parent:parent:title]/[node:menu-link:parent:parent:title]/[node:menu-link:parent:title]/[node:title].html
3-х родителей максимум достаточно, а то слишком длинный урл получится...))
а фиршка в :parent:parent:parent:
а когда нет родителей, то он их и не пишет и лишние слеши тоже удаляет
хотя конечно странно что нет в 7-ке одного токена для всех родителей...)))

Анатолий
06.02.2012, 11:59

А какой шаблон нужен для того, чтобы адрес выглядел так:
site.ru/пукт меню/пункт подменю/имя ноды

Анатолий
06.02.2012, 12:06

Существенное уточнение - у меню и главное и дочернее меню - на основе таксономии...

Гость
06.03.2012, 03:00

Ну с таксономией вроде бы стало понятно что и как, и главное, что работает...
А вот с путями для материалов, те что для меню, где шаблоны через
[node:field-categories-top:parent:name]/[node:field-categories-top:name]/[node:title]
так ничего и не выходит, и если нужно вывести http://.../name1/name2/name3, то второй элемент name2 упорно не хочет появляться...
Уже крутил и так и сяк - не выходит никак!
Не подкините реально рабочую заготовку?

Гость
06.03.2012, 03:08

Упс... походу ступил удалить синонимы :) так что все работает :)

Частый Гость
07.03.2012, 05:11

А с нодами что-то так не выходит по шаблону, ну разве что они не в меню автоматом скачут. Максимально что получилось это [node:content-type]/[node:title] (если название материала ноды и термина таксономии совпадает, то еще туда-сюда), а можно так: [node:field_category]/[node:title], но все родительские термины идут через разделитель "-"(тире), а не через "/"(слэш).
Может есть идеи как без включения в меню самих нод достичь аналогичной с таксономией иерархии?

grafdegan
23.04.2012, 22:17

Подскажите пожалуйста, как сделать альтернативный синоним у термина?
Скажем у нас есть url адрес как у вас на примере: catalog/kuhnya/holodnie-zakuski

Кухня - это главный термин. Pathauto + Transliteration на выходе получается синоним = kuhnya

Я же хочу не меня имя термина "Кухня " получить синоним к примеру = stolovaya
Далее на выходе все терминов должно получится:
catalog/stolovaya
catalog/stolovaya/holodnie-zakuski
catalog/stolovaya/salati
catalog/stolovaya/salati/ovochnie
catalog/stolovaya/salati/myasnie

И что бы он работал даже после "массового обновления" всех синонимов :)

добавьте для терминов новое поле, например translit name. и используйте его вместо имени термина

grafdegan
23.04.2012, 22:38

подскажите какой токен нужно использовать чтобы создать такую же правильную иерархию?

grafdegan
24.04.2012, 09:24

Все решилось простыми шаблонами
Для Таксономии:
[term:parent:parent:field-term-url]/[term:parent:field-term-url]/[term:field-term-url]

Для Материала:
[node:field-category:parent:parent:field-term-url]/[node:field-category:parent:field-term-url]/[node:field-category:field-term-url]/[node:nid]-[node:title]

Спасибо!

статья дополнена информацией о новом токене

grafdegan
06.07.2012, 09:59

xandeadx
Подскажите пожалуйста токен для путей нод
в данный момент для таксономии:
[catpath-raw] - создается полная иерархия

для нод пробовал:
[termalias-raw] - работает, НО
[termpath-raw] - работает, НО
при использоватении двух таксономий в ноде, т.е. "Категории" и "Теги"
http://plasmon.rghost.ru/39063831/image.png
урлы создаются из таксономии "Тегов", мне же нужно чтобы создавались из таксономии "Категорий"

в 7 друпале это все решается путем подстановки имени категории, к примеру [node:field-category]

а как быть в 6 ом друпале?

Алексей
12.08.2012, 12:21

Замечательный модуль. Со страницами таксономии все замечательно, [term:parents:join-path] работает отлично. Но что делать если у меня материал, у него есть поле term reference, в котором можно выбрать неограниченное количество терминов. И стоит модуль term reference tree, который настроен так, что если я выберу дочерний термин, то все его родители также автоматически добавляются. Если выставить в настройках только возможность выбора только одного термина то в patchauto в шаблонах есть [node:field-category:parents:join-path], а если же выбрать возможность добавления неограниченного количества терминов к материалу то в шаблонах этот токен исчезает. Подскажите есть ли решение в данной ситуации? Необходимо вывести через слеш в урл все добавленные к материалу термины таксономии соблюдая иерархию словаря.

пользуйтесь способом, описанным в статье

Алексей
12.08.2012, 18:10

В настройках patchauto для контента токен [term:*любой текст*] не принимается.

Выше предлагали для контента сделать так:

[node:field-category:parent:parent:field-term-url]/[node:field-category:parent:field-term-url]/[node:field-category:field-term-url]/[node:nid]-[node:title]
Но таких токенов нету если в настройках типа материала выбрана опция, позволяющая добавлять неограниченное количество терминов таксономии. Появляются другие группы токенов, в виде [node:field-category:1] [node:field-category:2] [node:field-category:3]

Алексей
12.08.2012, 20:05

Вот с этими токенами и не получается сделать путь из неограниченного количества выбранных терминов, максимум 3. Если выставить в настройках максимум 1 термин, то токенов больше, и есть необходимые.

максимум не ограничен, все необходимые токены доступны

Алексей
12.08.2012, 21:18

*/[node:field-category:3:parent:parent]/[node:field-category:3:parent]/[node:field-category:3:name]
Вот так пробовал, и по нарастающей вместо звездочки на 5 родителей. Отображает только 4 самых верхних термина.
Подскажите пожалуйста, что я делаю не так?

не знаю, у меня всё нормально отображается

Виталий
12.03.2014, 01:30

Может чуть не по теме, но спрошу. имею такую проблему:
есть каталог
внутри разделы "чай", "специи", "аксессуары", внутри подразделы, в чае это "зеленый", "черный" итд. в них вьюшками блоки товара, переходим на сам товар и тут хочется видеть хлебную крошку "главная/чай/зеленый/название товара (без ссылки название)". использую таксономи крошку, вставил строку вывода в ноду товара, в самом модуле выбрал чтобы отображалась в продуктах, осталось лишь прописать в таксономии Breadcrumb path (taxonomy_breadcrumb). что туда прописать, не пойму. и да, это 6 друпал

Владимир
25.06.2014, 14:40

хм... похоже я лохонулся... такой способ обычно использую:
[term:parent:url:alias]/[term:name]

Но когда надо впереди еще адрес подставить, будь то menu, или имя словаря он не работает, действительно каша получается...

Это где ж такой токен то взять [term:parent:url:alias] ?

Владимир
29.10.2014, 14:43

Как я понимаю, создать алиас - полдела. А как вызвать его во views, если в контекстном фильтре нет такого токена в списке?
Вопрос нубский, но все же - как вызвать не tid или nid, и не name или title, а транслитерированный вариант с дефисами вместо пробелов? Можно ли это сделать средствами только Друпала, или необходимо писать php-код для этого?

Владимир
05.11.2014, 13:42

Создать views с контекстным фильтром, вызывающий показ одной страницы (в случае views для одной страницы), и по синониму термина таксономии для случая показа списка материалов, задавая в контекстном фильтре в качестве параметра последнюю часть синонима заголовка ноды и синонима термина.
То есть для статей задаем article/kak-vyvesti-nodu - при этом в контекстный фильтр подаем "kak-vyvesti-nodu" (title: Как вывести ноду), и получаем показ статьи через views. (При этом путь - article/%)
Для термина:
article2/imya-termina (term:name Имя термина), и получаем заданный вывод списка материалов для такого синонима. (путь - article2/%).
Или можно как-то по-другому задать такой вывод?

Гость
25.04.2016, 19:52

А если у меня вложенная таксономия, и я хочу, чтобы в адресе был корневой родитель, если таковой имеется, либо непосредственно термин ноды, если родителя нет? Что-то я пока не нашел реализации...

Евгений
17.09.2016, 16:46

О это то что мне было очень нужно!!! Спасибо Спасибо Спасибо!!!

Добавить комментарий