ブロック関数プラグイン
ブロック関数は、{func} .. {/func} 形式の関数です。 この関数によって囲まれたテンプレートのブロックの内容を処理します。 ブロック関数は、同じ名前の カスタム関数 より優先されます。つまり、テンプレート関数 {func} とブロック関数 {func}..{/func} の両方を定義することはできません。
デフォルトでは、実装された関数はSmartyによって2度 (1度目は開始タグ、2度目は終端タグによって)呼び出されます (この動作の変更方法は次の $repeat を参照)。
ブロック関数の開始タグのみ 属性 を持つ場合があります。全ての属性はテンプレートからテンプレート関数に、 連想配列として $params に格納された状態で渡されます。 また、終端タグを処理している時に開始タグの属性にアクセスする事が可能です
変数 $content の値は、 関数が開始タグ又は終端タグのどちらから呼ばれるかによって変わります。 開始タグの場合は NULL、終端タグの場合はテンプレートブロックのコンテンツです。 テンプレートブロックが Smarty によって既に処理されている事に注意して下さい。 つまり、受け取るのはテンプレートソースではなくテンプレートの出力です。
$repeat パラメータは実装された関数に参照によって渡され、 そのブロックが何回表示されるのかを操作する事ができます。 デフォルトでは、最初のブロック関数の呼び出し(開始タグ)のとき $repeat は TRUE で、その後に呼び出される場合(終端タグ)は、 FALSE となります。 実装された関数で $repeat を TRUE とする事で、{func}...{/func} 間のコンテンツが再度評価され、 $content パラメータに新しいブロックコンテンツが格納された状態で、 再び呼び出されます。
ネストしたブロック関数がある場合、変数 $smarty->_tag_stack にアクセスする事で親のブロック関数を見つける事が可能です。 var_dump() を行い、構造をはっきりと理解すべきべきです。
register_block() および unregister_block() も参照してください。