Hallo, ich habe vor einiger Zeit ein Plugin in der CE 4.0.1 geschrieben, das nun in der CE 4.3.0 nicht mehr korrekt funktioniert. Dieses greift in die Warenkorb-Methode sAddVoucher ein, um den eingegebenen Gutscheincode über eine Schnittstelle zu validieren. Meine Methode gibt, sofern der Gutscheincode extern in unserem System bekannt ist, einen anderen, mehrfach-gültigen Gutscheincode bzw. eine Kampagnen-Uid an die Methode sAddVoucher zurück, damit diese die Validierung letztendlich übernimmt - dieser Gutscheincode ist einmalig als Gutschein in Shopware eingetragen. Das Plugin lässt sich nach wie vor installieren & aktivieren und kann in meiner Methode den Gutscheincode nach wie vor extern abfragen bzw. beziehen. Nur klappt die Rückgabe an sAddVoucher nicht mehr - der eingegebene Gutscheincode müsste im Prinzip nur überschrieben bzw. ausgetauscht werden. Bislang habe ich dazu nur $args-\>set('sTicket', $campaignUid);
in meiner Methode schreiben müssen. Vielleicht hat jemand eine Idee, wie ich das Problem in der CE 4.3.0 löse? Hier ein Auszug meines Codes: /\*\* \* Installiert das Plugin & registriert die entsprechenden Hooks & Events \* \* @return array \*/ public function install() { /\* \* Registriere neuen Hook für das Einloesen von Gutscheinen im Warenkorb \*/ $basketHook = $this-\>createHook('sBasket', 'sAddVoucher', 'onAddVoucher', Enlight\_Hook\_HookHandler::TypeBefore, 0); $this-\>subscribeHook($basketHook); ... } /\*\* \* Hook listener method \* \* Validieren eines Gutschein-Codes im Warenkorb: \* Beziehe den Original-Gutschein-Code & sichere diesen einmalig in der SESSION \* Validiere diesen & verbinde dich mit der Schnittstelle, um die Kampagnen-ID zu erhalten \* Uebergebe diese im Erfolgsfall der Original-Funktion von shopware \* \* @param Enlight\_Hook\_HookArgs $args \* @return boolean \*/ static function onAddVoucher(Enlight\_Hook\_HookArgs $args) { $config = Shopware()-\>Plugins()-\>Backend()-\>MeinPlugin()-\>Config(); $param = $args-\>getArgs(); $bonusCode = $param[0]; $api = new ExtAPI(); $api-\>setAffiliateUid($config-\>affiliateUid); if ($api-\>remoteValidateBonuscode($bonusCode) === true) { $campaignUid = $api-\>getCampaignUid(); $args-\>set('sTicket', $campaignUid); } return; }
Danke für jeden Tipp! VG Patrick