最低限Smartyタグ

smartyテンプレート使ってると、「アレ?アレなんだっけアレアレ!」てなる。

最低限これだけ見ておれば出来るアレ。

文字列調整

文字数を代入する {assign var=変数名 value=登録内容}

{assign var=foo value="あいうえおかきくけこさしすせそ"}

文字数を調整する {変数|mb_strimwidth:始位置:数:省略字:エンコード}

{assign var=foo value="あいうえおかきくけこさしすせそ"}
{$foo|mb_strimwidth:0:5:"…":utf8|escape}

この結果は『あいうえお…』

タグ生成系

※下記PHP側で$XXX = YYY;て書いている場合は、$smarty->assign('XXX',$XXX);すること前提。
※styleやidやsizeなど生成されるタグに付けたい場合、下記のようにsmartyタグに付ければ良い

{html_options name=aaa options=$bbb selected=$ccc id="ddd" style="margin:5px;" multiple="multiple"}

プルダウン {html_options name=タグname options=内容 selected=選択値}

PHP側

$param_options = array(1=>'aaa',2=>'bb',33=>'ccc');
$select_value = 2;

テンプレート側

{html_options name=send_name options=$param_options selected=$select_value}

<select name="send_name">
<option label="aaa" value="1">aaa</option>
<option label="bb" value="2" selected="selected">bb</option>
<option label="ccc" value="33">ccc</option>
</select>

こういう表示になる

内容補填型プルダウン {html_options name=タグname options=内容 selected=選択値}

『未選択』という項目を追加したい場合、必要な部分だけ追加することが出来る。
PHP側

$param_options = array(1=>'aaa',2=>'bb',33=>'ccc');
$select_value = 2;

テンプレート側

<select name="send_name">
<option label="-未選択-" value="">-未選択-</option>
{html_options options=$param_options selected=$select_value}
</select>

<select name="send_name">
<option label="-未選択-" value="">-未選択-</option>
<option label="aaa" value="1">aaa</option>
<option label="bb" value="2" selected="selected">bb</option>
<option label="ccc" value="33">ccc</option>
</select>

注意するべきは『name』を抜くこと。

グループ型プルダウン {html_options name=タグname options=内容 selected=選択値}

『未選択』という項目を追加したい場合、必要な部分だけ追加することが出来る。
PHP側

$param_options['test1'] = array(1=>'aaa',2=>'bb',33=>'ccc');
$param_options['test2'] = array(55=>'ddddd',100=>'eeee');
$select_value = array(2,55);

テンプレート側

{html_options name=send_name multiple=multiple options=$param_options selected=$select_value}

<select name="send_name" multiple="multiple">
<optgroup label="test1">
<option label="aaa" value="1">aaa</option>
<option label="bb" value="2" selected="selected">bb</option>
<option label="ccc" value="33">ccc</option>
</optgroup>
<optgroup label="test2">
<option label="ddddd" value="55" selected="selected">ddddd</option>
<option label="eeee" value="100">eeee</option>
</optgroup>
</select>

ラジオボタン {html_radios name=タグname options=内容 selected=選択値}

PHP側

$param_options = array(1=>'aaa',2=>'bb',33=>'ccc');
$select_value = 2;

テンプレート側

{html_radios name=send_name options=$param_options selected=$select_value}

<label><input type="radio" name="send_name" value="1" />aaa</label>
<label><input type="radio" name="send_name" value="2" checked="checked" />bb</label>
<label><input type="radio" name="send_name" value="33" />ccc</label>

こういう表示になる

因みに

separator='<br />'

をSmartyタグに追加すると、各『>/label<』の後ろに『>br /<』が付く。

チェックボックス {html_checkboxes name=タグname options=内容 selected=選択値}

PHP側

$param_options = array(1=>'aaa',2=>'bb',33=>'ccc');
$select_value = array(2,33);

テンプレート側

{html_checkboxes name=send_name options=$param_options selected=$select_value}

<label><input type="checkbox" name="send_name[]" value="1" />aaa</label>
<label><input type="checkbox" name="send_name[]" value="2" checked="checked" />bb</label>
<label><input type="checkbox" name="send_name[]" value="33" checked="checked" />ccc</label>

こういう表示になる

因みに

separator='<br />'

をSmartyタグに追加すると、各『>/label<』の後ろに『>br /<』が付く。

繰り返し

内容(配列)から生成型 {foreach~}~{/foreach}

PHP側

$param_options = array(1=>'aaa',2=>'bb',33=>'ccc');

テンプレート側

{foreach name=l_name from=$param_options item=l_item key=l_key}
{if $smarty.foreach.l_name.first}最初のループ<br />{/if}
{if $smarty.foreach.l_name.last}
最後のループ<br />
total(合計値):{$smarty.foreach.l_name.total}<br />
{/if}
key:{$l_key}<br />
item:{$l_item}<br />
index(0~):{$smarty.foreach.l_name.index}<br />
iteration(1~):{$smarty.foreach.l_name.iteration}<br />
<br />
{foreachelse}
中身が無い場合表示されるもの
{/foreach}

最初のループ<br />key:1<br />
item:aaa<br />
index(0~):0<br />
iteration(1~):1<br />
<br />
key:2<br />
item:bb<br />
index(0~):1<br />
iteration(1~):2<br />
<br />
最後のループ<br />
total(合計値):3<br />
key:33<br />
item:ccc<br />
index(0~):2<br />
iteration(1~):3<br />
<br />

こういう表示になる

内容(配列)から生成型 {section~}~{/section}

PHP側

$param_options = array('aaa','bb','ccc');

テンプレート側

{section name=l_name loop=$param_options}
{if $smarty.section.l_name.first}最初のループ<br />{/if}
{if $smarty.section.l_name.last}
最後のループ<br />
total(合計値):{$smarty.section.l_name.total}<br />
{/if}
index_prev(前):{$smarty.section.l_name.index_prev}<br />
index_next(後):{$smarty.section.l_name.index_next}<br />
index:{$smarty.section.l_name.index}<br />
iteration:{$smarty.section.l_name.iteration}<br />
rownum:{$smarty.section.l_name.rownum}<br />
loop:{$smarty.section.l_name.loop}<br />
{$param_options[l_name]}<br />
<br />
{sectionelse}
中身が無い場合表示されるもの
{/section}

最初のループ<br />index_prev(前):-1<br />
index_next(後):1<br />
index:0<br />
iteration:1<br />
rownum:1<br />
loop:3<br />
aaa<br />
<br />
index_prev(前):0<br />
index_next(後):2<br />
index:1<br />
iteration:2<br />
rownum:2<br />
loop:3<br />
bb<br />
<br />
最後のループ<br />
total(合計値):3<br />
index_prev(前):1<br />
index_next(後):3<br />
index:2<br />
iteration:3<br />
rownum:3<br />
loop:3<br />
ccc<br />
<br />

こういう表示になる
※連想配列は使えない。0スタートの配列でないと{$param_options[l_name]}で値が取れない。

回数指定形(for的な使い方) {section~}~{/section}

テンプレート側

{section name=l_name start=1 loop=10 step=2 max=3}
{if $smarty.section.l_name.first}最初のループ<br />{/if}
{if $smarty.section.l_name.last}
最後のループ<br />
total(合計値):{$smarty.section.l_name.total}<br />
{/if}
index_prev(前):{$smarty.section.l_name.index_prev}<br />
index_next(後):{$smarty.section.l_name.index_next}<br />
index:{$smarty.section.l_name.index}<br />
iteration:{$smarty.section.l_name.iteration}<br />
rownum:{$smarty.section.l_name.rownum}<br />
loop:{$smarty.section.l_name.loop}<br />
<br />
{sectionelse}
中身が無い場合表示されるもの
{/section}

最初のループ<br />index_prev(前):-1<br />
index_next(後):3<br />
index:1<br />
iteration:1<br />
rownum:1<br />
loop:10<br />
<br />
index_prev(前):1<br />
index_next(後):5<br />
index:3<br />
iteration:2<br />
rownum:2<br />
loop:10<br />
<br />
最後のループ<br />
total(合計値):3<br />
index_prev(前):3<br />
index_next(後):7<br />
index:5<br />
iteration:3<br />
rownum:3<br />
loop:10<br />
<br />

※start(初期値)、step(刻み)、max(最大値)は別に書かなくてもイイ
※for的な使い方が出来る

雑談

他のテンプレートの種類

OSSとかCMSとかフレームワークとか結構Smartyだし
PHPといえば、『Smarty』と思い勝ちだから
実はこんなにあるんだぜ、ってことでリストUPしてみた。

※あくまでリスト。説明は割愛するので、各々調べてくださいな。

コメント

タイトルとURLをコピーしました