Varianten eines Artikels für Kundengruppe ausblenden

Hallo,

wir würden gerne gewisse Varianten eines Artikels für unsere Kundengruppe ‚H‘ ausblenden. Wir hatten überlegt das ganze über eine if-Abfrage zu machen, wissen allerdings nicht genau wo wir ansetzen sollen Templatetechnisch.

Viele Grüße

Ich hatte gedacht, das ganze so in etwa zu lösen:

{extends file="parent:frontend/detail/config_upprice.tpl"}


 {*Configurator drop down*}
{block name='frontend_detail_group_selection'}
    
        {foreach $sConfigurator.values as $configValue}
            {if !{config name=hideNoInStock} || ({config name=hideNoInStock} && $configValue.selectable)}
                
                    {$configValue.optionname}{if $configValue.upprice} {if $configValue.upprice > 0}{/if}{/if}
                
            {/if}
        {/foreach}
    
{/block}

Habe hierfür das Freitextfeld 20 mit einem boolean erstellt. Ist der Code so in Ordnung oder gibt es eine bessere Lösung? Das Beste wäre natürlich, wenn die Varianten deaktiviert statt ausgeblendet würden.

Hallo,

 

geht es dabei um das Kategorie Listing oder um die Artikel Detail Seite?

 

Weil wenn es um das Kategorie Listing (die Hauptnavigation für die Artikelauswahlseiten) geht, dann kann man die betreffenden Artikelvarianten über das SearchBundle heraus filtern. Da hat man dann auch den Shop Context mit der jeweiligen Kundengruppe. Dann könnte man zum Beispiel nach der Bestellnummer des Artikels gehen. Also wenn Kundengruppe = XY und Bestellnummer mit XYZ beginnt, dann filtere diese Artikel heraus. Artikelvarianten sind ja nichts anderes als verschiedene Artikeldetails zu einem Basisartikel. Und jedes Artikeldetail hat auch eine Bestellnummer.

 

 

MFG

 

derwunner

Hallo derwunner,

danke für deine Antwort. Es geht hierbei um die Artikeldetailseiten.

 

Viele Grüße

ds1337

Ok, also ich habe jetzt mal nachgesehen, wie das ist, wenn man von einem Artikel in der Detailseite gewisse Varianten ausblendend will.

Das ist wohl noch auf die “alte” Art gemacht, also sprich hier wird noch nicht das SearchBundle eingebunden, sonst wäre es komfortabler gewesen (leichter möchte ich nicht unbedingt sagen bei so viel Boilerplate Code). Um zu erreichen, dass bereits nicht alle Varianten aus der Datenbank geholt werden, muss man den Service shopware_storefront.list_product_gateway durch einen eigenen ersetzen. Denn wie ich gesehen habe, wird ganz unten irgendwo, also nachdem bereits schon viel Core Logik abgelaufen ist, die Klasse Shopware\Bundle\StoreFrontBundle\Gateway\DBAL\ListProductGateway und die Methode getList aufgerufen, welche widerrum getQuery aufruft. Letztere baut den Query zusammen und bekommt auch den Shop Kontext übergeben. Im Kontext Objekt steckt auch die Kundengruppe drin, die man dann einfach nur noch als weitere where Bedingung an den Querry anhängen muss. Also eigentlich kann man sich von dieser Klasse ableiten und nur die getQuery Methode überschreiben, die neue Kindsklasse dann als neuer Service im Container injecten und schon ruft Shopware den eigenen Service auf.

Dass im Smarty Template anzupassen halte ich für wenig sinnvoll. Schließlich ist hier bereits das Kind in den Brunnen gefallen…

 

 

MFG

 

derwunner

Moin,

bin gerade an der gleichen Stelle (Überlagern der getQuery Methode) und komme mit Deiner Anleitung “Also eigentlich kann man sich von dieser Klasse ableiten und nur die getQuery Methode überschreiben, die neue Kindsklasse dann als neuer Service im Container injecten” nicht weiter. Hast Du einen kurzen Anstoß, wie ich das umsetzen kann?

Grüße aus Hamburg,
Marco