Hallo! Ich suche eine Möglichkeit auf Aktionen wie Artikel ändern (löschen, erstellen), die man im Backend macht per Plugin zugreifen zu können. Immer wenn eines dieser Aktionen ausgeführt wird, soll etwas im Datenbank gemacht werden. Ich dachte es geht mit einem Hook auf saveAction() (die Methode aus der Klasse Controller/backend/Article.php) Nur leider klappt das nicht so wie ich dachte… Ich bekomme überhaupt keine Ausgabe, wenn ich eine Artikel ändere und speichere. ? Bootstrap class Shopware\_Plugins\_Frontend\_ArtikelEventTest\_Bootstrap extends Shopware\_Components\_Plugin\_Bootstrap { public function install() { $this-\>registerEvents(); } private function registerEvents() { $this-\>subscribeEvent( 'Article::saveAction::after', 'afterSaveAction' ); } public function afterSaveAction(Enlight\_Hook\_HookArgs $arguments) { Shopware()-\>Debuglogger()-\>info('\*\*\* afterSaveAction \*\*\* '); // Do something with database } }
[quote=“jakko”]Article::saveAction::after[/quote] Was soll denn “Article” in diesem Fall sein? Siehe: http://wiki.shopware.com/Shopware-4-Eve … l_981.html Viele Grüße
Article ist der Klassenname auf die ich zugreifen möchte, die hier zu finden ist „engine/Shopware/Controllers/Backend/Article.php“ Kann man etwa nicht auf diese Klasse mit einem Hook zugreifen?
Und noch einmal der Link, der alle deine Fragen beantworten und deine Probleme beheben wird: http://wiki.shopware.com/Shopware-4-Eve … l_981.html Viele Grüße
Sind die Doctrine Hooks hier eventuell interessant? Siehe: http://wiki.shopware.com/Shopware-4-Mod … l_982.html ganz unten.
Hi, wie dirk_designverign schon sagt, sind hier besonders die Lifecycle-Events interessant - die werden immer ausgelöst, wenn bspw. ein Artikel-Model bearbeitet wird - damit unterstützt du also direkt das Artikel-Backend-Modul oder die API. Für andere Aktionen kann es natürlich immer auch nötig sein, zusätzlich bestimmte PostDispatch-Events zu registrieren, wie Aquatuning schon angedeutet hat. Bei den Lifecycle-Events solltest du nur etwas aufpassen - wenn man da in den Callbacks flusht kann es schnell zu Problemen kommen, das sollte man vermeiden. Mittlerweile denke ich fast, dass man sich in den Lifecycle-Events am besten erstmal nur „merkt“, welche Artikel geändert wurden und dann zu einem späteren Zeitpunkt (kurz vor Ende des Requests) seine Schreiboperationen durchführt. lG Daniel
Hi, ich hatte auch das Problem und dabei gesehen das Shopware nicht überall auf Doctrine zurück greift um auf die Datenbank zu zugreifen. Ich habe mir entsprechende MySQL Trigger gesetzt, die mir in eine Tabelle schreiben, welcher Artikel oder welche Bestellung eine Änderung erfahren hat. Die Daten lese ich in einem Cron aus und reagiere entsprechend. Ein Vorteil ist, dass ich *alle* Änderungen an den Daten mitbekomme auch wenn die nicht von Shopware kommen (z.B. phpMyAdmin). Ein Nachteil ist, das man wissen muss das da ein Trigger existiert, die vergisst man mal gerne und hat dann beim Debuggen immer arbeit als nötig.