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

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

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

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

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

Нужно с помощью 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:parent:parent:name]/[term:parent:name]/[term:name]

Pathauto удалит пустоты из синонимов, которые имеют меньшую вложенность, и на выходе получатся красивые человекопонятные иерархические адреса :)

Добавлено 13/05/2012:

В Pathauto 1.1 появился новый токен для таких случаев — [term:parents:join-path]. Соответственно в качестве шаблона можно использовать:

catalog/[term:parents:join-path]/[term:name]
Написанное актуально для Token 7.x-1.x
Похожие записи

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

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

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

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

не нашёл

Есть замечательный модуль http://drupal.org/project/nodehierarchy

он для нод

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

Или можно
[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 появятся соответствующие токены, но пока видимо только так

хм... похоже я лохонулся... такой способ обычно использую:
[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] что-то не срабатывает...

удалите все синонимы admin/config/search/path/delete_bulk
создайте заново admin/config/search/path/update_bulk
должно работать

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

Есть словарь с адресами и словарь с номерами домов
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]

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

Нашел здесь как всегда ответ на свой вопрос: как прописать всех родителей пункта меню - у меня меню обязательный пункт
[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-ке одного токена для всех родителей...)))

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

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

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

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

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

Подскажите пожалуйста, как сделать альтернативный синоним у термина?
Скажем у нас есть 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. и используйте его вместо имени термина

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

[term:имя-поля]

Все решилось простыми шаблонами
Для Таксономии:
[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]

Спасибо!

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

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

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

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

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

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

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

В настройках 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]

включите модуль entity tokens

Включен

значит что-то не то делаете http://s2.hostingkartinok.com/uploads/images/2012/08/a9d2754938ceb314e95...

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

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

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

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

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

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

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

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

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

какая задача?

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

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

Гость, Пнд 25/04/2016 - 20:52:

https://www.youtube.com/watch?v=3oAYDPSb3D4

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

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

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

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