2017-05-18 4 views
0

Ich habe eine foreach-Schleife auf meiner Website ausgeführt, um Bilder anzuzeigen. Es gibt einige Bilder, die ich nicht anzeigen möchte, also habe ich eine if-Anweisung hinzugefügt, um diese Bilder auszuschließen. Das Problem ist jedoch, dass die Verwendung der if-Anweisung in der Schleife bedeutet, dass ich $ smarty.foreach.thumbnails.last nicht verwenden kann, um herauszufinden, welches Bild das letzte ist, da es eines der versteckten sein könnte.Smarty foreach einschließlich wenn

Wie würde ich diese Bilder filtern und trotzdem $ smarty.foreach.thumbnails.last verwenden können?

Hier ist mein Code, wie es steht:

{foreach from=$images item=image name=thumbnails} 
 
    {if $image.legend != "colorschemes"} 
 
    {assign var=imageIds value="`$product->id`-`$image.id_image`"}                     
 
    <li data-imgtype="{$image.legend}" class="items{if $j == 1} main-pos{elseif $j == 2} right-pos{elseif $smarty.foreach.thumbnails.last} left-pos{else} back-pos{/if}" id="{$j}"> 
 
               
 
     <img src="{$link->getImageLink($product->link_rewrite, $imageIds, 'tm_large_default')|escape:'html':'UTF-8'}" alt="Owl Image" style="width:100%; margin-top:-200px;" /> 
 
               
 
    </li> 
 
    {$j = $j + 1} 
 
    {/if} 
 
{/foreach}

Antwort

0

Eine Lösung des Arrays im Backend filtern dauern würde, bevor es auf die Vorlage zu senden. Dies könnte möglicherweise eine bessere Leistung haben, da der Client keine unnötigen Bilder lädt. Die Filterung könnte in PHP oder SQL erfolgen.

+0

Leider brauche ich immer noch die Bilder, die sonst wo auf der Seite verwendet werden, also kann ich sie nicht ganz so ausschließen. Ich muss sie nur vor dieser Galerie verstecken. Leider benötigt diese Galerie jedoch eine bestimmte Klasse für das letzte Element, damit sie ordnungsgemäß funktioniert. – cyanoxide

+0

@cyanoxide Wenn Sie diese Bilder woanders verwenden, ist es vor dem Forloop in Ihrer Frage oder danach? Wenn es früher im Code ist, können Sie auch die {if $ image.legend! = "Colorschemes"} im ersten Forloop einschließen, um herauszufinden, welche Iteration die letzte ist, die Ihrer if-Bedingung entspricht, und sie als Variable speichern. Verwenden Sie dann in Ihrem zweiten Forloop {if $ j == $ newVariable}, um herauszufinden, welche Iteration zuletzt zu Ihrer Bedingung passt. – entis