アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

('ω') < イザユケエンジニャー

Smartyでよく使うあれこれ

メモ。

値を表示する

基本(そのまま表示)
{$hoge}

ちなみに配列の中身を表示する場合はこんな感じでドットでつないで辿ることができます。

{$hoge.fuga}
HTMLエスケープして表示する
{$hoge|escape:'html'}
改行文字をbrタグに変換して表示する
{$hoge|nl2br}
HTMLエスケープ&改行文字をbrタグに変換して表示する
{$hoge|escape:'html'|nl2br}

逆に書くと想定通りに動きません。
たぶんbrタグに変換したやつをHTMLエスケープすることになるからだと思う。

コメントアウトする

{*
ここはコメントアウトされます
HTMLでのコメントアウト <!-- --> と違ってソースにも表示されません。
*}

他のテンプレートファイルをincludeする

{include file='header.tpl'}

ヘッダ部分など、共通化しているものを呼び出すときなど。

繰り返し処理・分岐処理

foreach
{foreach from=$hoge key=k item=v}
  <!-- 配列$hogeについて繰り返し処理 -->
  <p>{$v.id} {$v.name}</p>
{/foreach}

forもあるけどsmarty内ではまず使わないので必要になったらググる

if
{if $hoge != ""}
  <!-- $hogeが空でないとき表示 -->
  {$hoge}
{/if}

条件式の書き方はたぶんPHPと同じ。

日付フォーマット

{* 現在日時 → 任意のフォーマット *}
{$smarty.now|date_format}

{* PHPで解釈可能な日付文字列 → 任意のフォーマット *}
{strtotime($datetime)|date_format:"%Y-%m-%d %H:%M:%S"}

フォーマットに使えるやつ
date_format | Smarty

フォーマット文字列の中に日本語があるとエラーになるときもある(よく調べてない)
PHPの関数も使えるので(後述)以下なら動くけど、ちょっとどうかと思う

{date("Y年m月d日 H時i分s秒", strtotime($datetime))}

PHPの関数もまあまあ使える

やりすぎると「PHPでやれ」感出てくるけど。
だいたいifの条件式に使いがちなのでサンプルコードはifとの合わせ技。

書いてたら無限に出てきそうなので、自分の中でかなり頻出なやつを。
次点でcountとかarray_columnとかも使う。

isset

PHP側で初期化しておくのがめんどくさいときに。

{if isset($hoge)} $hogeに値が渡されている {/if}
is_array

PHP側で空配列に初期化しておくのがめんどくさいときに。

{if is_array($hoge)} $hogeは配列 {/if}
in_array

わざわざPHP側で表示用の判定のためだけの値を作りたくないときに。

{if in_array($val, $array)} 配列に含まれている {/if}

あんまり関係ないメモ

プラグインを作るという手もある。
[PHP] Smartyプラグインの作り方 – 端くれプログラマの備忘録