LoginSignup
7
3

More than 5 years have passed since last update.

Smarty3で少し変化したforeach、iteration等の記述

Last updated at Posted at 2019-01-29

勤務先でももうすっかりなにかのMVCモデル + Smarty3の形が定着。
のはずが、とある新人さんのソースを見てみるとSmarty2系の記法になってる。どうして。

そんな疑問を抱きつつ「smarty foreach」なんかで検索すると以下の通り。
検索結果

なんとSmarty3系のforeach記事が1ページに出てこない。ページを切り替えても全然出てこない。
これは悲しい。今の記述方法も知って頂きたいので、以下どう違うのかを出してみました。


今の書き方(Smarty3)

Smarty3
{* PHP の構文を使ってキーにアクセスすることもできます *}
{foreach $contact as $key => $value}
  <p>{$value@index}|{$value@iteration}</p>
{/foreach}

そうですPHPの記述そのまんまです。もちろんそのまま{$key}{$value}として使えます。
iterationやらindexを取りたければ値の変数名($value)に@indexやらをつけるだけでOK。
その他のオプションは以下の通り。

  • @index
  • @iteration
  • @first
  • @last
  • @show
  • @total

その他、as キー名($key)としなくても、変数名@キー名($value@key)で取れるらしい。
PHPの記述に合わせるなら使い所はないと思いますが。


古い書き方(Smarty2)

Smarty2
{* この出力は 0|1, 1|2, 2|3, ... のようになります *}
{foreach from=$myArray key=k item=i name=foo}
  <p>{$smarty.foreach.foo.index}|{$smarty.foreach.foo.iteration}</p>
{/foreach}

古い記述方法だと、foreachに名前をつけた上でiterationやindexを取る必要があり、文字数も増えがち。
あとitemとnameで勘違いしがち。
Smarty 2.x 形式の {foreach from=$myarray key="mykey" item="myitem"} もまだ対応しています。
との事なので将来的に消えるリスクもあります。


好みの問題といえばそうだし、html_optionsの記述やら基本的な書き方とは異なりはしますが、
やはりぱっと見でわかり易いのは3かなと思います。
新しいマニュアルが検索上位に来て広まりますように。

あと{section}があまり使われませんように。:rolling_eyes:

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3