checkIfArticleIsInBasket oder sAddArticle erweitern

Hallo,

hab nochmal ein Problem, wo ich irgendwie mit der Shopware Struktur nicht klar komme.

Eigentlich würde es mir reichen, wenn ich checkIfArticleIsInBasket erweitern könnte. Ich hatte den Event „Shopware_Modules_Basket_AddArticle_CheckBasketForArticle“ entdeckt und konnte da auch registieren. Allerdings ist mir dann aufgefallen, dass es in SDhopware notify Events gibt, die im Grunde keine Daten zurückgeben. War also eine Sackgasse.

Habe dann versucht checkIfArticleIsInBasket per Hook zu überschreiben. Geht aber irgendwie nicht.

Dann habe ich mal einen Hook auf sAddArticle probiert, dass geht. Allerdings wäre das ansich nicht nötig und habe auch gemerkt das wirklich alles in sBasket als private deklariert wurde. Man kann also den Core überhaupt nicht erweitern, da ich ansonsten alle Methoden und Variablen in meine Subscriber-Klasse kopieren müsste, was ja auch nicht Sinn der Sache wäre.

Ich könnte evtl. nach sAddArticle (after) alles rückgängig machen und danach alles neu und so wie es gewollt ist durchführen aber das wäre ja noch unsauberer und von der Performance mal ganz zu schweigen.

Gibts hier noch irgendwie andere Möglichkeiten, den Core zu erweitern oder ist soetwas in Shopware grundsätzlich nicht vorgesehen?

Im ganzen Text von dir, steht aber nicht was du genau erweitern/manipulieren möchtest (Preis, Positionen, Gesamtpreis etc.)?

 

Ich möchte die Logik der Methode checkIfArticleIsInBasket in sBasket ändern. Es soll nicht für jedes Produkt das automatische Zusammenführen im Warenkorb stattfinden. Bei bestimmten Produkten soll jeweils ein neues hinzugefügt werden, ohne die Anzahl von einem vorhanden gleichen Produkt zu erhöhen.

Der Event in der checkIfArticleIsInBasket ist leider nur eine notify und kann darüber nichts ändern, wie es aussieht. Weil ich probiert hatte über den builder die Query anzupassen. Die Query war ok wurde aber nicht übernommen.

Als Workaround habe ich vorerst einen eigenen Controller angelegt und einen Teil der sBasket Methoden übernommen, weil dort ja alles private ist. Finde ich aber sehr unschön.

Das geht nur über mehrere Events hinweg

1 Like

@BestShopPossible‍ wie würder denn die Event-Kette aussehen? Ich seh dort kaum sinnvoll platzierte Events.

Das einzige was ich moment sehe ist Shopware_Modules_Basket_AddArticle_Start die Erstellung abfangen, wenn es ein bestimmtes Produkt ist. Weiß nicht ob ich von dort weiter komme. Es ist ja immerhin this as subject mit übergeben und ich von dort aus dann evtl. ein paar sBasket Methoden nutzen könnte.

Hallo,

also aus meiner Sicht klappt deine Anforderung, dass du bei gewissen Artikeln das “zusammenführen” verhindern willst, zu 100% problemlos über dieses Event: Shopware_Modules_Basket_AddArticle_CheckBasketForArticle .

Im Prinzip brauch man sich nur auf das Event subscriben, sich über arguments den queryBuilder holen und bei Artikeln, die nicht zusammengeführt werden sollen, dann einfach ein ungültiges WHERE beim queryBuilder hinzufügen (wie 1 != 1 oder ähnliches) und schon splittet er den Artikel auf. Bei den Artikeln, die nicht aufgesplittet werden sollen, gibt man einfach den ausgelesen queryBuilder über setReturn wieder zurück. Das wäre ansich zu 100% updatesicher, ohne Hooks und wahrscheinlich auch der von Shopware empfohlene Weg.

Die Artikel, die nicht zusammengeführt werden sollen, kann man ja einfach per Artikel - Freitextfeld markieren lassen und oben mit ergänzen, schon hat man die Anforderung umgesetzt und das auch updatesicher und mit nur einem Event.

Grüße

Sebastian

2 Likes

Ja stimmt, hab wieder vergessen das es bei Shopware setReturn ist und nur set genutzt, obwohl ich es schon bei anderen Events genutzt habe. Noch zusehr im Magento-Flow.

In einem cleanen Shopware 5.4.1 Shop funktioniert es jetzt auch endlich relativ sauber. Nur in dem Shop wo es eingebaut werden soll, habe ich eine Endlosschleife beim hinzufügen zum Warenkorb und hab dann irgendwann unmengen an unterschiedlichen Produkten im Warenkorb. Woher er sich auch noch die unterschiedlichen Artikelnummern zieh hab ich noch nicht gefunden aber suche auch noch nicht so lange. Da scheint irgend ein anderes Plugin irgendwas zu machen.

Auch der Fehler ist beseitigt. Es wird langsam