タイトルごとにブロックごとにカスタムテンプレートを使用する方法はありますか?たとえば、自分のブロックに「test1」という名前を付け、それがリージョン「left1」にある場合、次のテンプレートの提案を使用したいと思います。
ブロックのテンプレート候補のリストはありますか?
Drupalのテーマ設定システムには、「テンプレート提案」と呼ばれる概念があります。テーマフックが呼び出されると、Drupalは、テーマフックがテンプレートまたは関数として実装されているかどうかを確認します。テンプレートの場合、そのテーマフックのすべての前処理関数が呼び出されます。つまり、すべてのモジュールまたはテンプレートは、テンプレートで使用できるようになる変数に独自のデータを追加できます。これらの変数は、大きな配列_$variables
_として渡されます。この配列には、_$variables['template_files']
_というネストされた配列としてテンプレート候補のリストを含めることができます。 Drupalは後でそのリストを逆にして、最初に見つかった既存のテンプレートを使用します。詳細は drupal.orgのドキュメント を参照してください。
今あなたができることは:
[themename]_preprocess_[themehook]
_という名前のテーマのtemplate.phpに関数を追加します(例:function mytheme_preprocess_block(&$variables) {}
)$variables['template_files']
_配列に追加しますちなみに、私が間違っていない場合、テンプレートの提案でリージョン名を使用することはできません。これは、ブロックがレンダリングされた時点では、出力がどのリージョンで表示されるかがまだわからないためです。
PS 1:使用しているDrupalバージョンをお知らせください。
PS 2:この質問を https://drupal.stackexchange.com/ に移動するよう投票します
ブロック(およびコアの残りの部分)のテンプレート提案パターンは http://drupal.org/node/1089656 にあります。ブロックのタイトルを使用する代わりに、blockなどのブロックのIDを使用します。block-block.-1.tpl.phpは、1のIDでブロックモジュールが定義(ユーザー定義)したブロック用です(IDを見つけることができます)ブロックを編集するときのURLのモジュール)。
リージョン名を使用することもできますが、ブロックは1つのリージョンにしか入ることができないため、idとリージョン名の両方を使用する必要はありません。
それがあなたの探していることを正確に実行するかどうかはわかりませんが、 ブロックテーマモジュール に近いようです。調査する価値がある同様のモジュールは Skinr です。