Генерация 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'ы на своем сайте.

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

 888       888       888   .d8888b.   888888b.   
888 888 o 888 d88P Y88b 888 "88b
888 888 d8b 888 888 888 .88P
888 888 888 d888b 888 .d88P 8888888K.
888 .88P 888d88888b888 .od888P" 888 "Y88b
888888K 88888P Y88888 d88P" 888 888
888 "88b 8888P Y8888 888" 888 d88P
888 888 888P Y888 888888888 8888888P"


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