【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】導入方法が紹介されていました” への2件の返信

  1. だいぶ返事遅れました。
    SmartyもCakeも詳しくないのでこんなやり方があるとは知りませんでした。(ソース改変方法なんて紹介してすみません)

    趣味で携帯サイトばっか作ってます。次に作るサイトではSmartyView是非使わせて頂きます。ほんと助かってます^^。ありがとうございます。

  2. いえいえ、もともとコード改変には問題のないものですし、こういった事例を書いていただけて大変に嬉しく思います。

    サイト制作の方頑張ってくださいね!

コメントは受け付けていません。