ノードテンプレート内に領域を印刷できますか?


25

領域はノードテンプレート内に印刷できますか、または領域は厳密にページテンプレートに限定されていますか?

回答:


48

テンプレート内の領域を印刷することはできますが、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']

問題は、$pagein 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レンダリングする領域の名前はどこですか。


1
最後に、Drupal 7の有効なソリューション:)
エデュアルドルカ

4
私のために働いた迅速な「n」汚い解決策もあります<?php print render(block_get_blocks_by_region('machine_name_of_your_region'));?>。ここから:webomelette.com/add-region-node-template
ダラ

この解決策は素晴らしいです。page.tpl.phpにあるのではなく、node.tpl.php内の印刷領域に最も適しているのはいつですか?
ランデル14年

それは設計次第です。レイアウトによって、サイドバーがノードdivの外側ではなくノードdiv内にある場合、テーマ設定がはるかに簡単な場所にサイドバーが配置されることがあります。
ルービー14年

適切な領域ラッパーを忘れないでください!参照については、system_page_alter()を参照してください。block_get_blocks_by_region()ブロックの配列のみを返すことを忘れないでください。リージョンとしてレンダリングしたい場合は、リージョンラッパーを追加する必要があります。
SiliconMind
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.