ノードエンティティに2つのコンテンツバンドルがあります。
次に、これらのコンテンツタイプであるPotato(レシピ)とHomepage(custom_layout)を使用して2つのコンテンツを作成しました。
コンテンツにはenとfrの2つの言語があります。ポテトレシピノードをホームページのコンテンツ内にロードしようとしています。
したがって、前処理フックの中に、私はこのコードを持っています
... if(isset($vars['node']) && $vars['node']->type === 'custom_layout'){ $recipe_id = 10; $vars['recipe_side'] = render(node_view(node_load($recipe_id))); } ...
次に、custom_layoutテンプレートファイルの$ recipe_sideをエコーします。
ページのfrバージョンをロードすると、レシピもfrにロードされるはずでしたが、常にenバージョンが表示されます。
EnレシピのノードIDが10で、翻訳されたノードをロードしないためだと思います。
その場合、読み込まれたノードが現在の言語に従うようにするにはどうすればよいですか?
このコードを試してください:
$node_trad = node_load($variables["node"]->nid); // in your case, 10.
$idi_trad = translation_node_get_translations($node_trad->tnid);
$vars['recipe_side'] = render(node_view(node_load($idi_trad["fr"]->nid)));
//$vars['recipe_side'] = render(node_view(node_load($idi_trad[$language->language]->nid)));
// alternative, more dynamical
基本的に、ノードを元の言語でロードし、translation関数を使用して使用可能なすべての翻訳を取得し、必要なものを使用します。 「fr」の代わりに、language->language
を使用して完全に動的にすることができます。
次のコードを使用して、現在の言語のTRANSLATEDノードを取得します。
$node_id = 10; // Put the node ID here where you want the translation for.
$translation_node = translation_node_get( $node_id );
// Show the translated node
print_r( $translation_node );
function translation_node_get( $node_id )
{
if ( is_numeric($node_id) && $node_id > 0 )
{
// Get current language code
global $language;
$lang_code = $language->language;
// Get translation node id
$base_node = node_load( $node_id );
$tnid = $base_node->tnid;
// Search the database for the translated node of the current language
$result = db_select('node', 'n')
->fields('n', array('nid', 'type', 'uid', 'status', 'title', 'language'))
->condition('n.tnid', $tnid)
->condition('n.language', $lang_code)
->addTag('node_access')
->execute();
foreach ( $result as $trans_node )
{
// Return the correct language node
return node_load( $trans_node->nid );
}
}
// No translation node found!
return false;
}