リージョンはノードテンプレート内で印刷できますか、それともリージョンはページテンプレートに限定されますか?
任意のテンプレート内で領域を印刷できますが、node.tpl.php
テンプレートのボックスからは使用できません。それらを使用可能にするには、node.tpl.php
テンプレートで使用する新しい変数を作成します。これには、すべてのリージョンコンテンツが含まれます。
新しいテンプレート変数の作成は、前処理関数を使用して行われます。テーマのtemplate.php
ファイルで、次のような関数を作成します。
function mytheme_preprocess_node(&$variables) {
}
mytheme
をテーマの短い名前に置き換えます。 Drupalがこの新しい前処理関数を認識するためには、サイトのテーマレジストリを再構築する必要があります。これはConfiguration→開発→パフォーマンスを押して、上部の「すべてのキャッシュをクリア」ボタン。
これで、前処理関数が機能する方法は、$variables
に、テンプレートの使用可能な変数に対応する配列が含まれることです。たとえば、node.tpl.php
の場合、$submitted
には著者の署名欄が含まれます。上記の前処理関数では、$variables['submitted']
にあります。
すべてのリージョンを含むpage.tpl.php
という配列がある$page
にあるものを模倣するには、$variables['page']
を入力します。
問題は、$page
の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
は、レンダリングする領域の名前です。