web-dev-qa-db-ja.com

最初のパターンが空のパスを生成する場合、Pathautoは別のパターンにフォールバックできますか?

ページがメニューにある場合はページが自動生成され、メニューにない場合は別のパスが必要です。ページがメニューにない場合、Pathautoのような空のパスは現在生成されません。

どうやってやるの?

詳細:ページがメニューにあるときに完全に機能する私のコンテンツタイプにこのパターンを使用しています。

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

問題は、ページがメニューにない場合、空のパスを取得することです。たとえば、ページの「タイトル」に基づいて別のパスを与えたいと思います。

1
Mario Awad

残念ながら、条件付きトークンは何度も要求され、実装されなかったため、要求したフォールバックは不可能です。

代わりに Rules を使用できます。 Drupal.orgの説明 は簡単だと主張しています-pathautoの代わりに、ノードの作成/更新に関するルールを設定し、必要なエイリアスを作成します。 Rules examples プロジェクトでわかるように、ルールは条件をサポートしているため、条件付きでエイリアスを作成できます。

0
Mołot

これで、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
m4olivei

メニュー項目が生成されない場合、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
Tyler Pepper