CakePHPでSmartyを利用する方法
Smartyのダウンロード(2.6.12 で動作確認)
こちらよりSmarty-2.*.**.tar.gzをダウンロード。
CakePHPの/vendorsに、smartyディレクトリを作成。
Smarty-2.*.**.tar.gzを解凍して、libs内のファイルを上で作成したsmartyディレクトリにコピー。
(/vendors/smarty/Smarty.classの様な構成になる。)
/app/tmp/smarty/にSmartyの利用するcache、compileディレクトリを作成。
/app/tmp/smarty/cache/
/app/tmp/smarty/compile/
Smarty View class (Version 1.1で動作確認)
こちらよりファイルをダウンロードしてsmarty.php にリネームして/app/views/ ディレクトリにコピー。
__constructの
$this->subDir = 'smarty'.DS;
をコメントアウト
_renderの
$this->Smarty->assign_by_ref('view', $this);
を
$this->Smarty->assign_by_ref('this', $this);
に変更
AppControllerへの設定
/cake/app_controller.phpを/app/app_controller.phpにコピーして
class AppController extends Controller {
var $view = 'Smarty';
・
・
・
これでviewに「.tpl」があればSmartyのテンプレートとして処理を行い、なければ通常通り「.thtml」を表示します。
変数のassignなどは、Smarty View classが行なってくれるので、this、html、form、sessionや利用しているモデルなどはそのまま利用する事が出来ますので、元のビューの
「< ?php echo」を「{」
に
「;?>」を「}」
にするだけで、ほぼ利用する事が出来ます。
{$html->input(’Member/email’, array(’size’ => ‘60′))}
の「array(’size’ => ‘60′)」の部分がエラーになる問題は、ここからファイルをダウンロードして、function.assign_assoc.phpにリネームして/vendors/smarty/libs/plugins/にコピー。
テンプレートの先頭で
{assign_assoc var=’ArrayName’ value=’size=>60′}
や
{assign_assoc var=’ArrayName’ glue=’::’ value=’size=>60::value=>commas, no prob’}
などとして
{$html->input(’Member/email’, $ArrayName)}
とすれば面倒ですがこの問題も解決します。