2010/04/29

PHP:: Smarty 導入メモ

テンプレエンジンSmartyを導入した際のメモ。

★ループ処理
テンプレ内で同じ処理を行う場合に{foreach}~{/foreach}を使えば非常に楽です。
記述方法はいろいろあるので、詳しくはマニュアルを参考に。

※クラシックASPを使っている時は、自作でやってましたので開発が楽すぎます。

★キャッシュ機能
運用時のオーバヘッドを軽減するため、キャッシュ機能を使うことができます。
設定例は以下の通り。

$smarty->caching = 1;
$smarty->compile_check = false; //テスト:true 運用:false
$smarty->cache_lifetime = 600; //秒単位

★テンプレ内の中カッコ{}
テンプレート内に中カッコ{}があれば全て置換対象となります。
そのため、javascriptやCSSで使う中カッコ{}を除外にしたい箇所を{literal}~{/literal}で囲みます。

※この仕様があるのが分からなくて四苦八苦しました。

★escape処理
PHP内でhtmlspecialcharsを使わず、テンプレ内に{$xxx|escape}と記述することでエスケープ処理が出来ます。
※htmlspecialcharsは、XSS(クロス・サイト・シクリプティング)などの対策に役立ちます。

★変数の装飾子
↑のescape処理もそうですが、Smartyには変数の装飾子を指定することでフォーマット変換ができます。

{$xxx|escape}・・・HTMLタグをエスケープ
{$xxx|nl2br}・・・改行コードを<br />に置き換える
{$xxx|strip}・・・空白を除去
{$xxx|strip_tags}・・・タグをを除去
{$xxx|default:''}・・・変数が空の場合に表示されるデフォルト値
{$xxx|date_format:"%Y-%m-%d %H:%M"}・・・日付フォーマットを指定
※詳しくはこちらを参照

一括適用したい場合は、$smarty->default_modifiers=array('escape:html', 'default:""', 'nl2br');と記述することで対応できます。
※ただし、変数が配列やオブジェクトだとダメみたい。ちょっと古い記事に書かれていました(最新バージョンではどうなってるんだろうか・・・)

2010.05.24 Update!!!
★変数をテンプレートとして扱う
{eval var=$foo}
※$fooには変数が記載された文字列

2010.05.30 Update!!!!
★PHPの定義変数をsmarty上から使う
{$smarty.const.define_name}

★リクエスト変数($_GETや$_POST)の取得
{$smarty.get.param | escape}
{$smarty.post.param | escape}
※リクエスト変数をそのまま使うのは危険なため、escape属性をつけましょう。

2010.06.1 Update!!!
★テンプレ内での計算
{math equation=a-b a=$max b=$smarty.foreach.results.index}

2010.12.11 Update!!!
ループ処理は{foreach}以外に{section}があります。
データ配列の最後から表示したり、ループ回数の制限などが可能です。
{section name=セクション名 loop=$データ配列 step=開始位置}
{$データ配列名[セクション名].xxx}
{/section}
開始位置を-1にすると、データの最後から表示されます。
詳しくはphpproを見ましょう。
スポンサーリンク

スポンサーリンク