web-dev-qa-db-ja.com

ノードのパスエイリアスに分類パスを使用する

Drupal 8?で、その用語が選択されているノードタイプの自動エイリアスのパターンで、分類用語のエイリアスを参照するためにトークンを使用することは可能ですか?(単一の分類用語が選択されます。)

例:分類がNamesの場合、値はJamesMargaretDanielと各名前パスが割り当てられています(/news/jim/news/peggy/news/dan)。パターンが[taxonomy:Names:path]/[node:title]のような「ニュース」ノードタイプの自動パスを作成できます。 Namesリストから "Margaret"を選択し、ノードに "Summer Vacation 2017、"というタイトルを付けると、次のようになります。 /news/peggy/summer-vacation-2017の自動ノードパス?

私が見つけた分類法に基づくパスエイリアスへのすべての参照は、用語のエンティティ値を使用していますが、これは望ましくありません。上記の例の結果として/news/margaret/summer-vacation-2017を使用したくありません。

1
Andrew

pathauto を使用すると、次のようなパターンで静かに簡単になります。

通常の方法:

news/[node:{NAME_OF_TAXONOMY_FIELD}:entity:name]/[node:title]

階層あり:

news/[node:{NAME_OF_TAXONOMY_FIELD}:entity:parents:join-path]/[node:{NAME_OF_TAXONOMY_FIELD}:entity:name]/[node:title]

あなたの場合、これはうまくいくはずです

[node:{NAME_OF_TAXONOMY_FIELD}:entity:url]/[node:title]
6
Oulalahakabu

あなたはhook_pathauto_alias_alterを実装することができます:

/**
 * Implements hook_pathauto_alias_alter().
 */
 function MYMODULE_pathauto_alias_alter(&$alias, array &$context) {

  if ($context['module'] != 'node') {
    return;
  }

  $node = $context['data']['node'];

  // here you can write your logic to get the taxonomy term url alias
  // something like:
  //read out the taxonomy term field of your node
  // get the term $term
  // get the URL Alias of it
  $options =
    [
      'absolute' => false,
    ];
    $termUrl = \Drupal\Core\Url::fromRoute('entity.taxonomy_term.canonical', ['taxonomy_term' => $term->id()], $options);

    if ($termUrl && strpos($termUrl,'/taxonomy/term/' === false)) {
      $aliasPath = str_replace('/' . $languageId . '/', '/',$termUrl->toString());
    }
    $alias = $aliasPath . $alias;

  }
2