# Newsletter erweitern Event/hook?

**URL:** <https://forum.shopware.com/t/newsletter-erweitern-event-hook/51706>\
**Category:** Programmierung\
**Created:** [12. März 2018 um 16:09 UTC](https://forum.shopware.com/t/newsletter-erweitern-event-hook/51706 "2018-03-12T16:09:24Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![kadis](https://avatars.discourse-cdn.com/v4/letter/k/c57346/32.png) [@kadis](https://forum.shopware.com/u/kadis)\
**Post date:** [12. März 2018 um 16:09 UTC](https://forum.shopware.com/t/newsletter-erweitern-event-hook/51706/1 "2018-03-12T16:09:24Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![derwunner](https://avatars.discourse-cdn.com/v4/letter/d/e5b9ba/32.png) [@derwunner](https://forum.shopware.com/u/derwunner)\
**Post date:** [13. März 2018 um 08:22 UTC](https://forum.shopware.com/t/newsletter-erweitern-event-hook/51706/2 "2018-03-13T08:22:22Z")

</div>

Hallo,

&nbsp;

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.

&nbsp;

&nbsp;

MFG

&nbsp;

derwunner

---

<div class="post-metadata">

**Author:** ![kadis](https://avatars.discourse-cdn.com/v4/letter/k/c57346/32.png) [@kadis](https://forum.shopware.com/u/kadis)\
**Post date:** [13. März 2018 um 10:17 UTC](https://forum.shopware.com/t/newsletter-erweitern-event-hook/51706/3 "2018-03-13T10:17:11Z")

</div>

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\_\*“&nbsp; z.b. mit Enlight\_Controller\_Action\_PostDispatch\_Newsletter\_Cron allerdings weiß ich nicht ob das Event korrekt ist. Bzw. es überhaupt existiert.

&nbsp;

Beste Grüße

---

<div class="post-metadata">

**Author:** ![BestShopPossible](https://avatars.discourse-cdn.com/v4/letter/b/6bbea6/32.png) [@BestShopPossible](https://forum.shopware.com/u/BestShopPossible)\
**Post date:** [13. März 2018 um 11:02 UTC](https://forum.shopware.com/t/newsletter-erweitern-event-hook/51706/4 "2018-03-13T11:02:40Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![kadis](https://avatars.discourse-cdn.com/v4/letter/k/c57346/32.png) [@kadis](https://forum.shopware.com/u/kadis)\
**Post date:** [21. März 2018 um 14:32 UTC](https://forum.shopware.com/t/newsletter-erweitern-event-hook/51706/5 "2018-03-21T14:32:38Z")

</div>

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&nbsp;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.  
&nbsp;

Kann hier einer von Shopware was dazu sagen?

---

<div class="post-metadata">

**Author:** ![BestShopPossible](https://avatars.discourse-cdn.com/v4/letter/b/6bbea6/32.png) [@BestShopPossible](https://forum.shopware.com/u/BestShopPossible)\
**Post date:** [22. März 2018 um 12:48 UTC](https://forum.shopware.com/t/newsletter-erweitern-event-hook/51706/6 "2018-03-22T12:48:24Z")

</div>

Warum denn aus dem Template?

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

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![kadis](https://avatars.discourse-cdn.com/v4/letter/k/c57346/32.png) [@kadis](https://forum.shopware.com/u/kadis)\
**Post date:** [22. März 2018 um 13:09 UTC](https://forum.shopware.com/t/newsletter-erweitern-event-hook/51706/7 "2018-03-22T13:09:50Z")

</div>

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

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![kadis](https://avatars.discourse-cdn.com/v4/letter/k/c57346/32.png) [@kadis](https://forum.shopware.com/u/kadis)\
**Post date:** [22. März 2018 um 15:56 UTC](https://forum.shopware.com/t/newsletter-erweitern-event-hook/51706/8 "2018-03-22T15:56:53Z")

</div>

```
$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?

---

<div class="post-metadata">

**Author:** ![BestShopPossible](https://avatars.discourse-cdn.com/v4/letter/b/6bbea6/32.png) [@BestShopPossible](https://forum.shopware.com/u/BestShopPossible)\
**Post date:** [23. März 2018 um 09:41 UTC](https://forum.shopware.com/t/newsletter-erweitern-event-hook/51706/9 "2018-03-23T09:41:11Z")

</div>

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…

---

<div class="post-metadata">

**Author:** ![kadis](https://avatars.discourse-cdn.com/v4/letter/k/c57346/32.png) [@kadis](https://forum.shopware.com/u/kadis)\
**Post date:** [23. März 2018 um 10:43 UTC](https://forum.shopware.com/t/newsletter-erweitern-event-hook/51706/10 "2018-03-23T10:43:08Z")

</div>

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.

&nbsp;

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.

---

<div class="post-metadata">

**Author:** ![derwunner](https://avatars.discourse-cdn.com/v4/letter/d/e5b9ba/32.png) [@derwunner](https://forum.shopware.com/u/derwunner)\
**Post date:** [23. März 2018 um 12:08 UTC](https://forum.shopware.com/t/newsletter-erweitern-event-hook/51706/11 "2018-03-23T12:08:33Z")

</div>

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.

&nbsp;

> [@kadis schrieb:](https://forum.shopware.com/profile/3483/kadis "kadis")
> 
> 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&nbsp;

&nbsp;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).

---

<div class="post-metadata">

**Author:** ![shyim](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/shyim/32/7681_2.png) [@shyim](https://forum.shopware.com/u/shyim)\
**Post date:** [23. März 2018 um 18:31 UTC](https://forum.shopware.com/t/newsletter-erweitern-event-hook/51706/12 "2018-03-23T18:31:05Z")

</div>

Der Service shop existiert nur im Frontend, dein Event&nbsp;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?

---

<div class="post-metadata">

**Author:** ![kadis](https://avatars.discourse-cdn.com/v4/letter/k/c57346/32.png) [@kadis](https://forum.shopware.com/u/kadis)\
**Post date:** [26. März 2018 um 07:30 UTC](https://forum.shopware.com/t/newsletter-erweitern-event-hook/51706/13 "2018-03-26T07:30:07Z")

</div>

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.
