2016-09-07 4 views
0

Dans smarty [v2 à ma connaissance] Je ne peux pas comprendre que je peux présenter certaines données dans une boucle foreach quand elle est à mi-chemin. C'est à dire. sépare la première moitié du tableau et la seconde moitié du tableau en deux éléments div différents.Smarty: Comment faire X quand la frappe atteint la moitié du total

C'est là où je suis actuellement, et est la logique de ce que je suis en train d'accomplir ..

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

J'ai tout correct sauf la ligne 2. Je ne peux pas comprendre comment configurer correctement pour activer quand l'itération de la boucle actuelle est égale à la moitié du nombre total de fois que le foreach va boucler [ce qui signifie que le tableau est inséré, il mettra la moitié dans un élément div et l'autre moitié dans un second élément div.

En outre, c'est moins une priorité, mais que se passe-t-il quand un total de réseau irrégulier est présent et qu'il ne peut pas être divisé en deux de manière égale?

Merci beaucoup d'avance! C'est au-delà de mon expertise et je suis sûr qu'il y a quelqu'un avec une meilleure compréhension de cela que moi.

Répondre

0

% est pour le module, donc la condition déclenche tous les deux éléments, et ce n'est pas ce que vous voulez. Essayez plutôt de vérifier si l'itération en cours est au milieu du nombre total d'éléments dans le tableau. Utilisez Ceil donc le résultat de la division est toujours un entier arrondi:

{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} 

donc à savoir si vous avez 11 points, vous finirez avec deux divs, une avec 6 points d'une autre avec 5

+0

Remerciez vous beaucoup Borgtex; Bien que cela n'ait pas complètement résolu mon problème, il est venu près. Ce qu'il a fait a été mis 9 dans le premier div, et 11 dans le second div [dans un tableau de 20 éléments]. Je cherche à le diviser exactement en deux quand c'est possible, ou si c'est un montant irrégulier, mettez le plus grand montant dans le premier div, et le montant inférieur dans le second div. Si vous pouvez aller plus loin, je l'apprécierais grandement. Merci beaucoup pour votre aide! –

+0

Etes-vous sûr? il devrait montrer 10 - 10 ... notez que {$ var.variant} doit être avant le {if}, pas après comme il était dans votre code original – Borgtex

+0

Merci encore mon ami. Bien que j'aie fait quelques changements, ce sont des choses qui n'ont pas été mentionnées par moi et c'est votre aide qui a résolu ce problème, alors merci beaucoup. L'équation opératoire est montrée ci-dessous, où je l'ai fait de telle sorte qu'elle ne divisera que des rangées de moitié quand la rangée est plus grande que 16. J'apprécie votre aide beaucoup; +1 à votre réponse '{if ($ smarty.foreach.var.iteration> 8) && ($ smarty.foreach.var.iteration == $ loop_middle | ceil)}' –