CakePHP 完全 smarty 化への道

| | コメント(0) | トラックバック(0)



結局諦めきれずに bake の smarty 化に取り組み始めたわけですが。



CakePHP は rails を手本に下だけあってなんつーかよくできてて、


bake に手を入れるのも元ファイルに手を加えずに


別のコマンド作るところまでは結構サクサク進めました。



で、スクリプト中に埋め込まれてる bake の元テンプレートを


smarty テンプレートとして切り出し始めたわけです。


(これがやりたかった)



で、smarty で配列をどうやって扱うかってのはこちらの方がサクッとクリアしてるので、



テンプレート変数のメソッドなら治外法権という性質を利用して、 SmartyViewにラッパーメソッドを追加。



function aa() {
$args = func_get_args();
return call_user_func_array('aa', $args);
}

SmartyViewのインスタンスは$viewとしてテンプレート内から参照できるので、



Title: {$html->input('Post/title', $view->aa('size', 40, 'class', 'classname'))}

と書くことができる。邪道な気もしますが。


memo-space :: CakePHP日記:Smaryテンプレート内での配列生成


楽勝かと思いきや、html ヘルパーのlink で上手くいかないんですよ



/**
* ↓本来この形が想定されてるので、パラメタが渡せない
* array('action'=>'edit', 2)
*/
$html->link('Edit', $view->aa('action', 'edit', 2))


で、SmartyView のメソッドをこんなんにしました。



function _array() {
$args = func_get_args();
$array = array();
foreach ($args as $key=>$var) {
if (ereg("=>", $var)) {
$keys = split("=>", $var);
$array[$keys[0]] = $keys[1];
} else {
$array[$key] = $var;
}
}
return $array;
}

で、こう使う



/**
* 'action=>edit' であって、'action'=>'edit'ではない
*/
$html->link('Edit', $view->_array('action=>edit', 2))

せっかくのスマートなソースをぐだぐだに書き換えつつ



どんどん道を外れていく気がする。



とのたまったこの方の懸念のさらに斜め下を進んでる気がする。


トラックバック(0)

このブログ記事を参照しているブログ一覧: CakePHP 完全 smarty 化への道

このブログ記事に対するトラックバックURL: http://pm.11op.net/mt/mt-tb.cgi/50

コメントする