web-dev-qa-db-ja.com

パスオートで言語ニュートラルURLエイリアスパターンを使用する方法

Pathautoで次のパターンを使用したい:

  • myCT All言語:pattern1
  • myCT neutral言語:pattern2
  • myCT [〜#〜] en [〜#〜]言語:pattern2

そのため、myCTのすべてのニュートラル(UND)ノードとENノードにはパターン2があり、他のすべての言語にはパターン1があります。同じパターンを持つ他の多くの言語があり、繰り返したくないので、他のすべての言語にALL言語パターンを使用しています。

MyCTのエンティティ変換モジュールを使用しています。

ノードを作成してデフォルトの言語(UND)と自動パスエイリアスで保存すると、常にpattern1が生成されます。 ノードを再編集して正しいパターンを取得させる(UND /ニュートラル言語の場合)、pattern2。

まず、ノードの作成前にpathauto_pattern_load_by_entity関数(pathauto.moduleファイル)が呼び出されるため、ノードの作成中、ノードの言語は常にUNDです。

次に、pathautoモジュールをデバッグしようとすると、次のようになります。

function pathauto_pattern_load_by_entity($entity, $bundle = '', $language = LANGUAGE_NONE) {
  $patterns = &drupal_static(__FUNCTION__, array());

  $pattern_id = "$entity:$bundle:$language";
  if (!isset($patterns[$pattern_id])) {
    $variables = array();
    if ($language != LANGUAGE_NONE) {
      $variables[] = "pathauto_{$entity}_{$bundle}_{$language}_pattern";
    }
    if ($bundle) {
      $variables[] = "pathauto_{$entity}_{$bundle}_pattern";
    }
    $variables[] = "pathauto_{$entity}_pattern";

    foreach ($variables as $variable) {
      if ($pattern = trim(variable_get($variable, ''))) {
        break;
      }
    }

    $patterns[$pattern_id] = $pattern;
  }

  return $patterns[$pattern_id];
}

したがって、次の行では中立言語が考慮されないパスのようです。

if ($language != LANGUAGE_NONE) {
   $variables[] = "pathauto_{$entity}_{$bundle}_{$language}_pattern";
}

Ifステートメントが削除されるべきではありませんか?それ以外の方法でニュートラル言語パスを使用するにはどうすればよいですか?

3
Maria Ioannidou

良い点、私も同じように考えていました。

削除する行ではなく、LANGUAGE_NONEは、「und」言語の変数配列にパターンを設定します。次に、そうでない場合は、言語固有のパターンを配列に設定します。

私は問題を開いてパッチを投稿しました、チェックしてください https://www.drupal.org/node/2438745

3
drupov

Pathauto i18n モジュールを使用できます:

このモジュールは、各言語のエイリアスを作成する機能を提供します。また、このモジュールは、フィールド翻訳を使用していて、node/nidとは異なるパスを持つすべての言語でノードを表示したい場合に役立ちます。

3