2.0 stableになってからまともにCakePHPに触れてなかったので、とゆーか、普段1.2系に触れてるのもあって、様変わりしてる2.0系は弱いんだよねー。


強いてSmartyを組み込みたいが為にGoogle先生にお世話になったメモ。
 

先生に「cakephp 2.0 smarty」と質問するとこのURLを教えてくれます。

http://www18.atwiki.jp/javascripter/pages/26.html

ま、一番目にヒットする内容のページが広告などなどで崩れてるのもあって整形してくれてるWikiみたいなんだけれど、とりあえずこのソースをコピって /app/Views/SmartyView.php を新規作成してペーストした。

-$this->subDir = 'smarty'.DS;
+$this->subDir = ''; 

ソースの中でこの修正をしておかないと、例えば /Views/Pages/smarty/display.tpl を読み込むので /Views/Pages/display.tpl とストレートにお願いしたいから(ctp共存の仕様なのかな?知らない)。

あと、Layoutsの中だけは /smarty/default.tpl じゃなくて何故かそのまま default.tpl を読むので…。


ちなみに、コピペのソースだと routes.php でテンプレートが指定されてても無視してメソッド名のテンプレートを呼んだので別途対応しないとそれは機能しないかもしれない(デフォルトでは pages コントローラの display メソッドが実行されて home テンプレートを呼ぶはずなのにそのまま display だった)。

↑ものすごい勘違いで、CoreにあるPagesController.phpではパラメータとしてrender()に設定されるからhomeテンプレートが読み込まれるのであって、ユーザコントローラ(app/controller/PagesController.php)を作った際に特別処理しなければ普通にdisplayテンプレートが呼ばれる挙動で正常だった orz


以上が整えば、各コントローラのクラス変数 $viewClass = 'Smarty'; でおk!

ってそんな面倒なことはしないよね…、AppController で指定したら継承するだけでおk!


class AppController extends Controller {
  public $viewClass = 'Smarty'; # Smartyって書いとくとSmartyViewとして先のファイルをロード
}



最後に最初にやるべき内容を補足しとくと、Smartyをダウンロード&解凍したら

  1. libs → smarty へフォルダ名リネーム
  2. /app/Venders/smarty として設置

 
もちろんネイティブに<?php echo $name; ?>とかショートタグで<?=$name?>の方が軽いと思うよ。

でもショートタグは推奨されないしさー、もうテンプレの可読性で嫌になる時もしばしば。


だから {$name} とか書きたいじゃん?(´・ω・`)おれだけ?


 
みんなが幸せでありますように!