回答:
テンプレート内の領域を印刷することはできますが、node.tpl.php
テンプレートのすぐに使用できる領域ではありません。それらを使用可能にするには、node.tpl.php
テンプレートで使用するすべての領域コンテンツを含む新しい変数を作成します。
新しいテンプレート変数の作成は、前処理関数を使用して行われます。テーマのtemplate.php
ファイルで、次のような関数を作成します。
function mytheme_preprocess_node(&$variables) {
}
mytheme
テーマの短い名前に置き換えます。次に、Drupalがこの新しい前処理機能を認識するために、サイトのテーマレジストリを再構築する必要があります。これは、[ 設定] →[ 開発] →[ パフォーマンス ]に移動し、上部の[すべてのキャッシュをクリア]ボタンを押すのと同じくらい簡単です。
現在、前処理関数の動作方法は$variables
、テンプレートで使用可能な変数に対応する配列を含むことです。たとえばnode.tpl.php
、に$submitted
は、著者の署名欄が含まれています。上記の前処理関数では、にあり$variables['submitted']
ます。
あなたが持っているものを模倣するためにpage.tpl.php
、$page
すべての領域を含むと呼ばれる配列がある場合、あなたは移入したいと思うでしょう$variables['page']
。
問題は、$page
in node.tpl.php
がすでにtrue / false値で設定されていることです。これにより、ノードを単独で見るのかリストで見るのかを知ることができます。
そのため、名前の衝突を避けるために、$region
代わりにデータを入力してください:
function mytheme_preprocess_node(&$variables) {
// Get a list of all the regions for this theme
foreach (system_region_list($GLOBALS['theme']) as $region_key => $region_name) {
// Get the content for each region and add it to the $region variable
if ($blocks = block_get_blocks_by_region($region_key)) {
$variables['region'][$region_key] = $blocks;
}
else {
$variables['region'][$region_key] = array();
}
}
}
次に、テーマのnode.tpl.php
テンプレートで、次の手順を実行して任意の領域をレンダリングできます。
<?php print render($region['sidebar_first']); ?>
sidebar_first
レンダリングする領域の名前はどこですか。
<?php print render(block_get_blocks_by_region('machine_name_of_your_region'));?>
。ここから:webomelette.com/add-region-node-template
block_get_blocks_by_region()
ブロックの配列のみを返すことを忘れないでください。リージョンとしてレンダリングしたい場合は、リージョンラッパーを追加する必要があります。