Personalisatie gebruiken
SMTPeter biedt vele mogelijkheden om e-mails te personaliseren. Personalisatie is belangrijk om een goede indruk te maken en de aandacht van de lezer vast te houden. Hieronder wordt de syntax uitgelegd aan de hand van een aantal voorbeelden, zodat je direct een beeld hebt bij de mogelijkheden van deze toepassing.
De volgende onderwerpen komen aan bod:
- Variabelen
- Inhoud van variabelen veranderen
- Simpele berekeningen
- Conditionele statements
- Data uit arrays opvragen en gebruiken
- Toekennen van variabelen
- Gebruik van accolades
- Layout
Variabelen
Laten we starten met het uitleggen van de variabelen. Een variabele ziet er
als volgt uit: {$
naam van de variabele }
.
Er zijn een aantal variabelen die we veelvuldig voorbij zien komen,
bijvoorbeeld {$firstname}
, {$age}
en {$city}
.
In het algemeen moet een variabele aan de volgende criteria voldoen:
- is omringd met accolades;
- beginnen met een
$
teken; - kan alphanumerieke karakters bevatten. Mag niet met een cijfer beginnen;
- kan een verbindingsstreepje (-) en/of lage streepje (_) bevatten;
- kan niet beginnen met verbindingsstreepje of lagestreepje;
- is hoofdlettergevoelig, wat betekent dat
{$NAME}
anders is dan{$name}
.
De volgende tabel weergeeft alle variabelen:
Syntax | Betekenis |
---|---|
{$foo} | Laat een simpele variabele zien (geen array/object). |
{$foo[4]} | Laat het 5de element van een 'zero-indexed array' zien. |
{$foo.bar} | Laat de "bar" value van een object zien. |
Met deze notaties kun je combinaties maken. Voorbeelden van combinaties zijn:
Syntax | Betekenis |
---|---|
{$foo.bar.baz} | Laat de value zien van de "baz" key binnen de array "bar" wat behoort tot $foo. |
{$foo[4].baz} | Laat de value zien van de "baz" key binnen het 5de element van $foo. |
{$foo.bar.baz[4]} | Laat het 5de element van "baz" zien, die in "bar" zit en onderdeel is van $foo. |
Het is mogelijk om met een index nummer toegang te krijgen tot elementen in een array, als een variabele een object is. Let erop dat je ook hier start vanaf 0.
Verander inhoud van variabelen
Je kunt de inhoud van je variabelen veranderen door modifiers toe te voegen. Zo is het bijvoorbeeld mogelijk om alle content in hoofdletters te weergeven of om de lengte te berekenen van een string of een hash som. Een volledige lijst van alle mogelijke bewerkingen en corresponderende functionaliteit is hier te vinden. In het volgende voorbeeld zie je hoe modifiers worden gebruikt om de lengte van de naam variabele weer te geven:
Hello {$name|escape},
Your name {$name|escape} is {$name|strlen} characters long.
Bye!
Simpele berekeningen
Variabelen met een numerieke waarde, worden gebruikt om simpele berekeningen te doen. Net zoals de 'normale variabelen', moeten alle berekeningen binnen de accolades worden uitgevoerd. Bijvoorbeeld:
{$var + 10}
Naast de accolades gelden de vanzelfsprekende mathematische regels.
De standaard mathematische operators (+
, -
, *
, /
) en de modulus
operator (%
) zijn dus beschikbaar. Onthoud dat als een waarde niet bestaat
of geen numerieke inhoud bevat, de waarde 0 wordt toegekend.
Conditionele statements
Een van de hoekstenen van elke programmeertaal zijn conditionele statements.
Een conditioneel block begint altijd met het {if}
keyword (altijd met accolades),
gevolgd door een statement dat wordt getest/uitgevoerd. Een conditioneel blok
eindigt altijd met de if closing tag {/if}
. Een conditioneel blok wordt alleen
uitgevoerd als het statement binnen het {if}
gedeelte evalueert als true.
In het volgende voorbeeld wordt de text "Hello John" alleen weergegeven als
de waarde van de variabele $name
gelijk is aan "John".
{if $name == "John"}Hello John{/if}
Maar wat als er ook een "Sarah" in je mailinglist zit? Je wilt niet dat zij niets ontvangt. Dit is een situatie waar de {elseif} om de hoek komt kijken.
{if $name == "John"}Hello John{elseif $name == "Sarah"}Hello Sarah{/if}
Het kan ook voor komen dat we in een bepaalde situatie niets aan "John"
en "Sarah" willen laten weten. In dat geval gebruiken we het {else}
keywoord. Het stukje code na het {else}
keywoord wordt uitgevoerd als
geen van de voorgaande statements evualeren tot true.
{if $name == "John"}
Hello John
{elseif $name == "Sarah"}
Hello Sarah
{else}
Hello anybody else
{/if}
Dit is natuurlijk een zeer slecht voorbeeld van hoe je een gepersonaliseerde aanhef schrijft. Je conditionele blok moet in dit geval namelijk zo groot zijn als de lijst met alle namen van de wereld.
Een beter voorbeeld is uiteraard:
{if $name == ''}
Dear subscriber,
{else}
Dear {$name},
{/if}
Afhankelijk van de inhoud van de variabele wordt bekeken welk blok moet worden
uitgevoerd. Stel dat de $name
variabele geen waarde heeft, dan wordt dat blok {if}
uitgevoerd. De conditie evualeert immers tot true. Als de eerste conditie evalueert
tot false wordt het else blok uitgevoerd.
In het bovenstaande voorbeeld is de operator ==
gebruikt. Dit betekent 'is gelijk aan'.
De conditie evalueert tot true als de linkerkant gelijk is aan de rechterkant. De
operator ==
is een van de vele operators die je kunt gebruiken om de condities voor
de statements op te bouwen. Hier is de complete lijst:
Syntax voorbeeld | Betekenis |
---|---|
$a == $b | $a en $b zijn gelijk |
$a != $b | $a en $b zijn niet gelijk |
$a > $b | $a is groter dan $b |
$a >= $b | $a is groter of gelijk aan $b |
$a < $b | $a is kleiner dan $b |
$a <= $b | $a is kleiner of gelijk aan $b |
$a AND $b | $a en $b zijn true |
$a OR $b | $a of $b (of beide) zijn true |
not $a | Tegengestelde, niet gelijk aan $a evalueert tot true |
Met de eerste zes operators (== tot aan <=) vergelijk je $a en $b met elkaar.
De uitkomst van de conditie evalueert tot true als de twee geteste waardes
gelijk zijn aan elkaar. De uitkomst van de conditie evalueert tot false als
de twee geteste waardes niet gelijk zijn aan elkaar. Met de volgende operators
in de bovenstaande tabel (AND en OR) kun je statements combineren.
Het komt vaak voor dat conditionele blokken te groot of te complex worden.
Je kunt lange of complexe blokken inkorten door meerdere statements binnen
een {if}
blok op te nemen. Gebruik hiervoor dan de AND en/of OR operators.
De AND en/of OR operators combineren de waardes van $a en $b en evalueert
de uitkomst tot true of false. De volgende tabel laat zien hoe dat in z'n
werk gaat.
Voor AND geldt:
$a | $b | resultaat |
---|---|---|
true | true | true |
true | false | false |
false | true | false |
false | false | false |
Voor OR geldt:
$a | $b | resultaat |
---|---|---|
true | true | true |
true | false | true |
false | true | true |
false | false | false |
Je kunt AND bijvoorbeeld op deze manier gebruiken:
{if $a >= $b AND $b <= $c}true{else}false{/if}
In het bovenstaande stukje script wordt eerst $a >= $b
getest. Alleen als de uitkomst
evalueert tot true wordt $b <= $c
getest. Als blijkt dat ook deze uitkomst evalueert
tot true, wordt daadwerkelijk true
geprint. Anders (else) wordt false
uitgeprint.
Dan is er ook nog de not
operator. Deze operator keert de waarde om die wordt
getest. Dus true wordt false en false word true. Tot slot, het is goed om te weten
dat binnen een {if}
statement een variabele wordt omgezet tot een boolean.
De variabele kan een lege string bevatten of de waarde 0. In dat geval evalueert
de uitkomst tot false. Omgekeerd evalueert de uitkomst tot true.
Foreach
Het komt vaak voor dat je een collectie van data (een array) tot je beschikking hebt.
Met deze data wil je graag dingen doen, zoals het opzoeken van een bepaald item.
Je moet dan door alle items loopen. Aan de hand van een voorbeeld laten we alle
leden van een voetbalteam zien. Deze leden staan in een $soccerTeam
array opgeslagen.
Alle leden van het team kunnen worden opgevraagd door middel van een foreach
statement.
De syntax is recht toe, recht aan:
{foreach $player in $soccerTeam}
{$player.name}
{/foreach}
Deze loop itereert over de items (team leden) van $soccerTeam
en kent vervolgens
elk teamlid toe aan de variabele $player
. Binnen in het foreach blok kan je van alles
doen met de output. Je kunt bijvoorbeeld een HTML lijst genereren de voetballers
van dat team. Dit is waar het iets complexer wordt..
Natuurlijk ondersteunen we ook het loopen over arrays die niet gestandaardiseerde keys bevatten.
{foreach $list as $key => $value}
Key {$key} contains {$value}.
{/foreach}
Er wordt hier gebruik gemaakt van de mogelijkheid om de $key
en $value
waardes op
te geven en hier de waardes in op te slaan. De daadwerkelijke waardes worden
opgeslagen door middel van elke iteratie. Tot slot, soms wil je dat code wordt
uitgevoerd terwijl er misschien helemaal geen data is. Dit kan worden gedaan met
behulp van een {foreachelse}
statement.
{foreach $item in $list}
{$item.name}
{foreachelse}
No items in list.
{/foreach}
Dit foreachelse
statment wordt alleen uitgevoerd als er geen data is. Dit blok
wordt dan ook volkomen genegereerd als er wel data is.
Toekennen van variabelen
Het is mogelijk om waardes toe te voegen tijdens runtime. Dit kun je bijvoorbeeld gebruiken om de totale prijs te berekenen van een samenstelling aan gekochte items. Of om een bepaald item te herinneren binnen in een foreach statemement. Je kunt variabelen op de volgende manier toekennen:
{assign $item to $topitem}
Na dit statement is de variabele $topitem
beschikbaar en neemt het over wat $item
bevatte wanneer de mail werd samengesteld en verzonden naar de ontvanger.
Dit stelt je in staat om bijvoorbeeld dit soort regels te schrijven:
{foreach $item in $list}
{assign $total + $item.price to $total}
{if $item.price > $topitem.price}
{assign $item to $topitem}
{/if}
{/foreach}
Dit zorgt ervoor dat uiteindelijk de meest dure items in de $topitem
variabele
worden ondergebracht. De totale prijs wordt ondergebracht in $total
.
Gebruik van accolades
De syntax is sterk gebasseerd op accolades {}
. De accolades kunnen/mogen niet
voorkomen in de tekst, zonder naar een valide syntax te verwijzen. Het kan voorkomen
dat je toch accolades moet gebruiken in de tekst. In dat geval kun je het beste
{ldelim}
gebruiken om een {
toe te voegen in je tekst. Voor een }
kun je
{rdelim}
gebruiken. Op deze manier wordt de tekst niet als syntax aangemerkt
en dus niet verwerkt.
Denk om de layout
De hierboven getoonde scripts zijn op een bepaalde manier geformateerd. Door middel van nieuwe regels, indentatie etc. zijn de scripts beter te lezen. Deze manier van werken valt aan te raden, omdat de foutendetectie veelal gemakkelijker is. Echter, het kan zijn dat de uitkomst van alle opmaak niet gewenst is. In dat geval kunnen een paar kleine veranderingen een groot effect hebben. Hieronder wordt aan de hand van voorbeelden uitgelegd hoe je met de opmaak kunt omgaan.
{foreach $player in $soccerTeam}
{$player.name}
{/foreach}
Voetbalteam array: `["Ronaldo", "Messi", "Ibrahimovic"]`;
Evalueert tot:
Ronaldo
Messi
Ibrahimovic
Dit is waarschijnlijk niet het gewenste resultaat dat je voor ogen had. Maar dit is precies wat je krijgt, omdat er een nieuwe regel in combinatie met indentatie rondom de variabele wordt gebruikt. Om een lijst van de namen te generen, zonder extra spaties kan je het beste deze foreach loop opzetten:
{foreach $player in $soccerTeam}
{$player}
{/foreach}
Minder leesbaar, maar precies wat je voor ogen had.
Ronaldo
Messi
Ibrahimovic