テンプレート内で関数処理する
smartyのテンプレート内で関数を使う必要が生じた。単に「関数で処理して表示」というわけではなく、いったんプログラムで処理して処理した戻り値をsmarty変数に返す、という処理をしたい。
いろいろ調べた結果、関数群を記述したクラスからオブジェクトを生成し、smartyオブジェクトに登録する、という方法が有効だとわかった。
具体的には、
class myClass
{
function myfunc($params,&$objSmarty){
return (戻り値);
}
}
とクラスを定義しておき、これを以下の手順で登録する。
$myObj=new myClass;
$objSmarty->register_object(‘myObj’,$myObj);
テンプレート内で上記関数を呼び出して戻り値を変数に格納するには以下のように記述する。
{myObj->myfunc assign=returnValue}
何がやりたかったかというと、smartyに対して文字列で与えられた変数を分割して、生成した配列を個別に扱いたかった、ということ。
きっと、もっとスマートな方法があると思うのだが思いつかなかった。まぁ、これでもできているので、とりあえず解決。
あと自分の場合mojaviでCustomSmartyRenderer.class.phpというのを使っている。よってこのファイルの中で定義している(自分的メモ)。
$smarty = & $this->getEngine();
foreach ( $params AS $key => $value ) $smarty->$key = $value;
//追加ここから
$cubeQuickFormObj=new cubeQuickFormUtils;
$smarty->register_object(‘cubeQuickFormObj’,$cubeQuickFormObj);
//追加ここまで