Plugin 5.2 Mail Vorlage erstellen

Hallo zusammen,

ich bin eben dabei ein Plugin auf Basis des neuen > 5.2 Prinzips zu erstellen.
Das Plugin soll nun eine E-Mail Vorlage erstellen wenn es installiert wird.

Wie man dies mit dem alten Prinzip gemacht hat, ist mir bewusst, aber gibt es irgendwo eine Anleitung wie man das nach dem neuen Prinzip machen kann?
Ich habe bisher leider nichts dazu gefunden und nach dem alten Prinzip scheint es nicht mehr zu funktionieren.

Hoffe jemand kann mir einen Hinweis geben.

Herzlichen Dank.

Hallo,

ein solches neues E-Mail Template anzulegen, sollte nicht schwer sein. Das ist einfach ein neuer Eintrag in der s_core_config_mails. Darin in den jeweiligen Spalten wird dann Smarty Code eingetragen. Du kannst hier auch Smarty Templates von der Festplatte einbinden, wie es schon in etlichen bestehenden E-Mail Templates gemacht wird. Einfach mal daran ein Beispiel nehmen.

Gro√ü Anleitungen, wie Du dann Deine eigene E-Mail auf Basis des neu erstellten Templates versenden kannst, wirst Du kaum finden. An solchen Stellen ist Sopware schlecht bis gar nicht dokumentiert. Wenn Du Gl√ľck hast, dann findest Du noch etwas PHPDoc √ľber den Methoden. Wie gesagt, wenn Du Gl√ľck hast, das ist leider auch nicht immer so.

Da ich gerade an einem √§hnlichen Problem arbeite, kann ich Dir grob sagen, welche Datei(en) einen Blick wert sind. In der engine/Shopware/Core/sOrder.php findest Du etliche n√ľtzliche Events zum Thema E-Mail Templates.

In Deinem Spezialfall, um die Shopware interna zu verstehen, bzw. um die richtigen Events etc. zu finden, hilft wirklich leider nur Code anschauen, verstehen und seine Schl√ľsse daraus ziehen. Je n√§her man an den Core kommst, desto weniger Dokumentationsmaterial findet man dazu. Das kann ich Dir jedenfalls aus meiner Erfahrung heraus sagen. Ansonsten k√∂nnten noch folgende Beitr√§ge aus der Doku n√ľtzlich sein:

https://developers.shopware.com/developers-guide/plugin-system/

https://developers.shopware.com/plugin-guide/

 

Die meisten Guides in der Doku beziehen sich leider auch noch auf das alte Plugin System. Es gibt lediglich zwei Seiten f√ľr das neue 5.2 Plugin System: Der Upgrade Guide und der 2. Link aus der Link Liste.

 

Hoffe, ich konnte damit etwas helfen. Auf der anderen Seite muss ich fairerweise sagen, dass wir froh sein k√∂nnen, dass √ľberhaupt etwas dokumentiert ist. Andere openSource Projekte sind gar nicht dokumentiert. Und wie allgemein bekannt ist, schreiben Programmierer nicht gerne Dokus. Man sollte also mit dem Happen an Doku dankbar zufrieden sein‚Ķ Es kann auch sein, dass sie die Core Funktionen in den hauseigenen Trainings vermitteln, das wei√ü ich nicht genau. Es ist durchaus auch √ľblich, dass das Produkt selber als openSource kostenlos ist, die Dokumentation dazu aber kostet.

 

MFG 

 

derwunner

1 Like

Herzlichen Dank erstmal f√ľr Deine Antwort.

Wie man eine E-Mail mit einem gewählten Template verschickt habe ich schonmal irgendwo gefunden,
war aber glaube ich auch f√ľr das alte Plugin System wenn ich mich nicht t√§usche.

Werde hier mal ein wenig rumprobieren und auch die genannten URLs von Dir genauer ansehen.

Sollte ich irgendwas wertvolles herausfinden, gebe ich hier gerne nochmal R√ľckmeldung.

 

Vielleicht findet sich ja doch noch jemand der schonmal ein Plugin mit ähnlichen Funktionen auf Basis von > 5.2 geschrieben hat und bereit ist seine Erkenntnisse zu teilen :slight_smile:

Ok, habs nun hinbekommen die Mail-Vorlage vom Plugin erstellen zu lassen.

F√ľr diejenigen die etwas √§hnliches umsetzen m√∂chten:
Innerhalb der install Methode die createMailTemplate Methode aufrufen, die z.B. wie folgt aussehen könnte:

private function createMailTemplate()
{
    $em = $this->container->get('models');
    if(!$repository) {
        $repository = $em->getRepository(Mail::class);
    }
    $mail = $repository->findOneBy(['name' => 'myMAILTEMPLATE']);
    if(!$mail) {
        $content = "Dies ist ein Test\n\n{config name=shopName}";
        $mail = new Mail();
        $mail->setName('myMAILTEMPLATE');
        $mail->setFromMail('{config name=mail}');
        $mail->setFromName('{config name=shopName}');
        $mail->setSubject("Testmail Titel");
        $mail->setContent($content);
        $mail->setMailtype(Mail::MAILTYPE_SYSTEM);

        $em->persist($mail);
        $em->flush($mail);
    }
}

 

2 Likes

@iLuHa‚Äć , eine Frage zu deiner Maill√∂sung. Kann¬†man auch eine Einweg-Mailvorlage on-Fly machen ohne dass diese im Backend dann erscheint?

@brettvormkopp schrieb:

@iLuHa‚Äć , eine Frage zu deiner Maill√∂sung. Kann¬†man auch eine Einweg-Mailvorlage on-Fly machen ohne dass diese im Backend dann erscheint?

Wenn du die Vorlage im Backend nicht brauchst, brauchst du auch keine Vorlage erstellen.
Man kann die E-Mail auch innerhalb des PHP Codes generieren und verschicken.

Wie man das mit > 5.2 macht bin ich mir aktuell nicht sicher, mit dem alten Plugin System habe ich sowas aber schonmal realisiert.

Kann dir morgen mal einen Code-Beispiel posten, wie man eine E-Mail direkt aus dem Plugin verschickt ohne die Vorlage im Backend.
Der Nachteil daran ist eben, dass man den Mail-Text nicht √ľber das Backend ver√§ndern kann, sondern dieser dann eben Hardcoded im Plugin steht.

@brettvormkopp

Anbei ein Code Beispiel wie man eine E-Mail direkt aus dem Plugin verschicken kann (vor dem 5.2 Plugin System, weiß nicht ob es mit > 5.2 immernoch so funktioniert) ohne die Mail Vorlage im Backend.

$mail = Shopware()->Mail();
$mail->IsHTML(1);
$mail->From = Shopware()->Config()->Mail;
$mail->FromName = Shopware()->Config()->Mail;
$mail->Subject = "E-Mail Betreff";
$mail->Body = $content;
$mail->ClearAddresses();
$mail->AddAddress(email@domain.com, email@domain.com);
if (!$mail->Send()) {
    return "Beim Senden der E-Mail ist ein Fehler aufgetreten.";
} else {
    return "E-Mail wurde verschickt.";
}

√úber isHTML(1) setzt man, dass die E-Mail im HTML Format verschickt wird (0 entspricht Plaintext).
Die Absender-Adresse wird in dem Beispiel aus den Shopware Konfigurationen bezogen.
Und der Inhalt der E-Mail steht dann in der $content Variable als HTML-String.

1 Like