2016-09-07 9 views
0

В smarty [v2, насколько мне известно] Я не могу представить, что могу представить некоторые данные в цикле foreach, когда он находится на полпути. То есть. отделите первую половину массива и вторую половину массива на два разных элемента div.Smarty: Как сделать X, когда foreach ударяет половину всего

Это где я в настоящее время нахожусь, и логика, что я пытаюсь сделать ..

<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.

Кроме того, это менее приоритетно, но что происходит, когда присутствует неравномерное количество массивов, и оно не может делиться поровну пополам?

Большое вам спасибо! Это выходит за рамки моего опыта и я уверен, что есть кто-то, кто лучше понимает это, чем я.

ответ

0

% для модуля, поэтому условие запускает каждые два элемента, и это не то, что вы хотите. Вместо этого попробуйте проверить, находится ли текущая итерация в середине общего количества элементов в массиве. Используйте 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 пунктов, вы будете в конечном итоге с двумя дивы, один с 6 другое с 5

+0

Thank вы очень Borgtex; хотя это не полностью решило мою проблему, оно приблизилось. То, что было сделано, было положено 9 в первом div, а 11 во втором div [в массиве из 20 элементов]. Я ищу его, чтобы разбить его ровно пополам, если это возможно, или если это неравномерная сумма, поместите большую сумму в первый div и меньшую сумму во втором div. Если бы вы могли звонить дальше, я бы очень признателен. Большое спасибо за Вашу помощь! –

+0

Вы уверены? он должен показать 10 - 10 ... обратите внимание, что {$ var.variant} должен быть до {if}, а не после него, как это было в вашем исходном коде – Borgtex

+0

Еще раз спасибо моему другу. Хотя я сделал несколько изменений, это были вещи, которые не были упомянуты мной раньше, и ваша помощь, которая решила эту проблему, так что спасибо вам большое. Ниже приведено оперативное уравнение, в котором я сделал его так, чтобы он разделил массивы пополам, когда массив больше 16. Я очень ценю вашу помощь; +1 к вашему ответу. '{if ($ smarty.foreach.var.iteration> 8) && ($ smarty.foreach.var.iteration == $ loop_middle | ceil)}' –