Email-Template mit Daten anreichern

Ich möchte gerne in der Bestellbestätigungs-Mail zusätzliche Daten anzeigen, die in der Datenbank mit Referenz der bestellten Artikel-IDS abgelegt sind. Ich habe mir dazu eine extra Tabelle extra_infos  angelegt in der die Felder artikel_id und  information vorhanden sind. Ein Beispieleintrag wäre dann zum Beispiel (1a50a6b74c7f42bba47e435a4f042134, “Eine zusätzliche Information”). Wenn der Kunde den Artikel 1a50a6b74c7f42bba47e435a4f042134 bestellt, dann will ich in der Email-Bestellbestätigung zusätzlich zu Artikeldaten wie name, Preis usw. “Eine zusätzliche Information” übergeben und anzeigen.

Aktuell habe ich einen Subscriber auf dem Event MailBeforeValidateEvent gesetzt und kann hier zumindest zusätzliche Daten an das Template übergeben: 

public static function getSubscribedEvents(): array
{
    return [
        MailBeforeValidateEvent::class => 'sendMail',
    ];
}

public function sendMail(MailBeforeValidateEvent $event): void{
    $data = $event->getTemplateData(); 
    $data["test"] = "hey";
    $event->setTemplateData($data);
}

Im Email-Template kann ich dann zum Beispiel mit {{test}} den Inhalt meiner Variablen ausgeben lassen - das klappt schonmal. 

Leider muss ich aber Daten aus der Datenbank laden die von den Artikel-IDS in der Bestellung des Kunden abhängen. Das Event MailBeforeValidateEvent beinhaltet soweit ich das gesehen habe keine Daten zur Bestellung und den bestellten Artikeln. Ich habe zumindest herausgefunden, dass in der Datenbank-Tabelle mail_template_type eine Spalte available_entities enthalten ist. Mein Verständnis ist, dass die Daten, die in der Spalte angeben sind (zum Beispiel bei der Bestellbestätigung “order” Daten), irgendwie an das Mail-Template übergeben werden. An welcher Stelle passiert das Laden und übergeben der (Order)-Daten an das Template? An welcher Stelle kann ich einhaken und abhängig von der Artikel-ID des bestellten Artikels meine zusätzlichen Informationen aus der Tabelle  extra_infos  mit übergeben?

Eventuell habe ich auch etwas übersehen und ihr habt eine Idee, wie ich im Event  MailBeforeValidateEvent  die bestellten Artikel-IDS bekommen kann?

Also $data = $event->getTemplateData(); hat auf jeden Fall die komplette Order.

Benutze das bspw. in meinem Plugin im alle verfügbaren Variablen ins Log zu schreiben.

1 „Gefällt mir“

Wow Danke Moritz, so schnell hatte ich keine Antwort erwartet. 

Ich schau mir das morgen nochmal genauer an! Eventuell war das Problem, das ich das Senden der Bestellbestätigung aus dem Backend heraus getriggert habe (unter E-Mail-Template bearbeiten und dann Test-Email senden). Hier liegen eventuell keine Orderdaten für die Bestellbestätigung vor. 

Gibt es denn eine Möglichkeit das Versenden der Bestellbestätigung mit echten Daten zu veranlassen, ohne dafür jedes Mal eine komplette Bestellung im Shop-Frontend aufzugeben?

Funktioniert alles! Vielen Dank nochmal.