foreach und if kombinieren, was mache ich falsch?

Ich würde gerne eine foreach-Schleife und eine if-Abfrage kombinieren, bekomme es aber nicht hin. Bin noch nicht so bewandert mit Smarty.

Situation: Ich nutze das Advanced Menü. Beim Hover über einen Menüpunkt geht darunter ja ein Container auf mit Inhalt (Kategorietext und Unterkategorien).

Wenn ich eine if-Abfrage einbaue, so wie ich es unten gemacht habe, dann stimmt bei mir die Zuordnung der Kategorie mit dem Inhalt in dem Container nicht mehr.

Der Textinhalt eines anderen Containers (einer anderen Kategorie) wird mir in der „gehoverten“ Kategorie angezeigt.

Originaler Quelltext:

{foreach $sMainCategories as $sCategory}
{block name=‚frontend_index_navigation_categories_top_entry‘}
{if !$sCategory.hidetop}

{$sCategory.description}

{/if}
{/block}
{/foreach}

 

So wie ich dachte, dass es sein muss:

{foreach $sMainCategories as $sCategory}
{if $sCategory.attribute.category_yes_no != 1 }
{block name=‚frontend_index_navigation_categories_top_entry‘}
{if !$sCategory.hidetop}

{$sCategory.description}

{/if}
{/block}
{/if}
{/foreach}

 

Wie muss ich die foreach-Schleife und die if-Anweisung richtig kombinieren?

lg

Wilo

Der gesamte Code in der file main-navigation sieht so aus:

 

        {strip}
            {block name='frontend_index_navigation_categories_top_home'}
                
                    
                        {s name='IndexLinkHome' namespace="frontend/index/categories_top"}{/s}
                    
                
            {/block}

            {block name='frontend_index_navigation_categories_top_before'}{/block}

            {foreach $sMainCategories as $sCategory}
             
            
                {block name='frontend_index_navigation_categories_top_entry'}
                                   
                    {if !$sCategory.hidetop}
                        
                            
                                {$sCategory.description}
                            
                        
                    {/if}
      
                    
                {/block}
       
                
            {/foreach}

            {block name='frontend_index_navigation_categories_top_after'}{/block}
        {/strip}

 

Du entfernst nur die Kategorie oben, aber der Content scheint noch da zu sein. Du musst den jeweiligen menu–container ebenso entfernen

@Shyim schrieb:

Du entfernst nur die Kategorie oben, aber der Content scheint noch da zu sein. Du musst den jeweiligen menu–container ebenso entfernen

Vielen Dank Shyim, das denke ich mir auch. Kannst du mir bei der konkreten Lösung helfen? Ich habe den gesamten Code der Datei oben noch als p.s angefügt.

Lieben Dank.

lg

Wilo

Die Lösung:

plugins/advanced_menu/index.tpl im eigenen theme anlegen (entnehmen aus engine/Shopware/Plugins/Default/Frontend/AdvancedMenu/Views/frontend/plugins/advanced_menu)

Dort dann unter {foreach $sAdvancedMenu as $mainCategory} das hier einfügen  {if $mainCategory.attribute.category_yes_no != 1}, unten wieder schliesen {/if} {/foreach}  

Wichtig:

  • drauf achten, dass Attributname übereinstimmt mit Freitextfeld in diesem Beispiel ist der Name des Freitextfeldes > category_yes_no
  • darauf achten, dass Variablenbezeichnung stimmt, in diesem Beispiel > $mainCategory