Генерация 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  d8b                d8888  
Y8P Y8P d8P888
d8P 888
8888 888 888 888 d8P 888
"888 888 888 888 d88 888
888 888 888 888 8888888888
888 888 Y88b 888 888
888 888 "Y88888 888
888
d88P
888P"
Зарегистрируйтесь для добавления материалов без проверки.