備忘録：Smarty


[Smarty マニュアル | Smarty](http://www.smarty.net/docsv2/ja/)

debug
---------------
↓これを

```php
$spam = array(
    'a' => 'あ',
    'b' => 'い',
    'c'=> array(
        'd' => 'う'
    )
);
$smarty->assing('spam', $spam);
```

↓こうして

```smarty
{$spam|@debug_print_var}
```

↓こうなる

```html
Array (3)
a => あ
b => い
c => Array (1)
 d => う
```

debug_print_var はデフォルトでは 40 文字で表示が切られてしまうけど、オプションで調節可能。
100 文字まで表示したい場合は，以下のように指定すればよい。
100 の前のオプションの 0 は，配列やオブジェクトを表示する際のインデント幅。

```smarty
{$spam|@debug_print_var:0:100}
```


if
---------------

```smarty
{if $spam eq 'a'}
    A SPAM
{elseif $spam eq 'b'}
    Ｂ SPAM
{else}
    PIYO
{/if}
```

### 比較演算子
| 比較演算子 | 代替 | 構文 | 意味 | PHPの場合 |
|:--------- |:-----|:-----|:-----|:-----|:-----|
| == | eq | $a eq $b | 等しい | == |
| === |  | $a === 0 | 同一性のチェック | === |
| != | ne, neq | $a neq $b | 等しくない | != |
| > | gt | $a gt $b | より大きい | > |
| < | lt | $a lt $b | より小さい | < |
| >= | gte, ge | $a ge $b | 以上 | >= |
| <= | lte, le | $a le $b | 以下 | <= |
| ! | not | not $a | 否定 (単項) | ! |
| % | mod | $a mod $b | 剰余 | % |
| is [not] | div by | $a is not div by 4 | 割り切れる | $a % $b == 0 |
| is [not] | even | $a is not even | 偶数である [ない] (単項) | $a % 2 == 0 |
| is [not] | even by | $a is not even by $b | 偶数番目のグループである [ない] | ($a / $b) % 2 == 0 |
| is [not] | odd | $a is not odd | 奇数である [ない] (単項) | $a % 2 != 0 |
| is [not] | odd by | $a is not odd by $b | 奇数番目のグループである [ない] | ($a / $b) % 2 != 0 |

foreach
---------------
```smarty
{foreach from=$data key=spam_key item=spam_item name=spam_data}
	{$smarty.foreach.spam_data.iteration}回目<br />
	キー => {$spam_key}<br />
    データ => {$spam_item}<br />
{foreachelse}
	データが存在しません
{/foreach}

全ループ回数：{$smarty.foreach.spam_data.total} 回
```

| 属性名 | 型 | 必須 | デフォルト | 概要 |
|:--------- |:-----|:-----|:-----|:-----|:-----|
| from | array | Yes | n/a | ループに使用する配列 |
| item | string | Yes | n/a | 現在の要素を示す変数の名前 |
| key | string | No | n/a | 現在のキーを示す変数の名前 |
| name | string | No | n/a | foreach プロパティにアクセスするための foreach ループ名 |

- name は、英数字とアンダースコアを使用して自由に命名可能。これは PHP の変数 と同じ
- 必須の属性は from と item
- {foreach} ループはネスト可能で、ネストした {foreach} の name はお互いにユニークである必要がある
- from 属性は、通常は値の配列で、 {foreach} のループ回数を決定するために使われる
- {foreachelse} は、 from 変数の値が存在しない場合に実行される
- {foreach} ループは、プロパティを操作する変数を自身で持っている
    - 例：{$smarty.foreach.name.property}：ここでの “name” は name 属性の値となる

### プロパティ
| プロパティ名 | 概要 | 
|:--------- |:-----|
| index | 現在の配列のインデックスを０（ゼロ）から数えた値 |
| iteration | 現在のループが反復された回数。 index とは異なり、常に 1 から始まる。|
| first | 現在の {foreach} の反復が最初のものであるときに TRUE となる |
| last | 現在の {foreach} の反復が最後のものであるときに TRUE となる |
| show | {foreach} のパラメータとして使用。boolean 値。<br>FALSE の場合は {foreach} は表示されず、 もし {foreachelse} が存在すれば、それが代わりに表示される。 |
| total | {foreach} がループするトータル回数。<br>これは、{foreach} の内部だけではなくループを抜けた後でも使用可能。 |


修飾子
---------------
変数の修飾子は、変数・カスタム関数・文字列を修飾しての出力が可能。
修飾子を適用するには、 変数名の後に | (パイプ) と修飾子の名前を指定する。
また、修飾子はその動作に影響を及ぼす追加のパラメータを受け入れる場合もある。そのパラメータは修飾子の後に続き、: (コロン) によって区切られる。 
また、すべての PHP関数は、暗黙的に修飾子として使用でき、修飾子は組み合わせることも可能。

| 修飾子 | パラメータの位置 | 型 | 必須 | デフォルト | 概要 |
|:--------- |:--------- |:-----|:-----|:-----|:-----|:-----|
| default | 1 | string | No | empty | 変数が空の場合に表示されるデフォルト値 |

### 修飾子として良く使うPHP関数

| 修飾子 | 概要 |
|:--------- |:-----|
| number_format | カンマをつけて出力させる |


```smarty
{$num|number_format}
```