Генерация URL Alias для ноды с учетом Path связанного термина таксономии

Смешно, но буквально на днях открыл для себя это решение. До этого всегда использовал свой кастомный модуль, который предоставлял Token для генерации URL aliases ноды. А оказалось все решается уже готовыми модулями. Чтобы было более понятно, о чем это я тут глаголю, представьте ситуацию:

  1. у вас есть тип материала Article, у которого есть Field Tags для связывания данной ноды с термином таксономии;
  2. у каждого термина таксономии из словаря Tags есть уже заданный URL alias (например, "/humor", "/lifestory", "/fantasy");
  3. и вы хотите, чтобы у вас генерировались зависимые от выбранного термина таксономии алиасы для ноды (например, "/lifestory/kak-ya-provel-leto.html").

Ну и в качестве бонуса я еще расскажу, как сделать окончание ".html" на конце URL и как избежать ".html-0" в случае одинакового заголовка у ноды. Зачем это? Ну некоторые оптимизаторы считают круто иметь ".html" окончание у страниц.

Устанавливаем необходимые модули

Для работы нам потребуются следующие модули:

  • Token;
  • Pathauto;
  • Entity API (с включенным Entity tokens).

После установки сразу переходи на страницу конфигурации Patterns для URL aliases ("admin/config/search/path/patterns").

Настройка Patterns для URL aliases

Как вы догадались, именно [node:field-tags:0:url:path] возвращает алиас пути для термина таксономии. В данном случае берется алиас первого термина.

Настройка .html окончания ссылок

Для этого дела потребуется уже создать собственный модуль или же просто добавить код в уже существующий. А код вот такой:

  1. /**
  2.  * Implements hook_pathauto_alias_alter().
  3.  *
  4.  * Adds .html and prevents .html-0 aliases.
  5.  * @see pathauto_alias_uniquify().
  6.  */
  7. function MODULE_pathauto_alias_alter(&$alias, array &$context) {
  8. if ($context['op'] == 'insert' && $context['module'] == 'node') {
  9. $alias_suffix = '.html';
  10. $source = $context['source'];
  11. $langcode = $context['language'];
  12.  
  13. // If the alias already exists, generate a new, hopefully unique, variant
  14. $maxlength = min(variable_get('pathauto_max_length', 100), _pathauto_get_schema_alias_maxlength());
  15. $separator = variable_get('pathauto_separator', '-');
  16. $original_alias = $alias;
  17. $alias .= $alias_suffix;
  18.  
  19. if (_pathauto_alias_exists($alias, $source, $langcode)) {
  20. $i = 0;
  21. do {
  22. // Append an incrementing numeric suffix until we find a unique alias.
  23. $unique_suffix = $separator . $i;
  24. $alias = truncate_utf8($original_alias, $maxlength - drupal_strlen($unique_suffix, TRUE)) . $unique_suffix . $alias_suffix;
  25. $i++;
  26. } while (_pathauto_alias_exists($alias, $source, $langcode));
  27. }
  28. }
  29. }

Вот такими нехитрыми настройками вы получите красивые URL'ы на своем сайте.

Добавить комментарий

          d8b       888   .d8888b.  
Y8P 888 d88P Y88b
888 Y88b. d88P
888d888 888 .d88888 "Y88888"
888P" 888 d88" 888 .d8P""Y8b.
888 888 888 888 888 888
888 888 Y88b 888 Y88b d88P
888 888 "Y88888 "Y8888P"


Зарегистрируйтесь для добавления материалов без проверки.