Генерация URL Alias для ноды с учетом Path связанного термина таксономии
Смешно, но буквально на днях открыл для себя это решение. До этого всегда использовал свой кастомный модуль, который предоставлял Token для генерации URL aliases ноды. А оказалось все решается уже готовыми модулями. Чтобы было более понятно, о чем это я тут глаголю, представьте ситуацию:
- у вас есть тип материала Article, у которого есть Field Tags для связывания данной ноды с термином таксономии;
- у каждого термина таксономии из словаря Tags есть уже заданный URL alias (например, "/humor", "/lifestory", "/fantasy");
- и вы хотите, чтобы у вас генерировались зависимые от выбранного термина таксономии алиасы для ноды (например, "/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").
Как вы догадались, именно
возвращает алиас пути для термина таксономии. В данном случае берется алиас первого термина.[node:field-tags:0:url:path]
Настройка .html окончания ссылок
Для этого дела потребуется уже создать собственный модуль или же просто добавить код в уже существующий. А код вот такой:
- /**
- * Implements hook_pathauto_alias_alter().
- *
- * Adds .html and prevents .html-0 aliases.
- * @see pathauto_alias_uniquify().
- */
- function MODULE_pathauto_alias_alter(&$alias, array &$context) {
- if ($context['op'] == 'insert' && $context['module'] == 'node') {
- $alias_suffix = '.html';
- $source = $context['source'];
- $langcode = $context['language'];
-
- // If the alias already exists, generate a new, hopefully unique, variant
- $maxlength = min(variable_get('pathauto_max_length', 100), _pathauto_get_schema_alias_maxlength());
- $separator = variable_get('pathauto_separator', '-');
- $original_alias = $alias;
- $alias .= $alias_suffix;
-
- if (_pathauto_alias_exists($alias, $source, $langcode)) {
- $i = 0;
- do {
- // Append an incrementing numeric suffix until we find a unique alias.
- $unique_suffix = $separator . $i;
- $alias = truncate_utf8($original_alias, $maxlength - drupal_strlen($unique_suffix, TRUE)) . $unique_suffix . $alias_suffix;
- $i++;
- } while (_pathauto_alias_exists($alias, $source, $langcode));
- }
- }
- }
Вот такими нехитрыми настройками вы получите красивые URL'ы на своем сайте.
Добавить комментарий