Изучаю pathauto. Иерархические пути страниц. Несколько вопрсов.

Главные вкладки

Аватар пользователя Cypher Cypher 16 августа 2011 в 18:18

Давно задаюсь некоторыми вопросами по поводу pathauto. Не то, чтобы это критичные проблемы, но разобраться было бы интересно. Хочу поднять на обсуждение следующие вопросы.
Очень мне нравится иерархическая структура адресов страниц на сайтах. Хочу довести ее до ума и в своих разработках.

Что я научился делать (может кому пригодится):
Хотим, например, каталог продукции деталей:

-каталог
--детали первого производителя
---детали первого класса
---детали второго класса
--детали второго производителя
---детали первого класса
---детали второго класса

К концу каждой ветки такого дерева привязываем ноды деталей. Хотим, что бы листая страницы каталога, пути выглядели так:
http // имя сайта / каталог / детали второго производителя / детали второго класса / название детали

Для этого создаем новый словарь и наполняем его терминами. Благодаря тому, что термины таксономии могут вступать в "предок-потомок отношение", можно полностью повторить иерархию дерева, что чуть выше. Создаем ноду детали, привязываем ее к термину нижнего уровня и задаемся вопросом, что писать в "параметрах адреса" или вообще оставить автоматический синоним?

Я делаю так:

Настройки автоматических синонимов

Запрещаю пользователям создавать синонимы вручную и получаю жедаемую иерархическую структуру. Поясню:
[catpath-raw] нужен для того, чтобы выкладывать иерархическую структуру адреса, когда мы идем по терминам таксономии (по узлам каталога).
[termpath-raw]/[title-raw] нужен для генерации пути при просмотре самой ноды детали (предшествующие термины и название).
Все прекрасно.

Хотелось бы научиться делать 1 (пригодится мне!):
Иногда бывают очень длинные названия нод, или названия содержащии много отдельных букв, которые при автоматическом генерировании смотрятся не очень. Хочется разрешить пользователям вводить синоним, но так, чтобы только последнюю его часть:
... / ... / ... / название детали.
Т.е.: [termpath-raw] - по прежнему автоматически, [title-raw] - руками.
Это возможно?

Хотелось бы научиться делать 2 (пригодится очень сильно!):
На мультиязычном сайте (i18n) делаю портфолио аналогичным образом. Адреса становятся чуть сложнее:
http // имя сайта / en или ru / каталог / детали второго производителя / детали второго класса / название детали

Термины таксономии и ноды имеют по клону на другом языке. Т.е. нода с айдишником 17 на английском, 18 на русском, например. Аналогично с терминами.
Если делать все так как в Что я научился делать, то синонимы, генерируются в зависимости от языка. Получаются неприятности типа:

http // sitename / en / catalog / second developer components / class 2 / component name
http // sitename / ru / каталог / детали второго производителя / детали второго класса / название детали

Хотелось бы привести все к единообразному виду, чтобы различались только префиксы языка:
http // sitename / en / catalog / second developer components / class 2 / component name
http // sitename / ru / catalog / second developer components / class 2 / component name

Т.е. найти что-то типа галочки: генерировать синонимы из английской версии. Но галочки я не нашел, по этому пишу сюда :).
Первую часть проблемы (с таксономией), кстати, можно решить вбив синонимы руками для терминов таксономии (ибо их конечное число, узлов дерева). Обязательно при этом указывая язык. Но при переходе на ноду весь путь меняется на язык просмотра.

Буду рад выслушать любые идеи, намеки, покликать ссылки Smile

Комментарии

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 17 августа 2011 в 1:18

По первому вопросу: После сохранения ноды вы можете отредактировать её синоним, открыв её на редактирование и сняв галочку "автоматические синонимы". По второму вопросу, к сожалению, ничего подсказать не могу Sad

Аватар пользователя kalabro kalabro 17 августа 2011 в 9:19

<a href="mailto:ingumsky@drupal.org">ingumsky@drupal.org</a> wrote:
По первому вопросу: После сохранения ноды вы можете отредактировать её синоним, открыв её на редактирование и сняв галочку "автоматические синонимы".

Ну там всё равно редактируются все части вашего синонима, а не последний

Аватар пользователя Cypher Cypher 17 августа 2011 в 11:25

Про галочку понимаю. Суть проблемы на неком пользовательском уровне. Идеальный вариант, которого хочется достич таков: просто указали "nfp2010", например, и получили адрес:
http//sitename/catalog/second_developer_components/class_2/nfp2010.

Разумеется, каждый раз писать руками "catalog/second_developer_components/class_2/", вспоминать об этом даже "рубящему тематику сайта" администратору не удобно. Как и неудобно делать дополнительное редактирование.

Но поскольку очевидного решения не просвечивается, то видимо все так и останется :(.

Интересно: программирование подмодулей для pathauto сложная задача? Нужно ли хорошо знать код самого модуля pathauto?

Аватар пользователя kalabro kalabro 17 августа 2011 в 12:10

ну вообще на уровне тупо интерфейса можно это реализовать, подправив форму ноды в каком-нибудь mymodule_node_preprender($form) или даже вообще на js Smile

Аватар пользователя Cypher Cypher 17 августа 2011 в 17:49

kalabro wrote:
ну вообще на уровне тупо интерфейса можно это реализовать, подправив форму ноды в каком-нибудь mymodule_node_preprender($form) или даже вообще на js :)

Идея ясна! Если есть какой-нибудь материал на уме, отправьте почитать Smile
Пойду гуглить пока...

Аватар пользователя Cypher Cypher 26 августа 2011 в 16:20

kalabro wrote:
На модуль Handy alias не смотрели? Может пригодиться и в первом, и во втором вопросе

Отличный модуль, кстати! Но с мультиязычным сайтом не дружит Sad
Сохраняет синоним с языком "все", что не позволяет использовать его с двумя нодами (вторая нужен для перевода). Не получается создать такие страницы, например:
mysite/en/about
mysite/ru/about

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 19 августа 2011 в 0:36

"Cypher" wrote:
Про галочку понимаю. Суть проблемы на неком пользовательском уровне. Идеальный вариант, которого хочется достич таков: просто указали "nfp2010", например, и получили адрес:
http//sitename/catalog/second_developer_components/class_2/nfp2010.

Сделайте cck-поле my_alias и в pathauto подставляйте в качестве последней части адреса токен со значением из этого поля. Так не пойдёт?

Аватар пользователя Cypher Cypher 23 августа 2011 в 17:32

<a href="mailto:ingumsky@drupal.org">ingumsky@drupal.org</a> wrote:
"Cypher" wrote:
Про галочку понимаю. Суть проблемы на неком пользовательском уровне. Идеальный вариант, которого хочется достич таков: просто указали "nfp2010", например, и получили адрес:
http//sitename/catalog/second_developer_components/class_2/nfp2010.

Сделайте cck-поле my_alias и в pathauto подставляйте в качестве последней части адреса токен со значением из этого поля. Так не пойдёт?

Можно, конечно, но по логике оно ничем не отличается от "родного" поля ввода аллиасов. Термины таксономии так же придется писать.

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 24 августа 2011 в 15:52

"Cypher" wrote:
Можно, конечно, но по логике оно ничем не отличается от "родного" поля ввода аллиасов. Термины таксономии так же придется писать.

Почему не отличается? Отличается. Родное поле для ввода алиаса принимает только весь алиас целиком, а я предлагаю скармилвать вашему полю только последнюю часть.

К примеру, у вас есть нода типа story с машинным адресом example.net/node/1. Вы хотите сделать для неё алиас и в родном поле прописываете content/drupal-sucks-less.html и получаете на выходе example.net/content/drupal-sucks-less.html Если пользователь ничего не ввёл в этом поле, у вас остаётся example.net/node/1.

А теперь представим, что вы делаете поле cck и настраиваете pathauto. Поле ckk у вас называется field_my_alias. Вы настраиваете pathauto так, чтобы для контента формировался следующий алиас [type]/[nid]/[field-my-alias]. Для своей ноды вы прописываете в поле field_my_alias что-нибудь вроде drupal-sucks-less.html и на выходе получаете: example.net/story/1/drupal-sucks-less.html. В том случае, если пользователь не указал ничего в поле для вашего алиаса, у вас всё равно остаётся рабочий и вполне красивый алиас вроде example.net/story/2 Естественно, это только самый простой пример.

Аватар пользователя Cypher Cypher 26 августа 2011 в 15:27

<a href="mailto:ingumsky@drupal.org">ingumsky@drupal.org</a> wrote:
"Cypher" wrote:
Можно, конечно, но по логике оно ничем не отличается от "родного" поля ввода аллиасов. Термины таксономии так же придется писать.

Почему не отличается? Отличается. Родное поле для ввода алиаса принимает только весь алиас целиком, а я предлагаю скармилвать вашему полю только последнюю часть.

К примеру, у вас есть нода типа story с машинным адресом example.net/node/1. Вы хотите сделать для неё алиас и в родном поле прописываете content/drupal-sucks-less.html и получаете на выходе example.net/content/drupal-sucks-less.html Если пользователь ничего не ввёл в этом поле, у вас остаётся example.net/node/1.

А теперь представим, что вы делаете поле cck и настраиваете pathauto. Поле ckk у вас называется field_my_alias. Вы настраиваете pathauto так, чтобы для контента формировался следующий алиас [type]/[nid]/[field-my-alias]. Для своей ноды вы прописываете в поле field_my_alias что-нибудь вроде drupal-sucks-less.html и на выходе получаете: example.net/story/1/drupal-sucks-less.html. В том случае, если пользователь не указал ничего в поле для вашего алиаса, у вас всё равно остаётся рабочий и вполне красивый алиас вроде example.net/story/2 Естественно, это только самый простой пример.


Понял, спасибо Smile
Тугодумлю что-то! )
Согласен, это более удобный вариант! Плюс при такой реализации можно скрыть от пользователя ввод синонима. Если не получится как-то синхронизировать синонимы на основе английской версии, то оставлю такой вариант.

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 27 августа 2011 в 0:00

"Cypher" wrote:
Понял, спасибо Smile
Тугодумлю что-то! )
Согласен, это более удобный вариант! Плюс при такой реализации можно скрыть от пользователя ввод синонима. Если не получится как-то синхронизировать синонимы на основе английской версии, то оставлю такой вариант.

На здоровье! Удачи!