web-dev-qa-db-ja.com

翻訳されたノードへのパスを取得する方法は?

Drupal 7.で多言語サイトを設定しました。7。テンプレートで、特定のコンテンツノードへのリンクを追加する必要があります。このノードには、次のような翻訳とパスエイリアスがあります。

_node/42 = pathalias_de (german version)
node/43 = pathalias_en (english version)
_

テンプレートでurl()を呼び出して、現在の言語でコンテンツノードのエイリアスバージョンへのリンクを取得します。

ドイツ語のページでは_/de/pathalias_de_に英語のページでは_/en/pathalias_en_にリンクする必要があります

Nidを呼び出す、エイリアスを呼び出す、現在の言語オブジェクトをurl()に渡すなど、いくつかのバリエーションを試しました。

これはurl()で実行できるはずですか、別の関数が必要ですか?ありがとう!

10
Dooderoo

「コンテンツ翻訳」モジュールのソースを調べた後、私はこのソリューションを思いつきました:

    global $language;
    $translations = translation_path_get_translations("node/42");
    /*
    Returns the paths of all translations of a node, based on its Drupal path:
    array(2) {
        ["de"]=>string(7) "node/42"
        ["en"]=>string(7) "node/43"
    }
    */
    print l(t('Link Title'), $translations[$language->language]); //l() will return the alias to node/42

これにより、正しいノードエイリアスへのリンクが出力されます。機能し、過度に複雑ではありません-これをすでに実行する関数があるかどうか疑問に思います。

14
Dooderoo
global $language;

$translation_node = translation_path_get_translations("42");

$nid = $translation_node[$language->language]->nid;

$path = "node/{$nid}";
5
vetal4ik

drupal_get_path_alias fuction を見てください。

内部Drupalパスが指定されている場合、管理者が設定したエイリアスを返します。

パスが指定されていない場合、関数は現在のページのエイリアスを返します。

パラメーター

$ path:内部Drupalパス。

$ path_language:パスを検索するオプションの言語コード。

あなたが理解できるように、それはpath_languageパラメータを取ります。したがって、現在の言語を見つけて、この関数に渡すことができます。

または単に Multilink module を使用します

  1. 多言語サイト用に設計されています。すべてのコンテンツがすべての言語で利用できるわけではない、または後で利用可能になる(翻訳される)サイトに特に関連します。
  2. 他のノードへのコンテンツ内リンクを簡単に作成できます。これらのリンクは、利用可能な場合、参照されたノードの適切な翻訳バージョンを指すように自動的に更新されます。
4
Gokul N K

上記の回答のいずれもi18n_pathを正しく使用していないようです。変換されたノードにリンクする場合は、i18n_pathモ​​ジュールを有効にしてパスをフォーマットするだけです。

drupal_get_path_alias('node/'.$node->nid, $node->language);
3
macjules

おそらく link function を使用する必要があります。言語をパラメーターとして渡すことができ、Drupalとのリンクを作成するための適切な関数です。

2
Matt

Translation Redirect を使用すると、言語接頭辞を持つノードにリンクできます。

これはそれが言うことです:

翻訳リダイレクトモジュールは、301リダイレクトコードを使用して、匿名ユーザー(Webクローラーを含む)を、リクエストされた言語(存在する場合)でのページの翻訳にリダイレクトします。たとえば、リクエストが/ de/node/23に対するもので、node/23が英語のページに対応している場合、ユーザーは英語のノードのドイツ語の翻訳にリダイレクトされます(存在する場合)。翻訳が存在しない場合は、ソースノードのコンテンツが表示されます。

たとえば、nid 22が英語バージョンで、フランス語とドイツ語のバージョンがある場合、fr/node/22およびde/node/22としてリンクするだけです。この22は、翻訳されたバージョンの任意のnidにもできます。

日本語を追加していない場合など、特定の翻訳が見つからない場合、ja/node/22は匿名ユーザーに404を提供します。

1
AgA

正しいプレフィックスパスを取得するには、次を使用します。

$node_url = url(drupal_get_path_alias('node/' . $row->nid));

Drupal_get_path_alias()はエイリアスのみを返し、url()はプレフィックス( "en /")を追加するものです。

0
nimbfire