# Order Confirmation E-Mail: Eigenen Smarty Modifier verwenden

**URL:** <https://forum.shopware.com/t/order-confirmation-e-mail-eigenen-smarty-modifier-verwenden/56894>\
**Category:** Programmierung\
**Created:** [5. Dezember 2018 um 15:08 UTC](https://forum.shopware.com/t/order-confirmation-e-mail-eigenen-smarty-modifier-verwenden/56894 "2018-12-05T15:08:01Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![morty](https://avatars.discourse-cdn.com/v4/letter/m/65b543/32.png) [@morty](https://forum.shopware.com/u/morty)\
**Post date:** [5. Dezember 2018 um 15:08 UTC](https://forum.shopware.com/t/order-confirmation-e-mail-eigenen-smarty-modifier-verwenden/56894/1 "2018-12-05T15:08:01Z")

</div>

Hallo zusammen,

in der Bestellbestätigungsmail möchte ich gerne einen eigenen Smartymodiefier verwenden.

Generisch können Modifier&nbsp;im Frontend geladen werden, diese stehen dann aber nicht im Backend oder in den E-Mail-Templates zur Verfüfung.  
Für die E-Mail-Vorlagen und die Vorschau im Backend,&nbsp;sowie den Test-Versand dort habe ich das über die eigene Registrierung in Events&nbsp;geschafft.

```
public static function getSubscribedEvents()
{
    return ['Enlight_Controller_Action_PreDispatch_Backend_Mail' => 'registerSmartyModifier'];
}

```

Meine Erwartung war nun, dies für die Bestätigungsmail am ende des Bestellprozesses ebenso bewerkstelligen zu können.  
Die Nutzung von&nbsp; **Enlight\_Controller\_Action\_PreDispatch\_Frontend\_Checkout** &nbsp;blieb hier ohne Erfolg (und hätte ja ohnehin über die generische Registrierung funktionieren müssen).

Wie würdet ihr vorgehen?

Herzlichen Dank!

---

<div class="post-metadata">

**Author:** ![Lukaschel](https://avatars.discourse-cdn.com/v4/letter/l/e56c9b/32.png) [@Lukaschel](https://forum.shopware.com/u/Lukaschel)\
**Post date:** [5. Dezember 2018 um 19:59 UTC](https://forum.shopware.com/t/order-confirmation-e-mail-eigenen-smarty-modifier-verwenden/56894/2 "2018-12-05T19:59:36Z")

</div>

Hallo,

was soll der Modifier in der Bestätigungsmail genau tun?  
&nbsp;

Grüße Lukas

---

<div class="post-metadata">

**Author:** ![morty](https://avatars.discourse-cdn.com/v4/letter/m/65b543/32.png) [@morty](https://forum.shopware.com/u/morty)\
**Post date:** [6. Dezember 2018 um 10:53 UTC](https://forum.shopware.com/t/order-confirmation-e-mail-eigenen-smarty-modifier-verwenden/56894/3 "2018-12-06T10:53:22Z")

</div>

Hallo Lukas,

der Modiefier holt anhand der Artikelnummer eines Produktes den Preis der primären&nbsp;Produktvariante.  
Um nicht in jedem Kontext in dem es gebraucht wird (Detailansicht, Warenkorbansicht, Checkout, E-Mail-Templates im Backend, E-Mail-Templates im Frontend) das entsprechende Event bemühen zu müssen habe ich mich für einen Modiefier entschieden.

Vielen Dank,  
Morty

---

<div class="post-metadata">

**Author:** ![ahmadsaad](https://avatars.discourse-cdn.com/v4/letter/a/65b543/32.png) [@ahmadsaad](https://forum.shopware.com/u/ahmadsaad)\
**Post date:** [6. Dezember 2018 um 14:15 UTC](https://forum.shopware.com/t/order-confirmation-e-mail-eigenen-smarty-modifier-verwenden/56894/4 "2018-12-06T14:15:58Z")

</div>

Hallo @morty‍,

ich bin nicht sicher, aber wie ich verstehe von Shopware Code:

Email Template benutzen nicht das Frontend View Template Engine, trotzem&nbsp; [TemplateMail](https://github.com/shopware/shopware/blob/5.5/engine/Shopware/Components/TemplateMail.php)&nbsp; und [StringCompiler](https://github.com/shopware/shopware/blob/5.5/engine/Shopware/Components/StringCompiler.php) .

Service [Factory](https://github.com/shopware/shopware/blob/5.5/engine/Shopware/Components/DependencyInjection/Bridge/TemplateMail.php#L41) erstelle das [templatemail](https://github.com/shopware/shopware/blob/5.5/engine/Shopware/Components/DependencyInjection/services.xml#L100) Service und sein&nbsp;StringComplier , das benutzen das Shop [template](https://github.com/shopware/shopware/blob/5.5/engine/Shopware/Components/DependencyInjection/services.xml#L61) Service aber bevor deine Smarty Modifer würde registeriet.

deine Lösung hier ist decorate oder replace ein von diese Services&nbsp;templatemail, template und registeren deine Modifer dort.

mehr info über Service&nbsp;Subscribers findest du hier:

> **[Best practices of Shopware plugin development](https://developers.shopware.com/blog/2015/11/11/best-practices-of-shopware-plugin-development/#services)**
>
> Developing a Shopware plugin is quite easy: Create some directories and a Bootstrap.php file, register some events, add some
> templates - done.
> Of course it

[https://developers.shopware.com/developers-guide/legacy-plugin-system/#decorate-a-service](https://developers.shopware.com/developers-guide/legacy-plugin-system/#decorate-a-service)

&nbsp;

VG,

Tel.: +49 755&nbsp;- 183 990 00 | Web:&nbsp;[http://enbit.de/](http://enbit.de/)

---

<div class="post-metadata">

**Author:** ![morty](https://avatars.discourse-cdn.com/v4/letter/m/65b543/32.png) [@morty](https://forum.shopware.com/u/morty)\
**Post date:** [7. Dezember 2018 um 10:27 UTC](https://forum.shopware.com/t/order-confirmation-e-mail-eigenen-smarty-modifier-verwenden/56894/5 "2018-12-07T10:27:50Z")

</div>

Hi @ahmadsaad‍,

danke, für deine Antwort und dafür, dass du dir die Mühe gemacht hast einen Blick in den Code zu werfen. Ich habe mich mal auf den Weg gemacht, deinen Hinweisen zu folgen.

Wenn ich dich richtig verstehe, empfielst du die Verwendung eines Decorators für [TemplateMail](https://github.com/shopware/shopware/blob/5.5/engine/Shopware/Components/TemplateMail.php)&nbsp;bzw die [Factory](https://github.com/shopware/shopware/blob/5.5/engine/Shopware/Components/DependencyInjection/Bridge/TemplateMail.php#L41).  
In den Beispielen und auch im Code verwenden die Decorators immer ein das Interface der zu dekorierenden Klasse, das ist hier leider nicht möglich.&nbsp;Weder die [Factory](https://github.com/shopware/shopware/blob/5.5/engine/Shopware/Components/DependencyInjection/Bridge/TemplateMail.php#L41) noch die [TemplateMail Klasse](https://github.com/shopware/shopware/blob/5.5/engine/Shopware/Components/TemplateMail.php)&nbsp;implementieren ein Interface.

Momentan scheint es mir nicht möglich an das Template heranzukommen, da auf dieser Ebene – wenn ich das richtig sehe – auch kein Replace möglich ist.

Gibt es sonst noch Ideen oder habe ich vielleicht etwas nicht beachtet?

Vielen Dank!  
Morty

---

<div class="post-metadata">

**Author:** ![ahmadsaad](https://avatars.discourse-cdn.com/v4/letter/a/65b543/32.png) [@ahmadsaad](https://forum.shopware.com/u/ahmadsaad)\
**Post date:** [7. Dezember 2018 um 11:58 UTC](https://forum.shopware.com/t/order-confirmation-e-mail-eigenen-smarty-modifier-verwenden/56894/6 "2018-12-07T11:58:47Z")

</div>

Hallo @morty

Du brauchst hier keine neue class.&nbsp;

Einfach nehmen die originalen service anderen dass template und dann set das service nochmal zu container.(vielleicht funktioniert ohne reset ich weiß nicht genau probiere die beiden Lösungen) .

&nbsp;

Hinweis : wie du kannst by factory sehen das Template gehört das stringcompiler nicht das templatemail service.&nbsp;

Also:

1- get orignial service.&nbsp;

2- get stringcompiler von diese service =\> getStringCompiler()

3- get view gehört diese stringcompiler =\> getView()

Register deine modifer.&nbsp;

&nbsp;

Ob nicht funktioniert probier,&nbsp; das service nochmal zu container hinzufügen.

$this-\>container-\>set( $originalService )

&nbsp;

Vg,

Ahmad

---

<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:** [7. Dezember 2018 um 12:37 UTC](https://forum.shopware.com/t/order-confirmation-e-mail-eigenen-smarty-modifier-verwenden/56894/7 "2018-12-07T12:37:45Z")

</div>

Schreib einfach einen CompilerPass der den Ordner hinzufügt

> <https://github.com/FriendsOfShopware/FroshProfiler/blob/master/Components/CompilerPass/AddTemplatePluginDirCompilerPass.php>

---

<div class="post-metadata">

**Author:** ![morty](https://avatars.discourse-cdn.com/v4/letter/m/65b543/32.png) [@morty](https://forum.shopware.com/u/morty)\
**Post date:** [10. Dezember 2018 um 12:51 UTC](https://forum.shopware.com/t/order-confirmation-e-mail-eigenen-smarty-modifier-verwenden/56894/8 "2018-12-10T12:51:54Z")

</div>

@Shyim‍, herzlichen Dank für den Hinweis. Das funktioniert famos und ist verhältnismäßig schlicht umzusetzen.

@ahmadsaad‍ ‍,&nbsp;danke, für deine Mühe, auch dein Ansatz hat mir gut gefallen und könnte funktionieren, scheint im Vergleich etwas schwergewichtiger.
