CakePHPでSmartyを使う
CakeForgeというオープンソース開発サイトで公開されているSmarty ViewクラスでSmartyを使う方法メモ。
ダウンロードしたSmartyViewクラスのファイルをsmarty.phpにリネームして以下に設置。
app/views/smarty.php
Smarty本体をダウンロードしてきて解凍。
できたディレクトリの中のlibsディレクトリをsmartyにリネームして、
libs(smarty)ディレクトリをまるごとvendersにコピー。
app/venders/smarty/〜
Smartyのキャッシュとコンパイルデータ格納ディレクトリをtmpディレクトリに作成。
権限を777にする。
app/tmp/smarty app/tmp/smarty/cache app/tmp/smarty/compile
$ chmod 777 cache $ chmod 777 compile
AppControllerでViewの代わりにSmartyViewを使うように設定する。
<?php class AppController extends Controller { var $view = 'Smarty'; }
あとはviewの代わりに拡張子tplのファイルを設置すればSmartyが使えます。
{$form->input('name')}
smarty用テンプレートファイルがなければ、tcpファイルもビューとしてそのまま動くようです。
Smartyの設定はSmartyViewクラスのコンストラクタをいじれば変更できる。
Smartyテンプレートでヘルパーを使う場合などには、
テンプレートには配列を直接書けないので注意(array()が使えない)。
SmartyViewを継承したAppSmartyViewを作って、
Smartyの独自設定をしたり、独自メソッドを作ると便利かも。
<?php class AppSmartyView extends SmartyView { function __construct (&$controller) { parent::__construct($controller); // smartyの設定を追加 } // 任意の関数を呼べるように function __call($name, $args) { return call_user_func_array($name, $args); } }
テンプレート側
<!-- $viewはAppSmartyViewのインスタンス --> {$form->input('name', $view->aa('label', '名前'))} <!-- $viewの中身を表示 --> {$view->var_dump($view)}
参考