Генерация 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 .d88b. 888 .d88b.
88K d88P"88b 888 d88P"88b
"Y8888b. 888 888 888 888 888
X88 Y88b 888 888 Y88b 888
88888P' "Y88888 88888888 "Y88888
888 888
Y8b d88P Y8b d88P
"Y88P" "Y88P"
Зарегистрируйтесь для добавления материалов без проверки.