ich bin gerade bei dem Versuch mein erstes Plugin zu schreiben, was die sGetBasketData Funktion in der sBasket.php erweitern soll. Ich habe mir den Plugin Dummy von Shopware dazu runtergeladen.
Mein Code sieht bislang so aus:
namespace SeboCautionArticle;
use Shopware\Components\Plugin;
use Shopware\Core\sBasket;
class SeboCautionArticle extends \Shopware\Components\Plugin {
public function SeboCautionArticle() {
return [
'sBasket::sGetBasketData::after' => 'sGetBasketDataCustom'
];
}
public function sGetBasketDataCustom() {
return "test123";
}
}
Ist dieser Ansatz richtig? Im Frontend tut sich im Warenkorb nichts.
Ich hatte erst
class SeboCautionArticle extends sBasket
Allerdings kam dann die Meldung „Class ‚Shopware\Core\sBasket‘ not found“
@AndreHerking Leider nein, den habe ich mir mehrmals durchgelesen, allerdings weiß ich immernoch nicht richtig wo ich ansetzen muss bzw. ob der bestehende Code den ich jetzt habe in die richtige Richtung geht
namespace SeboCautionArticle;
use Shopware\Components\Plugin;
use Shopware\Core\sBasket;
class SeboCautionArticle extends \Shopware\Components\Plugin {
public static function getSubscribedEvents() {
return [
'sBasket::sGetBasketData::after' => 'sGetBasketDataCustom'
];
}
public function sGetBasketDataCustom(\Enlight_Hook_HookArgs $args) {
$this->setReturn('test123');
}
}
Alternativ über ein FilterEvent, da die sGetBasketData nen Filter bereitstellt:
namespace SeboCautionArticle;
use Shopware\Components\Plugin;
use Shopware\Core\sBasket;
class SeboCautionArticle extends \Shopware\Components\Plugin {
public static function getSubscribedEvents() {
return [
'Shopware_Modules_Basket_GetBasket_FilterResult'
=> 'onFilterCoreBasketGetBasketFilterResult',
];
}
public function onFilterCoreBasketGetBasketFilterResult(\Enlight_Event_EventArgs $args) { {
$controller = $args->get('subject');
$basket = $args->getReturn();
// modifizieren
$basket[...] = ...;
return $basket;
}
}
@langnickel Vielen Dank für deine Antwort. Leider brachten beide Versuche keine Änderung.
Ich habe in die SeboCautionArticle() Funktion ein die() gesetzt, allerdings geht er dort gar nicht erst rein. Woran kann das liegen, muss ich vorher noch irgendwas konfigurieren?
@langnickel Danke, habe den Filter verwendet wie von dir vorgeschlagen und somit kann ich drauf zugreifen :)
Mein Ziel ist es den Warenkorbwert zu verändern, da bei gewissen Artikeln eine Kaution hinzukommen soll, die nicht mit in den Gesamtpreis des Artikels fließt. Problematisch ist es, den neuen Gesamtpreis an PayPal zu übermitteln, da die Meldung “Transaction refused because of an invalid argument. See additional error messages for details… The totals of the cart item amounts do not match order amounts.” kommt. Heißt also, er addiert den Preis pro Artikel und merkt dass die Gesamtsumme nicht übereinstimmt.
mit $basket[“AmountNumeric”] = 300; ändere ich den Warenkorbwert… Was wäre der richtige Weg?
Muss ich noch eine Variable abändern, damit das hinhaut? Irgendwie die Validierung für diesen Sonderfall deaktivieren oder muss ich die Kaution als Artikel in die DB schreiben?
Schau dir doch mal mit var_dump() oder print_r() dein $basket an. Dort stehen noch viele andere Werte (z.B. Netto und Brutto), die du anpassen musst. Außerdem musst du -entweder- alle Artikelpreise anpassen, damit diese aufsummiert auch deine Summe ergeben -oder- du musst die Übermittlung der einzelnen Positionen an Paypal deaktivieren (siehe Paypal Einstellungen).