Variablen an E-Mail-Template übergeben

Wie lassen sich bei Shopware 5 in einem Plugin Variablen an ein E-Mail-Template übergeben? Ich habe den context an die createMail()-Funktion übergeben, aber diese Variablen werden nicht im E-Mail-Template ausgegeben.

Mein Code sieht aktuell so aus:

public static function getSubscribedEvents() {
    return array(
        'Shopware_CronJob_CheckCustomerGroup' => 'onCronjobExecute'
    );
}

/**
 * Checks the eligible customer discount group for each customer
 *
 * @param Shopware_Components_Cron_CronJob $job
 */
public function onCronjobExecute(\Shopware_Components_Cron_CronJob $job) {
                    /** send a mail with shopware mail template */
                    $mailTemplate = $this->container->get('models')->getRepository(Mail::class)->findOneBy(['name' => "CustomerGroupChange"]);

                    if (!$mailTemplate instanceof Mail) {
                        return;
                    }

                    try {

                        $mail = Shopware()->TemplateMail()->createMail(
                            $mailTemplate->getName(),
                            [
                                'sTotal' => $total,
                                'sTotallyNot' => 'lol',
                            ],
                            Shopware()->Shop()
                        );
                        $mail->addTo("lorem@ipsum.do");
                        $mail->send();
                    } catch (Exception $e) {
                        $this->logger->addError($e->getMessage());
                    }
}

Im E-Mail-Template „CustomerGroupChange“ verwende ich die o.g. Variablen so: {$sTotallyNot} {$sTotal} - Leider erscheint da bei mir gar nichts, selbst der lol-String nicht.

Wie wende ich den context richtig an?

Moin :slight_smile:

$mailTemplate->getContext() statt Shopware()->Shop()

Quelle: shopware/Mail.php at b206fe23b16f8a4eaa91bf825a1f61bba1c3a469 · shopware/shopware · GitHub

Zeile 326

1 Like

Moin Steve,
Danke! Mit deiner Hilfe habe ich es hinbekommen.

Falls jemand das selbe Problem hat, mit folgendem Code habe ich es hinbekommen das die Variablen im E-Mail-Template ankommen:

                    $shop = Shopware()->Models()->getRepository(Shop::class)->getActiveDefault();
                    
                    /** send a mail with shopware mail template */
                    $mailTemplate = $this->container->get('models')->getRepository(Mail::class)->findOneBy(['name' => "CustomerGroupChange"]);

                    if (!$mailTemplate instanceof Mail) {
                        return;
                    }

                    try {

                        $mail = Shopware()->TemplateMail()->createMail(
                            $mailTemplate->getName(),
                            array_merge(
                                [
                                    'sTotal' => $total,
                                    'sTotallyNot' => 'lol',
                                ],
                                $mailTemplate->getContext()
                            ),
                            $shop
                        );
                        $mail->addTo("db@web-labels.de");
                        $mail->send();
                    } catch (Exception $e) {
                        $this->logger->addError($e->getMessage());
                    }

Wichtig war wohl den E-Mail Context mit dem vorhanden Context zu mergen. Und der Dritte Parameter muss die aktive Shop-Instanz sein.

Thema kann geschlossen werden.

1 Like