was steckt in Enlight_Controller_ActionEventArgs

Hi,

ich versuche auf vermutlich abenteuerliche Weise zu ergründen, wie ich mit dem Event Subscriber arbeiten kann. Ich habe dafür folgendes geschrieben:

 'onAddToCart'
        ];
    }

    public function __construct($pluginName, $pluginDirectory)
    {
        $this->pluginDirectory = $pluginDirectory;
    }

    private function debug($txt)
    {
        $fp = fopen('/var/www/dev/shopware/debug.txt', 'w');
        fwrite($fp, $txt);
        fclose($fp);
    }

    public function onAddToCart(\Enlight_Controller_ActionEventArgs $args)
    {
        $this->debug(json_encode($args));
    }
}

Ich verstehe nun einfach nicht, was ich mit dem Enlight_Controller_ActionEventArgs Objekt in diesem Kontext anfangen kann. Gibt es dafür irgendwo eine Beschreibung? Ich weiß auch nicht, wie ich es anständig debuggen kann. So, wie ich  es hier versuche ist der output in meiner Datei: 

{}

Bitte helft mir.

Hallo MrFrox,

eine Beschreibung zu den Events findest du auf der Shopware Developer: https://developers.shopware.com/developers-guide/event-list/#enlight_controller_action_predispatch*

Um deinen Schmerz beim Debugging zu lindern habe ich zwei Tipps für dich:

  1. Installier dir xdebug. Damit kannst du direkt in den Prozessablauf dich direkt einhängen und siehst in Echtzeit was dein Code macht. Google einfach mal nach xdebug. Du findest dazu zahlreiche Tutorials.
  2. Installier dir den Shopware Profiler: https://github.com/FriendsOfShopware/FroshProfiler . Damit kannst du dir direkt im Browser alles was du brauchst ausgeben.

 

Viele Grüße
Miron

1 „Gefällt mir“

Vielen Dank Miron. Ich habe jetzt den FroshProfiler installiert und das klappt auch ganz gut. Ich kann die dump()-Funktion nutzen und mir die ausgaben über dump-html ansehen.

In meinem Fall (Enlight_Controller_Action_PreDispatch_Frontend_Checkout) kann ich jedoch ncht viel mit dem dump anfangen. Es gib keine Informationen in $request = $arguments->getRequest(); und auch keine in $response = $arguments->getResponse(); Ich versuche gerade den output von $enlightController = $arguments->getSubject(); zu verstehen und suche eine Möglichkeit im Prozess des In-den-Warenkorb-Legens den Preis des Artikels zu manipulieren und dachte, es geht darüber, dass ich irgendwo hier Daten anpasse.

Ich habe nun einen Preis gefunden in dem ich das ausgebe:

public function onAddToCart(\Enlight_Controller_ActionEventArgs $args)
{
   $enlightController = $args->getSubject();
   $smarty = $enlightController->View()->Template()->smarty;
   dump($smarty);
}

Die Ausgabe sieht so aus:

Index 586 dieses Array sieht so aus:

Wie man sieht, gibt es hier den Preis in Netto und in Brutto. Ich bin nun nicht sicher, was genau es bringt, die Preis an dieser Stelle zu manipulieren und ich weiß auch nicht, wie ich ihn überhaupt manipulieren kann. Für einen Tipp wäre ich sehr dankbar.

Ich denke, dass mein erster Ansatz nicht sehr vielversprechend ist, da ich damit, würde ich herausfinden, wie ich es mache, wahrscheinlich nur das Angezeigte verändere. ich denke, die Lösung liegt irgendwo in

$basket = Shopware()->Modules()->Basket();

Ich vermisse so sehr eine Dokumentation für die Möglichkeiten, des Frameworks. Ich bin eigentlich siet Tagen nur dabei irgendwelche dinge zu erraten :confused: …und ich bin nicht sehr erfolgreich damit :-/

Ich habe auch probiert in der Tabelle s_order_basket einfach die Werte zu ändern. Wenn ich dort in der entsprechenden Zeile, die dem aktuellen Artikel im Warenkorb entspricht, price, netprice, articleID oder correncyFactor ändere, hat das absolut keine auswirkungen auf den Warenkorb, der mit im Frontend angezeigt wird. Alles bleibt beim alten, sowohl der Inhalt als auch der Wert des Artikels im Warenkorb. Allerdings wird der Artikel aus dem Warenkorb gelöscht, sobald ich die korrespondierende Zeile aus s_order_basket lösche. Das ist sehr seltsames Verhalten, das ich mir nicht erklären kann im Moment.

Beim Holen der Daten aus der Datenbank werden die Preise nochmal aktualisiert. Deshalb hat es keine Auswirkung bei dir.

Wenn du den Preis ändern willst, kannst du dich auf Shopware_Modules_Basket_UpdateArticle_FilterSqlDefault registrieren und die SQL ergänzen. Ich habe das meist so gemacht, dass ich an die SQL einfach noch ein Update dran gehangen habe mit meinem Preis

Hallo Shyim,

leider führt das hier bei mir zu einem Error 500:

public static function getSubscribedEvents()
{
    return [
        'Shopware_Modules_Basket_UpdateArticle_FilterSqlDefault' => 'onAddToCart'
    ];
}

Das Event Shopware_Modules_Basket_UpdateArticle_FilterSqlDefault scheint es nicht zu geben. Hast du evtl einen Schreibfehler drin?

Also das Event gibt es hier: https://github.com/shopware/shopware/blob/5.5/engine/Shopware/Core/sBasket.php#L1663

Das kannst du ja immer im Quelltext nachschauen.