【SmartyView】導入方法が紹介されていました

tatsuyakun.jp さんで、拙作SmartyViewの導入方法が紹介されていました。
また、sjisでのSmarty(View)の使用例も書かれています。

▼CakePHPでSmartyを使う方法
http://tatsuyakun.jp/2008/09/cakephpsmarty.html

そもそもなぜSmartyはsjisでは使えないのか?
Smartyのデリミタに問題があります。(「{}」←こいつら)
sjisのある文字のバイトが{}のバイトとかぶってしまう。
例えば、sjisでテンプレートファイルを作ってみてください。たぶんエラーは起こらないと思います。普通にやる分には特に問題ないんです。

(省略)

ではどうしたら良いか。
一番手っ取り早いのがSmartyのデリミタをかえてしまうこと。
先ほどのSmartyViewのsmarty.php(app\views\smarty.php)を変更します。
70行目辺りに、$this->smartyと続く箇所があると思います。そこに以下を付け足しましょう。

$this->smarty->left_delimiter = '{{';
$this->smarty->right_delimiter = '}}';

これでデリミタが変更されました。
通常だと{$var}となりますが、上記の場合、{{$var}}となります。

SmartyViewには、現在明示的にSmartyオプションを変更する仕組みがありません。直接ソースをいじってもらえば確かに変更できます。ただ、今後こちらでバージョンを上げた際にその都度修正しなければならないのは面倒ですね。

現状での設定方法として、適当なヘルパーを作って「beforeSmartyRender()」で設定する方法があります。第一引数がsmartyのインスタンスになっていますので、それを参照渡しで受け取ればrender実行前にデミリタの設定ができます。

でも、コントローラ内でSmarty設定の変更が出来る方がいいのかもしれませんね。
コントローラにビューのオプションが渡せる仕組みがあるかなと思って調べたのですが、なさそうだったので新設するしかないようです(ちなみにviewVarsは違う用途なのでNG)。その仕組みについてちょっと考えてみます。

【SmartyView】SmartyView1.2.0.7296 For CakePHP1.2

 CakePHP1.2用SmartyViewの最新版を公開いたします。

 このViewを利用することで、SmartyテンプレートをCakePHPで利用することが出来ます。
 ご利用には別途Smartyテンプレートシステムを用意する必要があります。

 Bakeryにも1.2用SmartyViewが紹介されているのですが、CakePHP1.2.0.6311betaあたりから仕様の合わない部分や不具合等がいくつかありましたので、作り直して公開しております。基本的に、アーカイブを解凍していただき、そのままのディレクトリ構造をcakeシステムに適用していただければ動作すると思いますので、導入は簡単です。是非ご利用ください。

 詳しくは、アーカイブ中のreadmeをお読みください。

※RC1版と比べ、コードはだいたい同じなのですが、ヘルパーの呼び出し方法が違う等若干異なっています(view.phpのアップデート由来です)。RC1で本バージョンを使用した場合も、おそらく動作はするとは思いますが、どのような挙動をするかまでは良く分かりませんので、一応無保証でお願いします。

ダウンロードはこちら

▼CakePHP1.2.0.7296 RC2向け
smartyview-1.2.0.7296.zip

CakePHP1.2RC1/beta版のSmartyViewは こちら で紹介しています。

【SmartyView】SmartyViewに関するTipsが公開されていました!

拙作SmartyViewに関するTipsが紹介されていました。
こういった実例はありがたいです。

▼ziegler(チーグラー) ver.6.0
[php][cakephp][smarty]cakephp 1.2 でsmartyを使う

Bakery版のリライトから始まり、今まで「viewのoutをそのままSmartyに」というシンプル指向でバージョンを上げてきましたが、確かに使いにくい部分もありますね。こういった改良も今後必要なのかなと思いました。

【SmartyView】CakePHP RC2公開とSmartyViewの影響について

CakePHPですが、RC2が発表されました。
こんなに短い期間でのアップグレードは想像していなかったんですけど…(大汗)

先日発表しました新版SmartyViewへの影響ですが、普通に使っていただく分には問題は無いと思います。ただし、いくつかの箇所で変更がなされていて、beforeHelper/afterHelperの呼ばれ方が変わったのと、viewキャッシュで、自分自身の保存をしなくなった点で挙動が変わると思われますので、近日中にRC2版のSmartyViewを制作し、公開しようと思います。

前述の通り、現状のSmartyViewを使い続けても問題はないと思います。
逆に、RC1で新版のSmartyViewを使用すると、キャッシュ絡みで影響があるかもしれません。
RC1でもRC2でも、Cacheヘルパー内にviewの自分自身を保持するプロパティが存在こそしますが、初期化もしていないですし、ほかで使われている形跡がないため、どちらのSmartyViewを使ってもシステム上は大丈夫だと思いますが、これを想定したアプリケーションを組んでいた場合、新版では互換がとれなくなるとは思います。まあこの機会に、RC1以前のバージョンでもCache:viewを使わないような変更を今のうちにしていただいた方がよろしいかと思います。

【SmartyView】SmartyView1.2.0.7119/6311 For CakePHP1.2

 CakePHP1.2用SmartyViewの最新版を公開いたします。

 このViewを利用することで、SmartyテンプレートをCakePHPで利用することが出来ます。
 ご利用には別途Smartyテンプレートシステムを用意する必要があります。

 Bakeryにも1.2用SmartyViewが紹介されているのですが、CakePHP1.2.0.6311betaあたりから仕様の合わない部分や不具合等がいくつかありましたので、作り直して公開しております。基本的に、アーカイブを解凍していただき、そのままのディレクトリ構造をcakeシステムに適用していただければ動作すると思いますので、導入は簡単です。是非ご利用ください。

 詳しくは、アーカイブ中のreadmeをお読みください。

※RC1で大きな仕様変更があったため、こちらの仕様に合わせて修正したSmartyViewを以前のバージョンのCakePHPに適用することが出来ませんが、afterSmartyRenderコールバックが呼び出されない不具合がありましたので、以前のバージョンを修正したものも合わせて公開させていただきます。6311betaを引き続きお使いの方は、SmartyView1.2.0.6311版をお使いください。

ダウンロードはこちら

▼CakePHP1.2.0.7119 RC1向け
smartyview-1.2.0.7119.zip

▼CakePHP1.2.0.6311 beta向け
smartyview-1.2.0.6311.zip

CakePHP RC2/RC3をご利用の方は こちら をご利用ください。

【SmartyView】SmartyViewリリース変更のお知らせ(続き)

 一応対策をたてまして、動作確認が出来ました。予定通り明日公開させていただきます。

 結論として、Smartyキャッシュは見送り、Viewキャッシュを有効にしました。Smartyでのキャッシュ方法をいろいろと考えていたのですが良いものが思い浮かばなかったため、今回は見送りします。
 一応裏技として、beforeSmartyRender()コールバック内でキャッシュ設定をすることで有効化することは出来ると思いますので、どうしてもSmartyキャッシュが必要の場合はそちらで対応していただけると幸いです(ただしキャッシュidを付けることが出来ないのが欠点です)。
 キャッシュ性能は、当方の貧弱なテストサーバ内で、同梱のテストページを実行した場合に、キャッシュ無しで0.1msなのがキャッシュヒットで0.01msとなったので、まあそこそこ効くのではないかと思います。

 なお、キャッシュ対応はRC1向けのバージョンのみで、beta版は省略させていただく予定です。無意味だったキャッシュ部分も削除いたします。

 今晩調整して、明日に間に合うように頑張ります。
 宜しくお願いいたします。

【SmartyView】SmartyViewリリース変更のお知らせ

 本日公開を目指して作業をしていたのですが、一つ難題を抱えてしまったので明日に延期したいと思います。

 理由は、今回のバージョンアップで削除していたViewキャッシュ部分を復活させようと思っていたのですが、残念ながら呼び出し側で標準ctp/thtml以外のファイルで呼び出された場合にこのキャッシュフラグが無効になってしまっていて、そのままでは無意味なものであることが分かったためです。当然Smartyはtplファイルのため、そのまま_renderを通すと、どんなにキャッシュを有効にする設定にしてもキャッシュされません(先ほどまでデバッグで思いっきりはまっていました)。
 現在実装方法を検討中で、呼び出しのあるメンバをオーバーライドで書き換えてしまうことで標準Viewキャッシュを有効化するか、もしくはそちらは諦めてSmartyキャッシュをちゃんと使えるようにするか、どちらでいくか悩んでいるところです。SmartyView側からユニークな情報が受け取れるようならSmartyキャッシュを実装し、そうでなかったら標準ビューキャッシュを有効化する方法で行きたいとは思うのですが、需要としてはどうなんでしょうかね? 短い時間で申し訳ございませんが、もしキャッシュを活用したい方で、ご意見等ありましたらコメントしていただけると嬉しいです。