Neu Per Plugin Felder für das Newsletter-Anmeldungs-Template hinzufügen

jbank

Neues Mitglied
18. Juli 2024
2
0
Liebe Community,
ich möchte für unseren Onlineshop die Newsletter-Anmeldung ein wenig erweitern. Wir möchten Softwarelizenzen verkaufen und als Anreiz für eine Anmeldung für den Newsletter eine 14-tägige Testlizenz geben. Den Lizenzcode möchte ich in der Anmeldungs-Email unterbringen (also in die Email-Vorlage "Freischalt E-Mail nach Newsletter-Anmeldung"). Idealerweise möchte ich in die Vorlage eine neue Eigenschaft schreiben, z.B.
Code:
"Hier ist deine Testlizenz {$NewsletterEmpfaenger->cTestLizenz}".
Leider geht es so nicht.
Folgende Herangehensweise hat nicht funktioniert:
  1. Neues Plugin erstellen und einen Hook definieren für ID37 ("HOOK_NEWSLETTER_PAGE_EMPFAENGEREINTRAGEN")
  2. Bei Ausführung des Hooks ausführen: $args_arr['oNewsletterEmpfaenger']->cTestLizenz = 'Hier die Lizenz';
Der Grund offenbart sich nach kurzer Suche in includes/src/Newsletter/Controller.php:
Code:
\executeHook(\HOOK_NEWSLETTER_PAGE_EMPFAENGEREINTRAGEN, [
    'oNewsletterEmpfaenger' => $recipient
]);
Wenn mich meine angestaubten PHP-Kenntnnisse nicht täuschen wird $recipient, was auch als Eingabe für die Template-Formatierung dient, per Value und nicht per Reference reingegeben. Daher wirken sich Änderungen nicht auf die hereingegebene Variable aus. Ich vermute, es würde funktionieren, wenn man oben zitierte Zeilen ändert durch
Code:
\executeHook(\HOOK_NEWSLETTER_PAGE_EMPFAENGEREINTRAGEN, [
    'oNewsletterEmpfaenger' => &$recipient
]);

Dafür müsste ich aber im JTL-Shop-Code rumschreiben, worauf ich lieber verzichte.
Habe es naiv probiert, in meiner Hookmethode einfach zu schreiben
Code:
$_SESSION['Testlizenz'] = 'Meine Lizenz';
und es dann in der Emailvorlage versucht mit
Code:
"Hier ist deine Testlizenz {$_SESSION['Testlizenz']}".
Jedoch wird von der Smarty-Kompilierung das $_SESSION-Objekt (vernünftigerweise?) nicht mit erfasst.

Fällt euch irgendeine Möglichkeit ein, Variablen innerhalb des Hooks zu generieren, so dass sie innerhalb der Vorlagen-Kompilierung sichtbar sind?

Vielen Dank schon mal für die Hilfe!
Joachim
 

css-umsetzung

Offizieller Service Partner
SPBanner
6. Juli 2011
8.661
2.713
Berlin
Firma
css-umsetzung
{$smarty.session.Testlizenz}

Aber es wird auch andere Wege geben
Du könntest das auch per assign im Template zur Verfügung stellen oder über das Template eine erstellte smarty Funktion aufrufen...
 

jbank

Neues Mitglied
18. Juli 2024
2
0
Hallo,
besten Dank für die schnelle Antwort. Funktioniert wunderbar!
Falls jemand über diesen Thread nochmal stolpert: Legt man im PHP-Hook-Script eine Sessionvariable fest, wie z.B. $_SESSION['TestVariable'] hat man innerhalb der Emailvorlagen Zugriff darauf mittels {$smarty.session.TestVariable}. Das Hookscript muss natürlich innerhalb derselben Session und vor der Instanziierung des Email-Templates zu einer echten Mail ausgeführt werden.
Fetzt.

Viele Grüße
Joachim
 

Ähnliche Themen