Handbuch zur E-Mail-Template-Erstellung

mailworx Vorlagen-Syntax-Bedingungen

mailworx Vorlagen verfügen über eine eigene, an die mailworx Vorlagen-Tags angepasste Abfragesyntax. Dadurch können Vorlagen auf Basis von Abonnentenfeldern, Kampagneneigenschaften oder Abschnitts-Informationen anders aufgebaut werden. Kurz gesagt: die Vorlagensyntax unterstützt if-then-else-Regeln.

Der formale Aufbau der mailworx Syntax:

SYNTAX := SHORT_SYNTAX | LONG_SYNTAX.
SHORT_SYNTAX := "<mws:" SHORT_SYNTAX_ELEMENT " />".
SHORT_SYNTAX_ELEMENT := VARIABLE_CONSTRUCT.
VARIABLE_CONSTRUCT := "variable name='" {chars} "'" { value='" {chars} "'" | add='" {numbers} "'"}.
LONG_SYNTAX := "<mws:" SYNTAX_ELEMENT " >" {chars} "</mws:" SYNTAX_ELEMENT " >".
SYNTAX_ELEMENT := "global" | IF_CONSTRAINT | "else".
IF_CONSTRAINT := "if expr='" BOOL_EXPRESSION "'".
BOOL_EXPRESSION := {["and"|"or"|"xor"|"eq"] " ( " EXPRESSION "," EXPRESSION " ) "} | EXPRESSION.
EXPRESSION := IDENTIFIER OPERATOR IDENTIFIER.
OPERATOR := "=" | "!=" | "%".
IDENTIFIER := "{chars}" | "{number}" | CAMPAIGN_EXPR | AREA_EXPR | 
SUBSCRIBER_EXPR | SECTION_EXPR | VARIABLE_EXPR | TEMPLATE_EXPR.
CAMPAIGN_EXPR := "Campaign." ["ShowTableOfContents" | "SenderName" | "SenderAddress" | 
"SendType" | "Description" | "NotifyAddress" | "ShowChangeData" | 
"ShowForward" | "ShowUnsubscribe" | "Subject" | "Name"].
AREA_EXPR := "Area.". {areaName}. ".". [ "Length" ]
SUBSCRIBER_EXPR := "Subscriber." [SUB_META_EXPR | SUB_CUSTOM_EXPR].
SUB_META_EXPR := "Meta." [ "IPAddress" | "Mailformat" | "OptIn" | "RegType" ].
SUB_CUSTOM_EXPR := "Custom." {subscriberProperty}.
SUB_META_EXPR := "Meta." [ "IPAddress" | "Mailformat" | "OptIn" | "RegType" ].
SUB_CUSTOM_EXPR := "Custom." {subscriberProperty}.
SECTION_EXPR := "Section." [SEC_META_EXPR | SEC_CUSTOM_EXPR | SEC_SINGLE_EXPR].
SEC_META_EXPR := "Meta." [ "Name", "Area" ].
SEC_CUSTOM_EXPR := "Custom." {sectionProperty}.
SEC_SINGLE_EXPR := "Singleton." {fieldName}.
VARIABLE_EXPR := "$" {chars}.
TEMPLATE_EXPR := "Template." [ "IsInEditMode" ]

| …. Verbindet verschiedene Möglichkeiten mit einem ODER.
[ | ] …. Gruppiert einzelne Elemente aus welcher die Auswahl getroffen werden kann.
{ } …. Optionaler Bereich
{chars} sind beliebige Zeichen.
{number} ist eine beliebige ganze Zahl.
{subscriberProperty} sind die internen Namen beliebiger Abonnentenfelder wie z.B.: email, firstname, lastname, title, firma, company etc. Es sind jedoch keine Metafelder, sondern Abonnentenfelder, welche auch in mailworx ersichtlich sind.
{areaName} ist der Name des Bereichs, auf den zugegriffen werden soll.
{sectionProperty} sind die internen Namen der Felder des Abschnittstyps.
{fieldName} ist der Tag eines Feldes im Abschnitt. Dieser, welcher auch für die Personalisierung verwendet werden würde.

Die mailworx syntax wird mit „<mws:" eingeleitet und ist Case-Sensitiv! Die Ergebnisse der bool'schen-Abfragen hingegen nicht. Es ist also irrelevant, ob „true" oder „TRUE" oder „True" verwendet wird. Ein else-Zweig darf ohne if-Zweig nicht existieren. Die umgekehrte Möglichkeit ist verfügbar. Nach dem „if" folgt immer ein „expr=", welche die bool'sche Abfragen beinhaltet. Die bool'sche Abfragen sind mit einfachen Hochkommas umschlossen. Die Verschachtelung von if-Anweisungen ist möglich! Innerhalb des „global"-Tags können auch weitere Anweisungen vorhanden sein, zum Beispiel um Variablen für das ganze Template verfügbar zu machen, sowohl innerhalb als auch außerhalb von Abschnitten.

Mögliche Werte für die Eigenschaften

Subscriber.Meta.Mailformat := "Multipart" | "HTML" | "Text".
Subscriber.Meta.OptIn := "True" | "False".
Subscriber.Meta.RegType := "Manual" | "Imported" | "ImportUpdated" | "SelfRegistered" | "SelfUpdated".
Campaign.SendType := "Manual" | "EventDependent" | "ABSplit".

Beispiele

Einfaches If / Else

<mws:if expr='Campaign.ShowTableOfContents = "true"'>
	Hier ist der HTML-Code der nur dann gerendert wird, falls das Inhaltsverzeichnis angezeigt wird.
</mws:if>
	Theoretisch könnte auch hier noch HTML-Code stehen!
<mws:else>
	Hier ist der HTML-Code der nur dann gerendert wird, falls das Inhaltsverzeichnis NICHT angezeigt wird.
</mws:else>

Bedinungen verknüpfen

<mws:if expr='or ( Subscriber.Custom.lastname = "Mustermann", Subscriber.Custom.email = Campaign.SenderAddress )'>
	Oder-Syntax.
</mws:if>

<mws:if expr='and ( Subscriber.Custom.lastname = "Mustermann", Subscriber.Custom.email = Campaign.SenderAddress )'>
	Und-Syntax.
</mws:if>

<mws:if expr='eq( Subscriber.Custom.lastname = "Mustermann", Subscriber.Custom.email = Campaign.SenderAddress )'>
	Equal-Syntax.
</mws:if>

<mws:if expr='xor ( Subscriber.Custom.lastname = "Mustermann", Subscriber.Custom.email = Campaign.SenderAddress )'>
	Exklusives Oder-Syntax.
</mws:if>

Verknüpfen von mehreren Operatoren:

<mws:if expr='and ( or ( Subscriber.Custom.lastname = "Mustermann", 
Subscriber.Custom.email = Campaign.SenderAddress ), Subscriber.Custom.firstname  != "" )'>
	Dieser Bereich ist die Oder-Syntax.
</mws:if>

Zugriff auf Bereiche

<mws:if expr='Area.left.Length != 0‘>
	Definition des Bereiches, der somit nur angezeigt wird, wenn auch Abschnitte 
	für diesen Bereich vorhanden sind.
</mws:if>

Überprüfen ob die section in einer bestimmten Area vorhanden ist

<mws:if expr='Section.Meta.Area = "left"'>
	Verwendbar in einem Abschnitt, zum Prüfen ob der Abschnitt in der angegebenen 
	Area angezeigt wird.
</mws:if>

Zugriff auf Abschnitte:

<mws:if expr='Section.Custom.Inhalt = "ProduktA"'>
	Zugriff auf das Feld des aktuellen Abschnitts mit dem Namen "Inhalt".
</mws:if>

<mws:if expr='Section.Singleton.Überschrift = "Produkte"'>
	Zugriff auf das Feld "Überschrift", welches in einem einmaligen Abschnitt vorkommt.
</mws:if>

Arbeiten mit Variablen

<mws:if expr='Campaign.ShowTableOfContents = "true"'>
	<mws:variable name=‘myWidth‘ value='550' />
</mws:if>
<mws: else>
	<mws:variable name=‘myWidth‘ value=‘600‘ />
</mws:else>
<table width="<mws:variable name=‘myWidth‘ />"><tr>….

<mws:if expr='$myWidth = "550"'>
</mws:if>

Solche Variablen sind allerdings nur außerhalb von Abschnitten verfügbar. Für die Verwendung von globalen Variablen, die innerhalb sowie auch außerhalb von Abschnitten verfügbar sein sollen, ist es erforderlich, das „global"-Tag zu verwenden

„Global"-Tags müssen vor dem „body"-Tag stehen! 

Am besten gleich am Anfang des Templates.
Innerhalb eines solchen „global"-Tags sind auch „if"-Anweisungen möglich.

<mws:global>
	<mws: if expr='Campaign.ShowTableOfContents = "true"' >
		<mws:variable name=‘myWidth‘ value='550' />
	</mws: if >
	<mws: else >
		<mws:variable name=‘myWidth‘ value=‘600‘ />
	</mws: else >
</mws:global>
<head></head>
<body>
<table width="<mws:variable name=‘myWidth‘ />"><tr>….

Zählen

Ermöglicht einen Zebra Effekt zu erstellen

<mws:global>
	<mws:variable name=‘zebra‘ value='0'/>
</mws:global>
…
<body>
<mw:sec_item_x>
	<mws:variable name='zebra' add='1' />
	<mws:variable name='bg' value='#FFFFFF' />
	<mws:if expr='$zebra % "2"'>
		<mws:variable name='bg' value='#CCCCCC' />
	</mws:if>
…
</mw:sec_item_x>

Vorlagendarstellung für den Kampagneneditor optimieren

Der IsInEditMode dient dazu, dass Vorlagen im Kampagneneditor gesondert behandelt werden können, damit deren optimale Darstellung auch im Editiermodus gewährleistet ist. Daher wird IsInEditMode nur in if-Bedingungen verwendet. Hier ein Besipiel dazu:

<mws:if expr='Template.IsInEditMode = "true"'>
	Hier können Sie reinen Text, HTML Code oder auch weitere if Bedingungen verwenden!
</mws:if>

And

Term 1 Term 2 Ergebnis
Ja Ja Ja
Nein Ja Nein
Ja Nein Nein
Nein Nein Nein

Or

Term 1 Term 2 Ergebnis
Ja Ja Ja
Nein Nein Nein
Ja Nein Ja
Nein Ja Ja

Eq

Term 1 Term 2 Ergebnis
Ja Ja Ja
Nein Nein Ja
Ja Nein Nein
Nein Ja Nein

Xor

Term 1 Term 2 Ergebnis
Ja Ja Nein
Nein Nein Nein
Ja Nein Ja
Nein Ja Ja

zurück