CakePHPでSmartyを使う

CakeForgeというオープンソース開発サイトで公開されているSmarty ViewクラスでSmartyを使う方法メモ。


Smarty View class


ダウンロードした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)}


参考