ブロック関数プラグイン

void smarty_block_name( $params,  
  $content,  
  &$smarty,  
  &$repeat);  
array $params;
mixed $content;
object &$smarty;
boolean &$repeat;
 

ブロック関数は、{func} .. {/func} 形式の関数です。 この関数によって囲まれたテンプレートのブロックの内容を処理します。 ブロック関数は、同じ名前の カスタム関数 より優先されます。つまり、テンプレート関数 {func} とブロック関数 {func}..{/func} の両方を定義することはできません。

  • デフォルトでは、実装された関数はSmartyによって2度 (1度目は開始タグ、2度目は終端タグによって)呼び出されます (この動作の変更方法は次の $repeat を参照)。

  • ブロック関数の開始タグのみ 属性 を持つ場合があります。全ての属性はテンプレートからテンプレート関数に、 連想配列として $params に格納された状態で渡されます。 また、終端タグを処理している時に開始タグの属性にアクセスする事が可能です

  • 変数 $content の値は、 関数が開始タグ又は終端タグのどちらから呼ばれるかによって変わります。 開始タグの場合は NULL、終端タグの場合はテンプレートブロックのコンテンツです。 テンプレートブロックが Smarty によって既に処理されている事に注意して下さい。 つまり、受け取るのはテンプレートソースではなくテンプレートの出力です。

  • $repeat パラメータは実装された関数に参照によって渡され、 そのブロックが何回表示されるのかを操作する事ができます。 デフォルトでは、最初のブロック関数の呼び出し(開始タグ)のとき $repeatTRUE で、その後に呼び出される場合(終端タグ)は、 FALSE となります。 実装された関数で $repeatTRUE とする事で、{func}...{/func} 間のコンテンツが再度評価され、 $content パラメータに新しいブロックコンテンツが格納された状態で、 再び呼び出されます。

ネストしたブロック関数がある場合、変数 $smarty->_tag_stack にアクセスする事で親のブロック関数を見つける事が可能です。 var_dump() を行い、構造をはっきりと理解すべきべきです。

Example 16.5. ブロック関数プラグイン


<?php
/*
 * Smarty plugin
 * -------------------------------------------------------------
 * File:     block.translate.php
 * Type:     block
 * Name:     translate
 * Purpose:  テキストブロックを翻訳する
 * -------------------------------------------------------------
 */
function smarty_block_translate($params, $content, &$smarty, &$repeat)
{
    // 終了タグでのみ出力します
    if(!$repeat){
        if (isset($content)) {
            $lang = $params['lang'];
            // ここで $content に対する翻訳を行います
            return $translation;
        }
    }
}
?>

     

register_block() および unregister_block() も参照してください。