smarty @Wiki

ブロック関数プラグイン

最終更新:

匿名ユーザー

- view
だれでも歓迎! 編集

ブロック関数プラグイン


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

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

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

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

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

&$repeat パラメータは実装された関数に参照によって渡され、 そのブロックが何回表示されるかを操作するための可能性を提供します。 $repeat のデフォルトは true で、これはブロック関数は最初に呼び出され(開始タグ)、 false の場合はブロック関数を全ての後に呼び出します(終端タグ)。 実装された関数の &$repeat が true で返るごとに {func} .. {/func} 間のコンテンツは評価され、 $content パラメータに新しいブロックコンテンツを持つものとして再び呼び出されます。

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

詳細は、register_block(),unregister_block()の項を参照して下さい。

例 15-5. ブロック関数プラグイン

<?php
/*
* Smarty plugin
* -----
* File:     block.translate.php
* Type:     block
* Name:     translate
* Purpose:  translate a block of text
* -----
*/
function smarty_block_translate($params, $content, &$smarty, &$repeat)
{
   if (isset($content)) {
       $lang = $params['lang'];
       // ここで$contentによっていくつかの翻訳を行う
       return $translation;
   }
}
?>

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

記事メニュー
目安箱バナー