Smarty:当 foreach 达到总数的一半时如何做 X

Smarty: How to do X when foreach hits half of total

在 smarty 中 [据我所知是 v2] 我想不出我可以在 foreach 循环中途显示一些数据。 IE。将数组的前半部分和数组的后半部分分成两个不同的 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 将循环的总次数的一半时激活 [意思是无论数组中的项目如何,它将一半放在一个 div 元素中,另一半放在第二个 div 元素中。

此外,这不是一个优先事项,但是当存在不均匀的数组总数并且不能 divided equally in half 时会发生什么?

在此先感谢您!这超出了我的专业范围,我相信有人比我更了解这一点。

% 是模数,所以条件是每两项触发一次,这不是你想要的。而是尝试检查当前迭代是否位于数组中项目总数的中间。使用 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 个项目,你最终会得到两个 div,一个有 6 个项目,另一个有 5 个