web-dev-qa-db-ja.com

テンプレートの提案をブロック

タイトルごとにブロックごとにカスタムテンプレートを使用する方法はありますか?たとえば、自分のブロックに「test1」という名前を付け、それがリージョン「left1」にある場合、次のテンプレートの提案を使用したいと思います。

  • block-left1-test1.tpl.php
  • block-left1.tpl.php
  • block-test1.tpl.php

ブロックのテンプレート候補のリストはありますか?

6
amirash

Drupalのテーマ設定システムには、「テンプレート提案」と呼ばれる概念があります。テーマフックが呼び出されると、Drupalは、テーマフックがテンプレートまたは関数として実装されているかどうかを確認します。テンプレートの場合、そのテーマフックのすべての前処理関数が呼び出されます。つまり、すべてのモジュールまたはテンプレートは、テンプレートで使用できるようになる変数に独自のデータを追加できます。これらの変数は、大きな配列_$variables_として渡されます。この配列には、_$variables['template_files']_というネストされた配列としてテンプレート候補のリストを含めることができます。 Drupalは後でそのリストを逆にして、最初に見つかった既存のテンプレートを使用します。詳細は drupal.orgのドキュメント を参照してください。

今あなたができることは:

  1. _[themename]_preprocess_[themehook]_という名前のテーマのtemplate.phpに関数を追加します(例:function mytheme_preprocess_block(&$variables) {}
  2. その関数で、目的のテンプレート名の提案を作成します
  3. これらの提案を_$variables['template_files']_配列に追加します

ちなみに、私が間違っていない場合、テンプレートの提案でリージョン名を使用することはできません。これは、ブロックがレンダリングされた時点では、出力がどのリージョンで表示されるかがまだわからないためです。

PS 1:使用しているDrupalバージョンをお知らせください。

PS 2:この質問を https://drupal.stackexchange.com/ に移動するよう投票します

6
marcvangend

ブロック(およびコアの残りの部分)のテンプレート提案パターンは http://drupal.org/node/1089656 にあります。ブロックのタイトルを使用する代わりに、blockなどのブロックのIDを使用します。block-block.-1.tpl.phpは、1のIDでブロックモジュールが定義(ユーザー定義)したブロック用です(IDを見つけることができます)ブロックを編集するときのURLのモジュール)。

リージョン名を使用することもできますが、ブロックは1つのリージョンにしか入ることができないため、idとリージョン名の両方を使用する必要はありません。

3
Jody

それがあなたの探していることを正確に実行するかどうかはわかりませんが、 ブロックテーマモジュール に近いようです。調査する価値がある同様のモジュールは Skinr です。

1
Matt V.