Hook_block_viewを実装するカスタムモジュールがあります。ブロックコンテンツの広範なHTMLコードをどこに配置すればよいか知りたいのですが。
例えば:
$block['title'] = t('TEST');
$block['content'] = '<div id="user-custom-block">';
$block['content'] .= ... 50 LINES OF HTML.
$block['content'] .= '</div>';
私がこれまでに行ったことは、。tpl.phpファイルを作成し、そこにこのすべてのコードを配置して、次に呼び出すだけです:
$block['title'] = t('TEST');
$block['content'] = theme('user_custom_block');
それが正しいか?
はいの場合、これまでのところ、とても良い。しかし、このブロックコンテンツ内に「複雑な」ロジックがある場合はどうなりますか?
例えば:
$block['title'] = t('TEST');
for...
$block['content'] = '<div id="user-custom-block">';
if:
$block['content'] .= ... 50 LINES OF HTML.
endif;
$block['content'] .= '</div>';
endfor;
etc
etc
。tpl.phpファイルで使用しても問題ありませんか?そうでない場合、どのアプローチを使用する必要がありますか?
このようなものを使用する必要がありますか?
/**
* Implementation of hook_block_view().
*/
function custom_block_view($delta='') {
$block = array();
switch ($delta) {
case 'my-block-id':
$block['subject'] = t('Block Name');
$block['content'] = custom_contents();
break;
}
return $block;
}
/**
* custom html block
* @return string
*/
function custom_contents() {
return '
</p><div class="body">
Hello World, this is a example custom Block
</div><p>
';
}
あなたの目標は、すべての処理をテンプレートファイルに入れないようにすることです。テンプレートをテンプレートとして扱います。一部のHTMLと場所によっては、変数を出力します。
しかし、あなたが説明していることから、「50行のHTML」のテンプレートを使用することが最も有用です。 PHP=関数で数行のHTMLを維持することは1つのことですが、50は悪夢のように聞こえます。
<!-- my-template.tpl.php -->
<div class="50-lines-of-html">
<?php echo $this; ?>
<?php echo $that; ?>
</div>
次に、for ...ループを実行し、そのテンプレートを使用してコンテンツを構築する関数を作成します。
function process_my_things($things) {
$output = '';
foreach ($things as $thing) {
if ($it_is == TRUE) {
// do some stuff with $thing
$output .= theme('my-template', array('this' => $this, 'that', => $that));
}
}
return $output
}
これもテーマ関数になる可能性がありますが、オーバーライドを許可する場合を除き、テーマ関数である必要はありません。
最後に、別のテーマ関数またはテンプレートをラッパーとして使用して、取得したものを配置します。上記のように、ここで$ block ['content']を使用することもできます。
$block['content'] = '<div id="my-wrapper">';
$block['content'] .= process_my_things($things);
$block['content'] .= '</div>';
あなたは2つの異なるオプションでそれを改善することができます:1)テーマ関数の作成2)テンプレートファイルの作成(tpl)
Tplはよりクリーンなオプションかもしれませんが、どちらも似ています。どちらの場合も、ロジックをテーマ関数/ tplファイル内に配置する代わりに、前処理された変数を渡す必要があります。
また、リテラル文字列はt()関数を通過する必要があることに注意してください。