Использование модуля token для pathauto

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

Аватар пользователя neptunix neptunix 11 октября 2007 в 18:13

Вопрос на счет token и pathauto...

Создаю иерархическую структуру подшивок. К примеру
Лекции -> Предмет -> Лекция 1

Хочу чтобы для них автоматически создавался вложенный url - исходя из названия. Для данного случая lekcii/predmet/lekcija-1

Для этого настраиваю автоалиас (pathauto) для типа book (подшивки) в виде book/[bookpath]/[title]
Что получается:
book/lekcii-predmet/lekcija-1
Замена / на - меня не устраивает. Исправляю файл pathauto.inc (строка 102):
Было: $pattern = '/[^a-zA-Z0–9]+/';
Стало: $pattern = '/[^a-zA-Z0–9\/]+/';
Т.е. добавляю символ '/' как "чистый" и он больше не заменяется на '-'. Теперь имеем адрес book/lekcii/predmet/lekcija-1
Ок, но есть одно но!

Модуль token генерит строку для [bookpath] - преобразуя каждый раз все заголовки в url. Но если я изменяю вручную для одного из пунктов alias, например 'predmet' на 'pr' (для сокращения), вложенные разделы будут по прежнему создаваться опираясь на title для страницы Предмет.

Что я имею ввиду. Я меняю alias predmet на pr (lekcii/pr/lekcija-1). Но создание новой страницы - создает url /lekcii/predmet/lekcija-2, а я хочу по аналогии /lekcii/pr/lekcija-2

Приведу код из файла token_node.inc
<?php
// Handle book nodes.
function book_token_values($type, $object = NULL) {
if ($type == 'node') {
$node = $object;

$tokens = array();
if ($node->parent) {
$path = book_location($node);
$tokens['book'] = check_plain($path[0]->title);
$tokens['book_id'] = $node->parent;

$bookhierarchy = book_location($node);
$bookpath = '';
foreach ($bookhierarchy as $bookelement) {
if ($bookpath == '') {
$bookpath = check_plain($bookelement->title);
}
else {
$bookpath = $bookpath . '/' . check_plain($bookelement->title);
}
}
$tokens['bookpath'] = $bookpath;
}
else {
$tokens['book'] = '';
$tokens['book_id'] = '';
$tokens['bookpath'] = '';
}
return $tokens;
}
}

?>

Тут видно - что путь создается на основе title:
$bookpath = $bookpath . '/' . check_plain($bookelement->title);

Можно ли как-то это изменить чтобы использовался не заголовок, а текущий url?

Не силен в php, но предполагаю что в объекте $bookelement хранятся и другие указатели. Не знаю только как посмотреть.
Прошу помощи. Заранее спасибо Smile

Комментарии

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

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

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

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