0

smarty [私の知る限りv2]では、foreachループの途中でデータを提示できるとは思えません。すなわち。配列の前半と配列の後半を 2 つの異なる div 要素に分けます。

これが私が現在いる場所であり、私が達成しようとしていることの論理です..

    <div>
{foreach from=$feature.variants item="var" name="var"}
    {if $smarty.foreach.var.iteration == ($smarty.foreach.var.total % 2)}
    </div>
    <div class="ty-product-feature__value">
    {/if}
    {$var.variant}
{/foreach}
    </div>

2行目以外はすべて正しいです。現在のループ反復がforeachがループする合計回数の半分に等しいときにアクティブにするように適切に設定する方法がわかりません[つまり、配列のアイテムに関係なく、半分を配置します1 つの div 要素で、残りの半分を 2 番目の div 要素で。

また、これは優先度が低くなりますが、不均一な配列の合計が存在し、均等に半分に分割できない場合はどうなりますか?

よろしくお願いします!これは私の専門知識を超えており、私よりもこれをよく理解している人がいると確信しています.

4

1 に答える 1

0

% は係数であるため、条件は 2 つの項目ごとにトリガーされますが、これは望ましくありません。代わりに、現在の反復が配列内の項目の総数の中間にあるかどうかを確認してください。ceil を使用して、除算の結果が常に切り上げられた整数になるようにします。

{assign var="loop_middle" value=$feature.variants|@count/2}
{foreach from=$feature.variants item="var" name="var"}
   {$var.variant}
   {if $smarty.foreach.var.iteration == $loop_middle|ceil}
      </div>
      <div class="ty-product-feature__value">
   {/if}
{/foreach}

つまり、11 個のアイテムがある場合、最終的に 2 つの div が作成され、1 つには 6 つのアイテムがあり、もう 1 つには 5 つのアイテムがあります。

于 2016-09-07T14:15:09.067 に答える