MW211 EXIT

devlog
Smarty/書式付き数値
2012年10月05日
Smartyで「1.0%」的な形式で表示する方法
┌──────────────────────────────────────┐
│{$変数|string_format:'%.1f'|escape}%                                        │
└──────────────────────────────────────┘
分類:Smarty
Smarty/続・textareaタグを使う場合の注意
2012年09月10日
┌──────────────────────────────────────┐
│<textarea>{$初期値}</textarea>                                              │
└──────────────────────────────────────┘
てやると、先頭の空改行が削除されていくという問題があったが、
┌──────────────────────────────────────┐
│<textarea>                                                                  │
│{$初期値}                                                                   │
│</textarea>                                                                 │
└──────────────────────────────────────┘
今度は上記のようにすると、末尾に空改行が追加されていくという
対照的な事象があることがわかった。

ってことで、最適解は以下の形のようだ。
┌──────────────────────────────────────┐
│<textarea>                                                                  │
│{$初期値}</textarea>                                                        │
└──────────────────────────────────────┘

…う~ん、なんか不恰好。
分類:Smarty
Smarty/文字の切り出し
2012年08月06日
Smartyで文字を部分的に抜き出す方法。

例えば、2文字目(ゼロオリジン)から4文字切り出すにはこう。
┌──────────────────────────────────────┐
│{$変数|substr:2:4}                                                          │
└──────────────────────────────────────┘

…リファレンスには載ってないような。。。

標準的なプラグインみたいですね。
分類:Smarty
Smarty/ゼロパディング
2012年07月28日
数値2桁(00)の場合は、以下のような感じ。
┌──────────────────────────────────────┐
│{$値|string_format:'%02d'}                                                  │
└──────────────────────────────────────┘
ま、printf()と要領は一緒やね。

サニタイズしたい時など、他の修飾子がある場合は、並べて書くだけ。
┌──────────────────────────────────────┐
│{$値|string_format:'%02d'|escape}                                           │
└──────────────────────────────────────┘
分類:Smarty
Smarty/一覧を横に並べる
2012年06月16日
テーブルを四行毎に改行して、二列に並べたい場合の例は以下のとおり。
┌──────────────────────────────────────┐
│{section name=列 start=1 loop=2+1}                                          │
│{if ($配列|@count) > (($smarty.section.列.index - 1) * 4)}                  │
│                                                                            │
│<table>                                                                     │
│                                                                            │
│{foreach name=データ from=$配列 key=KEY item=VALUE}                         │
│{if ($smarty.foreach.データ.index <  ($smarty.section.列.index       * 4))  │
│ && ($smarty.foreach.データ.index >= (($smarty.section.列.index - 1) * 4))} │
│                                                                            │
│<tr>…</tr>                                                                 │
│                                                                            │
│{/if}                                                                       │
│{/foreach}                                                                  │
│                                                                            │
│</table>                                                                    │
│                                                                            │
│{/if}                                                                       │
│{/section}                                                                  │
└──────────────────────────────────────┘
もう少し改善したいものだ。
分類:Smarty、【未解決】
Smarty/Smarty変数
2012年03月20日
主なSmarty変数は以下のとおり。
┌───────────────────┬──────────────────┐
│{*コメント*}                          │出力時に完全に無視される            │
│{$変数}                               │                                    │
│{$配列[添字]}                         │                                    │
│{$連想配列.要素}                      │$連想配列['要素']のこと             │
│{$連想配列.$変数}                     │$連想配列[$変数]のこと              │
├───────────────────┼──────────────────┤
│{$オブジェクト->プロパティ}           │                                    │
│{$オブジェクト->メソッド($変数)}      │                                    │
├───────────────────┼──────────────────┤
│{assign var=変数 value='値'}{$変数}   │変数の中身をテンプレートでも定義可  │
│{"値"}                                │値をそのまま表示できる              │
├───────────────────┼──────────────────┤
│{$smarty.get.GET変数}                 │$_GET['GET変数']のこと              │
│{$smarty.post.POST変数}               │$_POST['POST変数']のこと            │
│{$smarty.cookies.COOKIE変数}          │$_COOKIE['COOKIE変数']のこと        │
│{$smarty.server.サーバ変数}           │$_SERVER['サーバ変数']のこと        │
│{$smarty.env.環境変数}                │$_ENV['環境変数']のこと             │
│{$smarty.request.REQUEST変数}         │$_REQUEST['REQUEST変数']のこと      │
│{$smarty.session.SESSION変数}         │$_SESSION['SESSION変数']のこと      │
├───────────────────┼──────────────────┤
│{$smarty.now}                         │タイムスタンプ                      │
│{$smarty.const.定数}                  │「define('定数','値');」の値のこと  │
│{$smarty.config.config変数}           │configファイルに定義した変数        │
│{#config変数#}                        │{$smarty.config.config変数}と同じ   │
│{$smarty.template}                    │テンプレート名                      │
│{$smarty.version}                     │Smartyのバージョン                  │
│{$smarty.ldelim}                      │デミリッタ(左)                      │
│{$smarty.rdelim}                      │デミリッタ(右)                      │
│{ldelim}                              │{$smarty.ldelim}と同じ              │
│{rdelim}                              │{$smarty.rdelim}と同じ              │
└───────────────────┴──────────────────┘
分類:Smarty
Smarty/textareaタグを使う場合の注意
2012年03月08日
Smartyでtextareaタグ中に初期値を表示する場合に
以下のように続けて書くとダメ。
┌──────────────────────────────────────┐
│<textarea>{$初期値}</textarea>                                              │
└──────────────────────────────────────┘

なぜなら、その値の先頭に空改行が意図的に混じっていた場合、
textareaタグ直後の改行ということで無視されてしまうのだ。

「参照→そのまま更新→参照→そのまま更新→…」を繰り返すと
先頭の空改行がだるま落としの如く一行ずつ減っていってしまう。

これを解消するには、textareaタグの後に必ず改行を入れてあげる。
┌──────────────────────────────────────┐
│<textarea>                                                                  │
│{$初期値}                                                                   │
│</textarea>                                                                 │
└──────────────────────────────────────┘
分類:Smarty
Smarty/先頭一文字だけ出力
2012年01月07日
テーブルの列幅が限られていて、先頭一文字だけ出力して
全文はカーソルをそこにあわせることにより、コメント的に表示させる…
なんてテクニックをSmartyで簡単にやる方法。
┌──────────────────────────────────────┐
│<td title="{$xxxx|escape}">{$xxxx|truncate:1:'':true|escape}</td>           │
└──────────────────────────────────────┘
分類:Smarty
Smarty/テンプレート部品のアサイン
2011年12月23日
テンプレートのヘッダ部(header.tpl)とフッタ部(footer.tpl)を共通にして
それぞれのテンプレートからアサインする方法は以下の通り。
┌──────────────────────────────────────┐
│{include file='header.tpl'}                                                 │
│:                                                                          │
│{include file='footer.tpl'}                                                 │
└──────────────────────────────────────┘
PHPの「require」と同じでソースがベタに展開される。
当該テンプレートに「ヘッダ変数・フッタ変数」が記述されていなくても
「include」された先に定義があれば、記述したのと同じような感じになる。

なので、以下のような流れになるだろう。
┌──────────────────────────────────────┐
│$smarty = new Smarty;                                                       │
│$smarty->assign('ヘッダ変数', 値);                                          │
│$smarty->assign('フッタ変数', 値);                                          │
│$smarty->display('テンプレート.tpl');                                       │
├──────────────────────────────────────┤
│{include file='header.tpl'}                                                 │
│:                                                                          │
│{include file='footer.tpl'}                                                 │
└──────────────────────────────────────┘

一方、fetchメソッドを使えば、部分ごとに出力結果を確定させてしまうことができ、
この結果をまとめると上記と同様な感じになる。
┌──────────────────────────────────────┐
│$smarty = new Smarty;                                                       │
│$smarty->assign('ヘッダ変数', 値);                                          │
│$header = $smarty->fetch('header.tpl');                                     │
├──────────────────────────────────────┤
│$smarty = new Smarty;                                                       │
│$smarty->assign('フッタ変数', 値);                                          │
│$footer = $smarty->fetch('footer.tpl');                                     │
├──────────────────────────────────────┤
│$smarty = new Smarty;                                                       │
│$smarty->assign('header', $header);                                         │
│$smarty->assign('footer', $footer);                                         │
│$smarty->display('テンプレート.tpl');                                       │
├──────────────────────────────────────┤
│{$header}                                                                   │
│:                                                                          │
│{$footer}                                                                   │
└──────────────────────────────────────┘

前者と後者の違いは、後者はfetchしてしまうと確定してしまうので、
assignしても効果がない(つまり後で(←処理中の話)変更がきかない)。
しかし、後者の大きな利点は変数のスコープが絞り込まれるので
変数名の自由度が高くなるところ。
ローカル変数とグローバル変数の違いのようなもんだ。
分類:Smarty
Smarty/変数に値を入れる
2011年12月22日
┌──────────────────────────────────────┐
│$smarty->assign('変数', '織田信長');                                        │
├──────────────────────────────────────┤
│あなたの名前は「{$変数}」です。                                             │
└──────────────────────────────────────┘
assignメソッドで、出力先とそこに出力する値を指定するのが
オーソドックスなやり方だ(と思う)。

配列を一気にそれをやる方法もある。
┌──────────────────────────────────────┐
│$配列['変数'] = '織田信長';                                                 │
│$smarty->assign($配列);                                                     │
├──────────────────────────────────────┤
│あなたの名前は「{$変数}」です。                                             │
└──────────────────────────────────────┘
これでも同じ。
引数が減るのでちょっと違和感があるが、これでもOK。

こうしてみると、assignメソッドにおいて「$変数」ではなく「'変数'」なのが
わかるような気がする(配列の添字の「'変数'」と対応してるね)。
分類:Smarty
前へ 1 2 3 次へ