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

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

  .d88888b.    .d8888b.   888b     d888  888    d8P  
d88P" "Y88b d88P Y88b 8888b d8888 888 d8P
888 888 888 888 88888b.d88888 888 d8P
888 888 888 888Y88888P888 888d88K
888 888 888 88888 888 Y888P 888 8888888b
888 Y8b 888 888 888 888 Y8P 888 888 Y88b
Y88b.Y8b88P Y88b d88P 888 " 888 888 Y88b
"Y888888" "Y8888P88 888 888 888 Y88b
Y8b

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