Pathauto и правильные окончания автоальясов

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

Аватар пользователя mkonk mkonk 21 января 2009 в 17:46

Понадобилось сделать жестко заданные окончания для автосинонимов. Конкретно - ".htm".
Сначала попробовал решить настройками. Написал паттернов типа [term-raw]/[title-raw].htm
Вроде все работает, как надо.
Но вот при совпадении стали появляться альясы, заканчивающиеся на ".htm_0", ".htm_1" и т. д., а если альяс получался длиннее лимита, то он тупо обрезался, до лимита символов. Это не устраивало.

Красиво решить не получилось, пришлось править файл pathauto.inc

Вот, что было исправлено и дописано. Ничего не удалял, исправляемые строки закомментировал.
Первая строка кода (строка 301) и последняя, оставлены без изменений.

$maxlength = min(variable_get('pathauto_max_length', 100), 128);
  //-----Моя 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 ?

Комментарии

Аватар пользователя mkonk mkonk 23 января 2009 в 14:42

«А может проще так - "[term-raw]/[title-raw]-[nid].htm"» Требовалось именно .../[title-raw].htm
Название нода перед ".htm". Пришлось извратиться.