Smartyは、Smartyの機能を拡張するためプラグインを作成することができます。
プラグインに関する情報をあまり見つけられなかったのですが、カスタム関数が
プラグインであることがわかりました。
ドキュメントをちゃんと読まないからいけないですね。
プラグインディレクトリは、「SMARTY_DIR直下のpluginsです。」と書いてあります。
これで、プラグインのサンプルが手に入りました。
ここでは、カスタム関数(実はプラグイン)であるmailtoを参考にしてみます。
プラグインには、命名規則があります。ファイル名は、次のように指定します。
プラグインのタイプ.プラグイン名.php
プラグインファイル内で定義されるプラグイン関数にも命名規則があります。
smarty_プラグインのタイプ_関数名()
mailtoは、functionといわれるプラグインタイプで、テンプレート関数といわれる
プラグインを作成します。テンプレート関数は、戻り値でテンプレート(関数)のタグと
置き換えたりすることができます。(他にも、何も出力しないということもできます。)
mailtoの場合、テンプレートで{mailto address=***}と記述した部分が
mailtoプラグインの戻り値で置き換えられ a要素などで出力されます。
それでは、mailtoプラグインを省略したソースを見てみます。
function smarty_function_mailto($params, &$smarty) { $extra = ''; if (empty($params['address'])) { $smarty->trigger_error("mailto: missing 'address' parameter"); return; } else { $address = $params['address']; } $text = $address; return '<a href="mailto:'.$address.'" '.$extra.'>'.$text.'</a>'; }
エンコードの指定等だいぶ省略していますが、functionの使い方は、わかりやすいと思います。
テンプレートで指定した{mailto 以降が引数としてプラグインに渡ります。
address=xxxxの部分がそれにあたります。引数は、連想配列として渡され$paramsにセットされます。
受け取った値をa要素等と加工して戻り値として返しています。
テンプレート関数プラグインでは、自分で作成したタグを何らかの処理をして置き換える
といったことに使えるプラグインです。
ドキュメントでは、受け取った変数に値があるかをチェックし、ある場合は、第2引数で
渡されるSmartyオブジェクトのテンプレート変数にassignするという
サンプルもあります。