Newsletter erweitern Event/hook?

Hy,

gibt es ein(en) Hook/Event beim Newsletter das ich ansprechen kann um weitere Informationen hinzu zufügen?

Ich möchte z.b. die korrekten Preise der Kundengruppe, in der sich der User befindet mit senden. Im Netz finde ich dazu keine passende Info.
Mit dem intelligenten Newsletter ist es zwar schon bedingt möglich. Allerdings bringt mit das so rein garnichts, wenn ich nicht bestimmte Infos selbst abändern hinzufügen kann…

Beste Grüße

Hallo,

 

ja, es gibt Möglichkeiten das zu tun.

Möglichkeit 1: Lege dir eine Smarty Function an mit einem Parameter für den zu refenzierenden Kunden. In dieser Function kannst Du dann mehr Informationen von der Datenbank holen.

Möglichkeit 2: Registriere dich auf die Events, die beim Newsletter Verand getriggert werden. Da du den Newseltter manuell und per Cronjob absenden kannst, solltest du dich am besten auf das Backend und auf das Cronjob Event registrieren.

Analog zu Methode 2 kannst Du dir auch ein Event im Source Code heraus suchen, das von der “Newsletter versenden” Klasse / Methode getriggert wird. So brauchst du dich nur auf ein Event zu registrieren, das sicher immer ausgelöst wird, sobald ein Newsletter versendet wird.

 

 

MFG

 

derwunner

Hy,

danke für die Rückmeldung. Ich hatte vor die Möglichkeit 2 umzusetzen. Mich also beim Event zu registieren das beim versenden eines jeden Newsletters getriggert wird.
Das einzige was mir hier jetzt fehlt ist das passende Event.

Ich habe schon versucht es zu finden, „Enlight_Controller_Action_*“  z.b. mit Enlight_Controller_Action_PostDispatch_Newsletter_Cron allerdings weiß ich nicht ob das Event korrekt ist. Bzw. es überhaupt existiert.

 

Beste Grüße

Ja da musst du schon im Code gucken wo was gemacht wird und welches Event wann gefeuert wird damit du weißt welche Events es gibt und welches du brauchst.

Hy,

das war ja auch meine Idee. Allerdings sind die Werte alle leer… ich kann nichts vom Template abfragen, noch sUser oder sCampain… Alles leer.

Wollte mit Enlight_Controller_Action_PreDispatch oder Enlight_Controller_Action_PostDispatch einsteigen, da z.b. Enlight_Controller_Action_PostDispatch_Backend_Newsletter nicht funktionierte, aber ich bekomme dort nicht die nötigen Infos um den Newsletter zu erweitern.
Ich brauche min. die userID, zu dem der Newsletter geschickt wird, damit ich dann weitere Infos anhängen kann.

Wenn ich mir nun die Template-Variablen holen möchte mit:

$view = $args->getSubject()->View();
$sUser = $view->getAssign('sUser');

ist sUser immer leer. Alle Variablen aus dem Template sind leer.
 

Kann hier einer von Shopware was dazu sagen?

Warum denn aus dem Template?

Shopware()->Modules()->Admin()->sGetUserData()

 

Hy,

schon ausprobiert. Wenn ich dies benutze, bekomme ich eine Fehlermeldung. Das dies nicht erlaubt ist.

PHP Fatal error: Uncaught exception 'Symfony\\Component\\DependencyInjection\\Exception\\ServiceNotFoundException' with message 'You have requested a non-existent service "shop". Did you mean one of these: "customer_search.dbal.condition.ordered_in_shop_handler", "customer_search.dbal.condition.registered_in_shop_handler", "neti_foundation.service.shop", "shop_page_menu", "shopware.api.address", "shopware.api.article", "shopware.api.cache", "shopware.api.category", "shopware.api.country", "shopware.api.customer", "shopware.api.customer_stream", "shopware.api.customergroup", "shopware.api.emotionpreset", "shopware.api.manufacturer", "shopware.api.media", "shopware.api.order", "shopware.api.propertygroup", "shopware.api.resource", "shopware.api.shop", "shopware.api.translation", "shopware.api.variant", "shopware.auth.constraint.user_email_validator", "shopware.auth.constraint.user_name_validator", "shopware.auth.validator.user_validator", "shopware.cache_manager", "shopware.captcha.default_captcha", "shopware.captcha.honeypot_captc in /var/www/vhosts/.../vendor/symfony/dependency-injection/Container.php on line 288

 

$view->getAssign();

Ist auch leer…
@Shopware: Wie komme ich den nun an die sUser Daten, des Templates? Oder an Nutzerdaten von dem User der die Seite aufruft, bzw. den Newsletter zugesendet bekommt?

Also irgendwas machst du glaube ich grundlegend falsch.

$userData = Shopware()->Modules()->Admin()->sGetUserData();

Mir ist nicht bekannt, dass diese Zeile irgendwo einen Fehler schmeißen könnte…

Hy,

das wäre schön, wenn ich hier einen Fehler machen würde. Aber im Grunde versuche ich hier nur das selbe, als wenn ich mir das Frontend erweitern möchte.

Ich registiere mein Event:

$this->subscribeEvent(
			'Enlight_Controller_Action_PreDispatch',
			'onActionPostDispatchFrontendNewsletter'
		);

public function onActionPostDispatchFrontendNewsletter(\ActionEventArgs $args) {

		$request = $args->getSubject()->Request();
		$view = $args->getSubject()->View();

		if (strtolower($request->getControllerName()) == 'newsletter') {
			$userData = Shopware()->Modules()->Admin()->sGetUserData();
			$result = \Doctrine\Common\Util\Debug::dump($userData, 6, true, false);
			$view->assign('lighthouse', 'HIER:'.$request->getModuleName().'->'.$request->getControllerName().' '.print_r($result, true).'');
		}
		
		
    }

Sobald ich nun die Zeile, die du genannt hast einfüge, bekomme ich die Fehlermeldung sobald ich den Newsletter in der Vorschau öffne.

 

Ich habe es auch mit POSTDispatch versucht. Dort habe ich zwar sgetUserData. Allerdings kann ich den Wert nicht ins Template schreiben.
Der Wert bleibt dann leer… Ich kann den Newsletter dann zwar generieren, mein Templatewert bleibt dann auch leer und wenn ich den Newsletter per Link öffnen will, bekomme ich wieder die Fehlermeldung von oben.

Die Events für den Controller Newsletter müssen gefeuert werden. Dann machst du was in deinem Code falsch, oder es wird gar nicht der Newsletter Controller aufgerufen.

Wie auch immer, eines von beiden ist es.

 

@kadis schrieb:

Hy,

schon ausprobiert. Wenn ich dies benutze, bekomme ich eine Fehlermeldung. Das dies nicht erlaubt ist.

PHP Fatal error: Uncaught exception ‘Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException’ with message 'You have requested a non-existent service “shop”. Did you mean one of these: “customer_search.dbal.condition.ordered_in_shop_handler”, “customer_search.dbal.condition.registered_in_shop_handler”, “neti_foundation.service.shop”, “shop_page_menu”, “shopware.api.address”, “shopware.api.article”, “shopware.api.cache”, “shopware.api.category”, “shopware.api.country”, “shopware.api.customer”, “shopware.api.customer_stream”, “shopware.api.customergroup”, “shopware.api.emotionpreset”, “shopware.api.manufacturer”, “shopware.api.media”, “shopware.api.order”, “shopware.api.propertygroup”, “shopware.api.resource”, “shopware.api.shop”, “shopware.api.translation”, “shopware.api.variant”, “shopware.auth.constraint.user_email_validator”, “shopware.auth.constraint.user_name_validator”, “shopware.auth.validator.user_validator”, “shopware.cache_manager”, “shopware.captcha.default_captcha”, "shopware.captcha.honeypot_captc in /var/www/vhosts/…/vendor/symfony/dependency-injection/Container.php on line 288 

 Lies mal richtig: Dein Aurfuf ist schon erlaubt, es existiert nur nicht der Service mit der ID “shop”. Es gibt nun zwei mögliche Fehlerquellen:

  1. Den Service gibt es wirklich nicht

  2. Den Service gibt es schon, aber der Container wurde nicht initialisiert (Shopware Kernel wurde nicht gebootet).

Der Service shop existiert nur im Frontend, dein Event Enlight_Controller_Action_PreDispatch wird ebenfalls im Backend/API aufgerufen wo es kein Shop gibt, dadurch knallt es. Pass es am besten auf “Enlight_Controller_Action_PreDispatch_Frontend” an oder besser auf Controller Basis.

Woran möchtest du dich genau hängen?

Hy,

leider funktioniert „Enlight_Controller_Action_PreDispatch_Frontend“ nicht. Bei diesem Event wird der Newsletter, bzw. das Template des Newsletters nicht angegangen.

Was ich machen möchte ist eigentlich einfach. Zumindest im Frontend des Shops. Ich möchte das Template erweitern und vorher Template-Variablen auslesen.
Ich benötige die UserID, zu dem der Newsletter gesendet wird, anhand dieser ID möchte ich mir Daten aus der Datenbank nachladen und diese dann wieder ins Template bringen.

Das einzige Event das etwas bringt, ist „Enlight_Controller_Action_PreDispatch“ oder „Enlight_Controller_Action_PreDispatch_Backend_Newsletter“.
Damit ist es mir zwar möglich Template Variablen hinzuzufügen, allerdings kann ich nichts auslesen. Sprich vor dem Pre, werden die $view assigns leer gemacht.

Ich könnte natürlich alle Preise des Shops auslesen und dann im Smarty-Template das ganze machen, allerdings ist das mehr als dirty und würde das generieren des Newsletters komplett verlangsamen.