以前のバージョンのSmartyでは{php}ステートメントを使ってテンプレート内でPHPコードを実行できたけど、新しいバージョンでは出来なくなっている模様。本家サイトのマニュアルには以下のように明記されている。
IMPORTANT NOTICE
{php} tags are deprecated from Smarty, and should not be used. Put your PHP logic in PHP scripts or plugin functions instead.
対策はSmartyプラグインを作るしかない。以下にプラグイン作成の手順をまとめておく。
Smartyプラグインの作成手順
1. プラグインの名前を決める。
例えばログインしているユーザ名を取得するプラグインを作るとして名前をmynameとする。
2. するとプラグイン関数の名前が決まるのでPHPのコードを書く。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php /* * Smarty plugin * ------------------------------------------------------------- * File: function.myname.php * Type: function * Name: myname * Purpose: outputs login name * ------------------------------------------------------------- */ function smarty_function_myname($params, &$smarty) { $answer = 'username'; // 何か処理 return $answer; } ?> |
$paramsはテンプレートから渡ってくる引数で、例えばテンプレート中で{myname var1=’test’ var2=’123′}と呼び出されると、params[‘var1’]=’test1′, params[‘var2’]=’123′ というように配列が渡ってくる。パラメータが指定されずに呼び出される場合も想定してisset(params[‘var1’]) といったチェックを行うこと。
プラグイン関数からの戻り値が必要ない場合にはreturnステートメントを書かなくてもいいけど、処理が正常終了したか真偽を返すといいかも。引数の$smarty変数の参照を利用すれば、例えば$smarty->assign(‘result’, $answer)というようにプラグイン関数内でテンプレート変数をセットすることも可能。
3. 作成したプラグインファイルを <Smartyパス>/libs/pluginsディレクトリに配置する。
Smartyの設定で異なるプラグインディレクトリを設定している場合にはそれに従う。
4. テンプレートからプラグインを呼び出す。
1 |
あなたはユーザ名 {myname} でログインしています。 |
参考サイト
Chapter 18. Extending Smarty With Plugins | Smarty
http://www.smarty.net/docs/en/plugins.tpl