Your browser (Internet Explorer 6) is out of date. It has known security flaws and may not display all features of this and other websites. Learn how to update your browser.
X
Post

Smartyのテンプレート内で配列の引数をassignする

ちょっとしたぼやき、TODOっぽいもの。


ZF-ExではZend Frameworkのビュー部分にSmartyを組み込んでいます。


この辺はすでにやり方が紹介されているような一般的な手法で、
最初にこの部分を組み込む際にいくらかのページを参考にして作らせていただきました。


ビューテンプレートの基盤はSmartyで、
そこからZendのビューヘルパーを呼び出すような構造になっています。

Smartyを基盤としている関係で、
一つそのままでは実現できない事があります。
それはテンプレートファイル中で配列を生成し、変数にassignする事です。

これが例えば次のような形であれば実現可能です。

// コントローラファイル内であればできる
$this->view->var = array('param_1' => 'aaa', 'param_2' => 'bbb');

// ビューファイル内で文字列のassignはできる
<{assign var=param_1 value='aaa'}>

// あらかじめ配列化されている変数をassignする事もできる
<{assign var=param_2 value=$arr_val}>


しかし、次のようなものは書く事ができません。

// ビューファイル内で配列を書いてassignすることはできない
<{assign var=param_1 value=array('aaa', 'bbb')}>


ビューファイル内で配列を作成するのが
どのような時に必要になるかというと、htmlタグをヘルパーから出力する時です。

htmlタグの属性を指定する場合、
「array(‘属性1’ => ‘値1’, ‘属性2’ => ‘値2’ …)」
という形で属性情報を配列化してヘルパーに渡すことで出力します。
Zend Frameworkでもcakephpでもhtmlタグのオプション指定はこういう記法を採用しています。
ここで作る配列は流動的な上、コントローラ側では記述しにくい
内容であるためここをカバーする仕組みをビュー側に用意したいです。

<{php}>
    $this->_tpl_vars['var'] = array('param_1'=>'aaa','param_2'=>'bbb');
<{/php}>


こんな感じでphpタグで囲えば通常のphpコードが書けるのですが
Smartyでそれをやるのはある意味「負け」なので何とか避けたい。


一つ思いついたのが、
配列を生成するビューヘルパーを一つ作成するというものです。
引数は可変で、次のように書く事で連想配列化するもので、
cakephpにおけるaa関数と同じものです。

// '属性1' => '値1', '属性2' => '値2' ... という配列を返す。
$helper->arr('属性1', '値1', '属性2', '値2', ...);


とは言え、これもcakephpにおいてもすでに非推奨となっている関数で、
できれば他のもっといい方法を採用したいところです。

TrackBack URL :

Leave a comment  

name

email

website

Submit comment