2011-01-05 6 views
13

私は通常、スマイな男ではないので、私はちょっと立ち往生しています。Smarty変数を増やすにはどうすればいいですか?

配列のインデックスをエコーし​​たいのですが、エコーするたびにインクリメントしたいと思います。

これは私が持っているものですが...

<ul> 
    {foreach from=$gallery key=index item=image} 
    <li> 
     <img src="{$image}" alt="" id="panel-{$index++}" /> 
    </li> 
    {/foreach} 
</ul> 

それは動作しません。

アレイをSmartyに渡す前に、アレイを前処理する最も良い方法はありますか?

Smartyを使用してこれを行う方法はありますか?

+2

しかし、あなたは、foreachループから 'index'を取得するので、実際にはちょうど1つのみであることを意味しますか? – mario

+0

@marioええ、それは私が欲しいものです。 – alex

+0

また、インデックスの代わりに '{counter start = 1}'を使うこともできます。 – mario

答えて

23

あなたは次のように行うことができます。ゼロからスタート

<ul> 
    {foreach from=$gallery key=index item=image name=count} 
    <li> 
     <img src="{$image}" alt="" id="panel-{$smarty.foreach.count.index}" /> 
    </li> 
    {/foreach} 
</ul> 

を、indexは、現在の配列インデックスです。

おそらく、単にあなたがそうのように、counterを使用することができますforeachループのcounter外に使用する、しかし、それについて移動するための最良の方法です:単に各繰り返しで{counter}を呼び出し、それをインクリメントする

{counter start=0 skip=1 assign="count"} 

を。

{counter} 
{*Can then use the $count var*} 
    {if $count is div by 4} 
     {*do stuff*} 
    {/if} 
+1

+1ラッセル! – alex

+0

カウンタを増減する必要がある場合はどうすればよいですか? – Gio2k

+0

ページに複数のforeachがあるとどうなりますか?再びカウントが「0」から始まります。 – karadayi

0

エコー後に$index++をインクリメントしませんか?

try ++$index;またはdo $index++あなたはそれをエコーし​​ます。それはSmartyの2なら

3

あなたはforeachループに名前を付け、そのように

<ul> 
    {foreach from=$gallery key=index item=image name=foo} 
    <li> 
     <img src="{$image}" alt="" id="panel-{$smarty.foreach.foo.index}" /> 
    </li> 
    {/foreach} 
</ul> 

インデックスが始まるよう{$smarty.foreach.name.index}

を使用することができます(これはforeachの構文から、使用している、それは次のようになります) 0から、1から始まるシーケンスが必要な場合.indexの代わりに.iterationを使用する

私はかなり長い間smartyを使用していませんでしたが、多くの例では正式な文書が非常に良いと感じました。http://www.smarty.net/docsv2/en/language.function.foreach.tpl

0

あなたは

{foreach from=$foo item=bar name=humbug} 
    {$smarty.foreach.humbug.index} 
    {$smarty.foreach.humbug.iteration} 
{/foreach} 

最初の列はインデックス結果であるインデックスと繰り返しオプションを持つ配列です$ fooの通ると仮定すると、2番目の列は、反復の結果はある

0 - 1 
1 - 2 
2 - 3 
3 - 4 
4 - 5 

これは、インデックスが配列インデックスとして0から始まることを意味します。ここで、反復は1で始まるループ反復カウントです。

誤った値を使用すると問題が発生する場合は、4行またはそれ以外の量の行をテーブルに表示することがあります。

インデックスを使用すると、ひどくレイアウトされたテーブルが作成されます。ループの最初の反復(インデックス0)で、5回目の反復(インデックス4)で修正されますが、現在のレイアウトのスコープ内でのみ行の変更が行われます。つまり、最初の行には1つのセルしかありませんそれ。 1行おきに4つのセルがあり、最初の行の後のすべてのセルのデータは、それが実行すべきであるよりも遅く表4のセルに表示されます。 反復を使用

{if $smarty.foreach.humbug.index is div by 4} 
    </tr><tr> 
{/if} 

が正しく最後の反復またはforeachループまで4の同じ行を与える行の変更をレイアウトになります。

{if $smarty.foreach.humbug.iteration is div by 4} 
</tr><tr> 
{/if} 

foreachループの後、最終行を完成させるために単にテーブル行を追加するだけです。

私はこれが誰かを助けることを願っています。

0
{foreach from=$foo item=bar name=humbug} 
{$smarty.foreach.humbug.index} 
{$smarty.foreach.humbug.iteration} 
{/foreach} 

または

{foreach from=$foo item=bar name=berlin} 
{$smarty.foreach.berlin.index} 
{$smarty.foreach.berlin.iteration} 
{/foreach} 
0

あなたは{counter}

{counter}を使用することができ、カウントをプリントアウトするために使用されます。 {counter}は、各繰り返しで の数を覚えています。数字、間隔、および のカウント方向を調整し、 の値を印刷するかどうかを決定することもできます。 によってそれぞれ複数のカウンタを同時に実行することができます。名前を指定しない場合、 名「デフォルト」は

を使用されるソース: http://www.smarty.net/docsv2/en/language.function.counter.tpl

使用法:

{counter start=0 print=false assign="count"} 

<ul> 
{foreach from=$listing.products item="product"} 
    {counter} 
    {if $count === 1} 
    <p>Count is 1</p> 
    {/if} 
{/foreach} 
</ul> 
関連する問題