Понадобилось сделать жестко заданные окончания для автосинонимов. Конкретно - ".htm".
Сначала попробовал решить настройками. Написал паттернов типа [term-raw]/[title-raw].htm
Вроде все работает, как надо.
Но вот при совпадении стали появляться альясы, заканчивающиеся на ".htm_0", ".htm_1" и т. д., а если альяс получался длиннее лимита, то он тупо обрезался, до лимита символов. Это не устраивало.
Красиво решить не получилось, пришлось править файл pathauto.inc
Вот, что было исправлено и дописано. Ничего не удалял, исправляемые строки закомментировал.
Первая строка кода (строка 301) и последняя, оставлены без изменений.
//-----Моя 1 правка
$maxlength = $maxlength - 4; // 4 - символа в .htm
//$alias = drupal_substr($alias, 0, $maxlength);
$alias = drupal_substr($alias, 0, $maxlength).'.htm';
//----- конец первой правки
// If the alias already exists, generate a new, hopefully unique, variant
$separator = variable_get('pathauto_separator', '-');
if (_pathauto_alias_exists($alias, $src, $language)) {
$original_alias = $alias;
//-----Моя 2 правка
$alias = preg_replace('@\.htm$@', '', $alias);
// for ($i = 0; _pathauto_alias_exists(drupal_substr($alias, 0, $maxlength - strlen($i)) . $separator . $i, $src, $language); $i++)
for ($i = 0; _pathauto_alias_exists(drupal_substr($alias, 0, $maxlength - strlen($i)) . $separator . $i .'.htm', $src, $language); $i++) {
}
//----- конец вторй правки
// Make room for the sequence number
$alias = drupal_substr($alias, 0, $maxlength - drupal_strlen($i));
//-----Моя последняя правка
//$alias = $alias . $separator . $i;
$alias = $alias . $separator . $i .'.htm';
//----- конец последней правки
// If verbose is on, alert the user why this happened
После этого у всех паттернов удалил ".htm" в конце. Отавил такие [term-raw]/[title-raw]
Все прекрасно пашет.
При совпадении получается "_0.htm", "_1.htm" и т.д. А при превышении лимита символов альяс заканчивается на ".htm"
Более плотно заняться пока нет времени. Пока так все работает.
Может кто подскажет более правильное решение, без редактирования pathauto.inc ?
Комментарии
А может проще так - "[term-raw]/[title-raw]-[nid].htm".
NID уникален и модуль не надо править.
«А может проще так - "[term-raw]/[title-raw]-[nid].htm"» Требовалось именно .../[title-raw].htm
Название нода перед ".htm". Пришлось извратиться.
"[term-raw]/[title-raw]-[nid].htm"» и это не решает проблему лимита символов в альясе.