Published on

smartyのforeachでのindex

Authors

画像を表示して、その下に登録している画像の枚数分のリンクを表示させるsmartyのコードです。忘れないようにメモしておきます。

{if $num == ''}
    {assign var="num" value="1"}
{/if}

{assign var="num" value="\`$num-1\`"}
<img src="{$foo\[$num\]}" /><br />

foreach from="$myArray" item="foo" name="loop"}
    {if $smarty.foreach.loop.index < 3 }
        {if $num != $smarty.foreach.loop.index}
            <a href="item.php?id={$myId}&num={$smarty.foreach.loop.iteration}">
        {/if}
        {$smarty.foreach.loop.iteration}{if $num != $smarty.foreach.loop.index}</a>{/if}
    {/if}
{/foreach}

assign

assignは、テンプレート変数をテンプレート実行時に代入するもの。

assign var=“num” value=“1”

numという変数に1を代入しています。

foreach

foreachは連想配列をループします。smartyとかphpとかを始めた時にこのforeachがどういうことなのかを理解するのにものすごく苦労しましたが、初心者に説明しろと言われても未だにいまく説明できません。

{if $smarty.foreach.loop.index < 3 }
    {if $num != $smarty.foreach.loop.index}
        <a href="item.php?id={$myId}&num={$smarty.foreach.loop.iteration}">
    {/if}
    {$smarty.foreach.loop.iteration}{if $num != $smarty.foreach.loop.index}</a>{/if}
{/if}

index

今日忘れないように一番書いておきたいことが、このindex(インデックス)です。 配列をゼロから数えた値がこのインデックスです。

iteration

現在のループが反復された回数を表示するのがiteration(イテレーション)です。 indexとは異なり、常に1から始まります。各ループごとに1ずつ加算されます。

 

他にfirst、last、show、totalなどがありますが、また使う機会があれば書こうと思います。