Может ли Pathauto вернуться к другому шаблону, если первый шаблон дает пустой путь?


Я хочу, чтобы страницы имели автоматически сгенерированный путь, если они находятся в меню, и другой, если их нет в меню; а не пустой путь, как в настоящее время генерирует Pathauto, если страницы нет в меню.

Как я могу это сделать?

Подробности: Я использую этот шаблон для своего типа контента страниц, который отлично работает, когда страница находится в меню.

[node:menu-link:parents:join-path]/[node:menu-link]

Проблема в том, что когда страницы нет в меню, она получает пустой путь. Я хочу дать ему другой путь на основе "заголовка" страницы, например.

Author: Mario Awad, 2014-01-20

3 answers

К сожалению, условные токены запрашивались много раз и никогда не реализовывались, поэтому запасной вариант, о котором вы просите, невозможен.

Вместо этого вы можете использовать Правила . Описание на Drupal.org утверждает, что это просто - вместо pathauto настройте правило создания/обновления узлов и создайте необходимые псевдонимы. Правила поддерживают условия, как вы можете видеть в Примерах правил проекта, поэтому вы можете создавать псевдонимы условно.

 0
Author: Mołot, 2014-01-21 09:00:30

Теперь вы можете добиться этого с помощью функции hook_pathauto_pattern_alter(). Что-то вроде:

<?php
/**
 * Implements hook_pathauto_pattern_alter().
 */
function mymodule_pathauto_pattern_alter(&$pattern, array $context) {
  // Alter any node entity path patterns we need to
  if (isset($context['data']['node'])) {
    $node = $context['data']['node'];

    switch ($node->type) {
      case 'page':
        // Check condition, and change the pattern when appropriate
        $pattern = '[node:title]';
        break;

    }
  }
?>
 1
Author: m4olivei, 2016-04-21 08:06:42

Я взял то, что написал m4olivei, и заставил его работать для возврата к заголовку узла, если пункт меню не создан:

/**
 * Implements hook_pathauto_pattern_alter().
 */
function mymodule_pathauto_pattern_alter(&$pattern, array $context) {
  // Set up pathauto fallback to node title if no menu item is generated
  if (isset($context['data']) && isset($context['data']['node'])) {
    if (isset($context['data']['node']->menu) && isset($context['data']['node']->menu['enabled'])) {
      if (!$context['data']['node']->menu['enabled']) {
        $pattern = '[node:title]';
      }
    }
  }
}
 0
Author: Tyler Pepper, 2015-10-29 23:20:51