Smarty

インクルード先tplファイルの変数にアクセス

インクルード先(inc.tpl) {~$array = array('a', 'b', 'c')~} インクルード元 {~include file="inc.tpl" scope=parent~} {~print_r($array)~}

Smarty3のtplファイル内でhtmlファイルを無理矢理インクルード

.tpl {include_php file='../assets/includes/footer.html'} Smarty継承クラス allow_php_tag = true;

onclickにSmartyから文字列を渡す場合のエスケープ処理

default_modifiersでhtmlを設定している場合 'quotes'だけでOK {~$tmp|escape:'quotes'~} default_modifiersでhtmlを設定していない場合 'quotes'→デフォルト('html')の二重 {~$tmp|escape:'quotes'|escape~} テストコード {~nocache~} <script type="text/javascript"> "); document…

default_modifiersのnodefaults

Smarty2から3になったことで仕様が変更された模様。 日本語マニュアル http://www.smarty.net/docs/ja/variable.default.modifiers.tpl では{$var|smarty:nodefaults}となっており、一見Smarty2と同じに見えるが、 英語マニュアル http://www.smarty.net/doc…

自分自身のファイル名をパス抜きで取得

PHP

foreach内でbreak

{foreach from=$info item="line" name="info"} {if 3 == $smarty.foreach.info.iteration} {break} {/if} {/foreach}

文字列と変数を連結

{$date = "`$y|escape`-`$m|escape`-`$d|escape`"} 右辺はダブルコーテーションで囲まないといけないっぽい。 シングルコーテーションでは動作しなかった。

escapeした文字列をonclickなんかに放り込むとシングルクォートが衝突しちゃってあら大変ですねー対策

$hogeがシングルクォートを含んでいる場合、escapeしただけでは"になって衝突してしまう。 <a href="#" onclick="hoge('{$hoge|escape:'quotes'}');">ほげ</a> しかし上記の様にescape:'quotes'と解決。やったね!

2.6.26→3.0.6に移行したときのトラブルメモ

__autoload()が使えない Smarty3はspl_autoload_register()を使用しているので、__autoload()を使うと衝突してエラーとなる。 こちらもspl_autoload_register()を使いましょう。 テンプレート内で未宣言の変数に対してNoticeエラーが出る Fetch前後で一時的…

変数に文字列を連結

標準で用意されているcat修飾子を使うとその場で表示されてしまったり、1つづつしか連結できないので正直使いにくい。 以下の方法だと一度に好きなだけ連結できる。 条件が真になれば変数$schoolYearの末尾に文字列を追加してるんだけど、毎回assignしてて正…

テンプレート内で変数を定義

{assign var="disabled" value=' disabled="disabled"'} {$disabled}で表示できる。 文字列と変数の連結 {assign var="hoge" value="hoge`$fuga`"} バッククォート(`)で囲むことで文字列と変数を連結できる。 変数同士の連結 {assign var="hoge" value=`$h…

@(アットマーク)の意味

配列に対して修飾子を用いた場合は、その配列に格納された全ての値に影響を及ぼします。 配列全体を1つの値として作用させるには修飾子の先頭に @ 記号をつける必要があります。 例:{$articleTitle|@count} - これは、 配列 $articleTitle の要素数を、php …

print_r的な備忘録::デバッグ用

{$hoge|@debug_print_var}

プラグインを入れるディレクトリを変更する

デフォルトではSMARTY_DIR以下の「/plugins」になっているけれど、自作プラグインもそこに突っ込むと分けわかんなくなるので、別にフォルダ作って分けちゃおうよ!みたいな。 Smarty_baseクラスを継承したクラス内で plugins_dir = array ( 'hoge/mupplugins…

foreachメモ

{foreach from=$array item="line" name="lineName" key="key"} {if $smarty.foreach.lineName.first} 最初:{$key}…{$line} {elseif $smarty.foreach.lineName.last} 最後:{$key}…{$line} {else} 中間:{$key}…{$line} {/if} {/foreach}

日付メモ

{$smarty.now|date_format:'%Y-%m-%d %H:%M:%S'} ↓ 2009-04-16 16:42:05 formで使うサンプル <input type="text" name="datetimes_y" size="4" maxlength="4" value="{~$smarty.post.datetimes_y|escape|default:($smarty.now|date_format:'%Y')~}" />年