MW211 EXIT

devlog
Smarty/エラーログ
2018年05月11日
「Notice:  Undefined index: 変数 in ~」
Smartyにて、上記のような変数未定義エラーなど様々なエラーがあるが、
それをエラーログに出して、確認できないかと考えた。

よくよく調べてみたら、これらはPHPのエラーなので、
PHPのエラーログに出力されている。

よって、PHPのエラーログを見ればよいのだ。

エラーログは、「php.ini」に以下のような定義があるので、それを参照のこと。
┌──────────────────────────────────────┐
│error_log = PHPのエラーログの出力先                                         │
└──────────────────────────────────────┘
分類:Smarty
Smarty/変数未定義補填
2018年05月10日
┌──────────────────────────────────────┐
│{if $is他条件}{assign var="変数" value="0"}{/if}                            │
│                                                                            │
│{$変数}                                                                     │
└──────────────────────────────────────┘
上記のような場合、「$is他条件」が「false」だと、
「$変数」が未定義となりエラーとなる。
「Notice:  Undefined index: 変数 in ~」

こういった場合には、以下のように「isset()」で存在を判定して
補填してあげればよい。
┌──────────────────────────────────────┐
│{if !isset($変数)}{assign var="変数" value="0"}{/if}                        │
└──────────────────────────────────────┘

こんな感じになる
┌──────────────────────────────────────┐
│{if $is他条件}{assign var="変数" value="0"}{/if}                            │
│                                                                            │
│{if !isset($変数)}{assign var="変数" value="0"}{/if}                        │
│{$変数}                                                                     │
└──────────────────────────────────────┘
分類:Smarty
Smarty/変数
2018年05月09日
Smartyテンプレート中で変数を定義して使用する方法は以下の通り。
┌────┬─────────────────────────────────┐
│値の代入│{assign var="変数" value="値"}                                    │
├────┼─────────────────────────────────┤
│値の出力│{$変数}                                                           │
└────┴─────────────────────────────────┘
値を代入する時には「$」が要らない点に注意。

値を代入する際に、別変数を参照する場合には、{}をネストしてもよいし
そのまま変数を直書きしてもよい。
なお、{}の代わりに``も使える。
┌────┬─────────────────────────────────┐
│値の代入│{assign var="変数" value="$別変数"}                               │
├────┼─────────────────────────────────┤
│値の代入│{assign var="変数" value="{$別変数}"}                             │
├────┼─────────────────────────────────┤
│値の代入│{assign var="変数" value="`$別変数`"}                             │
└────┴─────────────────────────────────┘

なお、修飾子(escape修飾子など)をつける場合には、囲いが必要。
┌────┬─────────────────────────────────┐
│値の代入│{assign var="変数" value="{$別変数|escape}"}                      │
├────┼─────────────────────────────────┤
│値の代入│{assign var="変数" value="`$別変数|escape`"}                      │
└────┴─────────────────────────────────┘
囲わずに直書きすると、変数+「|escape」という文字列に解釈されてしまう。
分類:Smarty
Smarty/置換
2018年05月08日
下記のような感じで置換ができる。
┌──────────────────────────────────────┐
│{$変数|replace:'置換前':'置換後'}                                           │
└──────────────────────────────────────┘

他との併用も可能。
┌──────────────────────────────────────┐
│{$変数|replace:'置換前':'置換後'|escape}                                    │
└──────────────────────────────────────┘

なお、あくまでPHP上で置換するので、「\→\\」の置換は以下のように倍になる。
┌──────────────────────────────────────┐
│{$変数|replace:'\\':'\\\\'}                                                 │
└──────────────────────────────────────┘
分類:Smarty
Smarty/出力結果を変数に格納
2018年05月07日
┌──────────────────────────────────────┐
│$smarty = new Smarty;                                                       │
│$smarty->display('テンプレート.tpl');                                       │
└──────────────────────────────────────┘
通常は、上記のように出力するのだが、
どういう結果なのかログで確認したりしたくて変数に代入したい場合。

display()をfetch()に切り替えてあげればよい。
┌──────────────────────────────────────┐
│$smarty = new Smarty;                                                       │
│$変数 = $smarty->fetch('テンプレート.tpl');                                 │
└──────────────────────────────────────┘
分類:Smarty
Smarty/gettext連携
2016年12月07日
Smartyで「_()」関数を使用する方法。
テンプレートにて以下のいずれかの記述を行う。
┌──────────────────────────────────────┐
│{_('文字')}                                                                 │
├──────────────────────────────────────┤
│{'文字'|_}                                                                  │
├──────────────────────────────────────┤
│{gettext('文字')}                                                           │
├──────────────────────────────────────┤
│{'文字'|gettext}                                                            │
└──────────────────────────────────────┘
プラグインを使うという手もある。
分類:Smarty
Smarty/gettext()
2015年08月13日
多言語変換の」gettext()」は、翻訳対象を「_()」で囲えばよい。

では、Smartyの場合はどうか。

変数の場合。
┌────────────────┬─┬────────────────┐
│{$変数|escape}                  │→│{_($変数)|escape}               │
└────────────────┴─┴────────────────┘

定数の場合。
┌────────────────┬─┬────────────────┐
│定数                            │→│{_('定数')}                     │
└────────────────┴─┴────────────────┘
もう少しスマートなやり方がありそう。
分類:Smarty
Smarty/ループインデックス
2014年04月04日
┌──────────────────────────────────────┐
│{foreach name=ループ名 from=$配列 key=no item=value}{/foreach}              │
└──────────────────────────────────────┘
上記のようなループ文の場合、ループインデックスは、
以下のような定数で取得することができる。
┌───────────────┬──────────────────────┐
│0オリジンのループインデックス │$smarty.foreach.ループ名.index      →0,1,…│
├───────────────┼──────────────────────┤
│1オリジンのループインデックス │$smarty.foreach.ループ名.iteration  →1,2,…│
└───────────────┴──────────────────────┘
なお、データ(連想配列の添字)は「key=no」で指定した「$no」で取得できる。
分類:Smarty
Smarty/JavaScriptのベタ書きはちょっと
2013年06月23日
┌──────────────────────────────────────┐
│if (true) {                                                                 │
│    alert("メッセージ");                                                    │
│}                                                                           │
└──────────────────────────────────────┘
上記のようなif文を、一直線に書きたい衝動にかられることがある。
┌──────────────────────────────────────┐
│if (true) {alert("メッセージ");}                                            │
└──────────────────────────────────────┘
if文がいくつも並ぶ場合には行比較の観点からも便利な場合がある。

しかし、これをSmartyテンプレート上で行ってはいけない。
なぜなら「{~}」はSmartyではSmarty変数等を記述する領域だからだ。
つまり「{alert("メッセージ");}」の部分を誤認識してしまう。

解決策としては最初のように改行して一直線に「{…}」とならないようにするか、
JavaScriptのソースファイルを外部ファイルとしてしまうかだ。
分類:Smarty
Smarty/コメントの改行が変わった
2013年04月08日
「Smarty3.1.7」から仕様が変わったらしく、コメントの改行の扱いが違う。
┌──────────────────────────────────────┐
│{**************}                                                            │
│{*  コメント  *}                                                            │
│{**************}                                                            │
│<HTML>                                                                      │
└──────────────────────────────────────┘
上記みたいなコメントを付けた場合

「Smarty3.1.6」だと、隙間は空かないが、
┌──────────────────────────────────────┐
│<HTML>                                                                      │
└──────────────────────────────────────┘

「Smarty3.1.7」だと、隙間が空いてしまう。
┌──────────────────────────────────────┐
│                                                                            │
│                                                                            │
│                                                                            │
│<HTML>                                                                      │
└──────────────────────────────────────┘

以下だと、「Smarty3.1.7」でも隙間が空かない。(…けどね)
┌──────────────────────────────────────┐
│{***************                                                            │
│**  コメント  **                                                            │
│****************}<HTML>                                                     │
└──────────────────────────────────────┘
分類:Smarty
前へ 1 2 3 次へ