Beispiel Standard-Funkionalität ersetzten Hook/Event?

Hallo,

ich habe mich nun schon etwas mit Shopware beschäftigt. Ein paar Events abgefangen und Hooks gesetzt. Allerdings ist einiegs immernoch nicht ganz klar und es wäre super, wenn jemand der sich auskennt ein kleines Beispiel schreiben könnte. Ich denke, dass würde es für viele erleichtern.

Folgendes:

An dieser Stelle wird beschrieben, wie man verhindern kann, dass die Anzahl gleicher Artikel, wenn sie mehrmals in den Korb gepackt werden, addiert wird, sondern jeden Warenkorbhinzufügung des Artikels als eigene Position angezeigt wird.

Hintergrund ist ein Konfiguratorszenario, in dem es für den Artikel individuelle Zusatzdaten gibt.

Hierzu muss die sBasket:addArticle-Methode verändert werden. Wie würde man vorgehen, welcher Weg ist anzuraten.

Macht es einen Unterschied, die Methode via hook::replace komplett zu überschreiben, oder aber per Event an „Shopware_Modules_Basket_AddArticle_Start“ anzudoggen?

Wie würde der Code dazu ausschauen?

Ich habe es via Hook versucht,. allerdings hagelt es Fehler. Dies scheint mit der Referenzierung und auch private/protected-Variablen/Methoden zu tun zu haben. Es wird ja an den Listener ein $arguments-Array übergeben,

mit $arguments->getSubject(); soll man auf die Klassen-Instanz(bzw. deren Proxy, was bedeutet das genau?) der Originalmethode zu greifen können. Allerdings funktioniert es nicht, den Original-Code zu kopieren, anstatt $this $arguments->getSubject() zu schreiben.

Bin für jede Art von Erleuchtung dankbar :slight_smile:

Gruß Fabian

 

@tiefseh schrieb:

Hallo,

ich habe mich nun schon etwas mit Shopware beschäftigt. Ein paar Events abgefangen und Hooks gesetzt. Allerdings ist einiegs immernoch nicht ganz klar und es wäre super, wenn jemand der sich auskennt ein kleines Beispiel schreiben könnte. Ich denke, dass würde es für viele erleichtern.

Folgendes:

An dieser Stelle wird beschrieben, wie man verhindern kann, dass die Anzahl gleicher Artikel, wenn sie mehrmals in den Korb gepackt werden, addiert wird, sondern jeden Warenkorbhinzufügung des Artikels als eigene Position angezeigt wird.

Hintergrund ist ein Konfiguratorszenario, in dem es für den Artikel individuelle Zusatzdaten gibt.

Hierzu muss die sBasket:addArticle-Methode verändert werden. Wie würde man vorgehen, welcher Weg ist anzuraten.

Macht es einen Unterschied, die Methode via hook::replace komplett zu überschreiben, oder aber per Event an „Shopware_Modules_Basket_AddArticle_Start“ anzudoggen?

Wie würde der Code dazu ausschauen?

Ich habe es via Hook versucht,. allerdings hagelt es Fehler. Dies scheint mit der Referenzierung und auch private/protected-Variablen/Methoden zu tun zu haben. Es wird ja an den Listener ein $arguments-Array übergeben,

mit $arguments->getSubject(); soll man auf die Klassen-Instanz(bzw. deren Proxy, was bedeutet das genau?) der Originalmethode zu greifen können. Allerdings funktioniert es nicht, den Original-Code zu kopieren, anstatt $this $arguments->getSubject() zu schreiben.

Bin für jede Art von Erleuchtung dankbar :)

Gruß Fabian

Hallo,

das bessere (und wahrscheinlich einzige) Event, um das Aufaddieren von Artikeln in den Warenkorb zu verhindern, ist dieses Event hier: Shopware_Modules_Basket_AddArticle_CheckBasketForArticle . Weil genau bei diesem Event prüft er ja eben, ob dieser Artikel schon im Warenkorb ist. Dieses Event könnte man ja einfach dahingehend anpassen, dass es das aufaddieren entweder gar nicht mehr unterstützt oder nur für bestimmte Artikel nicht mehr. Zu beachten ist aber auf jeden Fall auch, das man sich dann auch später überlegen muss, wie man die Übertragung des Warenkorbs in die Bestellung bewerkstelligt - wenn man das aufaddieren verhindert, macht es diese nämlich einen Zacken schwieriger.

Beste Grüße

Sebastian