Формирование URL по доп. полям названию ноды в pathauto ('customtext1/customtext2' вместо 'node_titles_path/node_title')

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

Аватар пользователя Murz Murz 21 ноября 2007 в 16:11

Проблема в следующем:
Есть сайт с кучей нод в виде дерева (book). Т.е. главная статья, описывающая например бублики. Внутри неё по иерархии - статьи, описывающие разновидности бубликов, внутри них - типы бубликов.
И каждая нода имеет довольно длинные названия, например такие:
---------------------------------------------------------
Лучшие бублики от компании "Бубликоид"
- Бублики из пшеницы с добавлением опилок
- - Бублики с осиновыми опилками
- - Бублики с филе из жуков-короедов
- Бублики из пластмассы с неоновой подсветкой
- - Неоновый бублик с логотипом вашей компании
- - Бублик с ручкой для подзарядки
---------------------------------------------------------

И мне хотелось бы построить ссылочную структуру натипа такой:
/bublics/
/bublics/wheat/
/bublics/wheat/filings/
/bublics/wheat/fillet/
/bublics/plastic/
/bublics/plastic/neon/
/bublics/plastic/recharge/

Пока что получается добиться урлов типа таких:
/luchie-bubliki-ot-kompanii-bublikoid/bubliki-iz-pshenitsi-s-dobavleniem-opilok

Т.е. получается что урлы генерить нужно не из названий, а из каких-то альтернативных данных, заданных для каждой ноды вручную. Но где их задать и как настроить на это pathauto - никак что-то не додумаю. Кто уже сталкивался и придумал - подскажите плиз!

Комментарии

Аватар пользователя Murz Murz 22 ноября 2007 в 20:24

Так как никаких советов умных не нашлось и не поступило, то я решил разбираться сам.
И после двух суток разбирательств и с помощью какой-то там матери у меня всё же получилось кое-что рабочее, поэтому хочу быстрее поделиться с народом. Вся суть в модуле Token, он как оказалось - очень полезный!
Вышел из ситуации так:
1. Установил модули CCK, pathauto, token, book.
2. Добавил к ноде типа book новое поле CCK Text field (например path_alias).
3. (самое сложное) Написал модуль для модуля Token, который при генерации пути берет не имя ноде (node title), а любое поле из CCK!
4. Добавил правило в Pathauto чтобы он путь генерил по новому правилу ([book-field_path_alias-path]/[field_path_alias-raw])
5. Создаю ноду типа book, указываю русское название ноды "Моя первая книга" и заполняю поле path_alias (например "book1"). Путь к этой ноде генериться красивый, "/book1".
6. Создаю вложенную ноду книги, называю "Самый первый раздел", path_alias - "part1". Урл получается тоже красивый "/book1/path1".
...Ну и так далее. Получаем красивую древовидную систему ссылок по книжке без транслита длинных названий.

Получившийся модуль можно скачать по адресу http://shtrix.ru/files/drupal/modules/tokencckpaths-5.x-0.1.tar.gz (1.1 KB).
Приглашаю всех заинтересованных лиц к его тестированию и обсуждению!

Модуль пока сырой, т.к. писался второпях и впопыхах, так что использовать прошу осторожно, о глюках сообщать - буду по-возможности править. При установке и удалении испортить ничего не должен, т.к. в базу и конфиги ничего не пишет, просто добавляет 2 хука к модулю token.
Мне не очень нравиться что alias приходится хранить в поле CCK - установка модуля CCK сильно нагружает Drupal лишними запросами, но без него пока не придумал как можно привязать доп. текстовое поле к ноде. Если есть у кого идеи по этому поводу - сообщайте.

Аватар пользователя Murz Murz 1 декабря 2007 в 21:08

"Ввиду производственной необходимости" пришлось переделать модуль для работы в Drupal 6 beta 3, т.к. метод хранения книг в нем глобально изменился. Также в процессе переделки значительно упростил код и выкинул много лишнего.
Если кому нужно - новую версию забирать тут:
http://shtrix.ru/files/drupal/modules/tokencckpaths-6.x-0.2.tar.gz

Аватар пользователя Murz Murz 29 января 2008 в 12:17

Поле для пути обязано называться path_alias, т.к это захардкодено в модуле.
Да, имя поля указывается прямо в исходнике, интерфейс для изменения делать неохота было, да и проще в исходниках 1 раз поправить чем лишним кодом разбавлять.