Smarty-personalisatie

In Copernica werkt personalisatie door middel van de scripttaal Smarty. Hiermee is het mogelijk om mailings, webpagina's, SMS-berichten en PDF-bestanden te personaliseren op basis van (sub)profielgegevens. Je herkent Smarty-code aan het gebruik van accolades en het dollarteken.

Voor het personaliseren van (sub)profielgegevens gebruik je de Smarty-code profile of subprofile. Die code combineer je met de naam van het veld in de desbetreffende database of collectie. Bijvoorbeeld:

  • {$profile.Voornaam}
  • {$profile.Email}
  • {$subprofile.Email}

Smarty is hoofdlettergevoelig. Personalisatie werkt alleen wanneer de gebruikte veldnaam volledig overeenkomt met de veldnaam waaraan je refereert. De variabele {$profile.voornaam} geeft bijvoorbeeld geen resultaat wanneer de veldnaam in de database 'Voornaam' is. In plaats daarvan gebruik je {$profile.Voornaam}.

Voor het gebruik van {$subprofile.VELDNAAM} geldt dat personalisatievariabelen enkel werken wanneer het subprofiel de geadresseerde is. De e-mail wordt dan verzonden naar een e-mailadres binnen het subprofiel. Wil je gegevens vanuit het subprofiel tonen in mailings die geadresseerd zijn aan het profiel zelf? Dan kun je gebruik maken van de loadsubprofile-tag.

Eenvoudige personalisatie

Stel dat je database de volgende velden bevat:

  • Aanhef
  • Naam
  • Email

Daarnaast bevat de database een profiel met de onderstaande waardes:

  • heer
  • Bakker
  • frank.bakker@voorbeeld.nl

Hiermee kun je mailings voorzien van de variabelen {$profile.Aanhef}, {$profile.Naam} en {$profile.Email}.

Bijvoorbeeld:

Beste {$profile.Aanhef} {$profile.Naam},

Je ontvangt deze e-mail omdat je bent aangemeld met het volgende e-mailadres: {$profile.Email}.

Resultaat:

Beste heer Bakker,

Je ontvangt deze e-mail omdat je bent aangemeld met het volgende e-mailadres: frank.bakker@voorbeeld.nl.

Geavanceerde personalisatie

Je kunt Smarty-code ook gebruiken om conditionele gegevens te tonen. Dat doe je door middel van if-statements.

Met de onderstaande code toon je content op voorwaarde dat het veld 'Voornaam' de waarde 'Peter' bevat:

{if $profile.Voornaam == "Peter"}

Vervolgens geef je aan welke content er getoond moet worden wanneer dit niet het geval is:

{else}

Tot slot geef je het slot van de conditie aan:

{/if}

Stel dat een database de velden 'Geslacht' en 'Achternaam' bevat. Een aanhefveld ontbreekt daarbij. Om toch een aanhef te kunnen gebruiken bepalen we deze op basis van het geslachtveld:

Geachte {if $profile.Geslacht=="Man"}heer{elseif $profile.Geslacht=="Vrouw"}mevrouw{else}relatie{/if},

In het bovenstaande voorbeeld controleren we eerst of de waarde van het veld 'Geslacht' gelijk is aan 'Man'. Zo ja, dan wordt de aanhef als 'Geachte heer' weergegeven.

Wanneer dit niet het geval is wordt er gekeken of de waarde gelijk is aan 'Vrouw'. Bij het aantreffen van die waarde wordt de aanhef als 'Geachte mevrouw' weergegeven.

Bevat het veld geen van beide waardes? Dan wordt de aanhef 'Geachte relatie' weergegeven.

Smarty-beveiliging

Als accountbeheerder heb je geen volledige controle over de gegevens die in je database of collectie worden opgeslagen. In sommige gevallen geven gebruikers zelf wijzigingen door aan profielgegevens, bijvoorbeeld bij het invullen van aanmeld- of wijzigingsformulieren. Dergelijke methodes maken het voor kwaadwillenden mogelijk om ongewenste input (zoals JavaScript of CSS) in databasevelden op te slaan.

De personalisatie-instellingen van je template of document staan standaard ingesteld om HTML hierop te filteren. Input wordt omgezet naar platte tekst zodat dergelijke scripts niet worden uitgevoerd.

Als je deze optie handmatig hebt uitgeschakeld raden we je dringend aan om gebruik te maken van de Smarty-modifier |escape. Daarmee maak je ongewenste input onschadelijk.

Voorbeeld

Je profiel bevat een veld 'Tekst' met de waarde <style type="text/css">body{ background: red; }</style>. Bij de personalisatie-instellingen van je webpagina heb je 'HTML filteren' uitgezet. Vervolgens maak je gebruik van de onderstaande Smarty-code:

{$profile.Tekst}

Doordat het veld 'Tekst' een ongefilterd script bevat wordt er bij het bezoeken van de webpagina een rode achtergrond getoond. Om dat te vermijden maak je gebruik van de |escape-modifier:

{$profile.Tekst|escape}

De {$profile.Tekst|escape}-code zorgt ervoor dat de waarde uit het databaseveld als platte tekst wordt weergegeven: <style type="text/css">body{ background: red; }</style>. Het script wordt dan ook niet uitgevoerd.

Personalisatie-opmaak

Het kan voorkomen dat databasegegevens onderling verschillen qua hoofdlettergebruik. Smarty biedt daarom specifieke functies om die verschillen op te vangen. De meest voorkomende functies bespreken we hieronder.

lower

Deze functie verwijdert alle hoofdletters. Door gebruik te maken van de code {$profile.Naam|lower} wordt de waarde 'Frank BAKKER' bijvoorbeeld als 'frank bakker' weergegeven.

ucfirst

Dit filter verandert het eerste karakter uit een string (tekenreeks) naar een hoofdletter. Stel bijvoorbeeld dat de variabele {$profile.Naam} de waarde 'frank bakker' bevat. Met de code {$profile.Naam|ucfirst} geef je de waarde als 'Frank bakker' weer.

Je kunt de bovenstaande functies ook combineren. Als de variabele {$profile.Naam} de waarde 'FRANK' bevat, dan kun je de code {$profile.Naam|lower|ucfirst} gebruiken om hoofdletters te verwijderen en het eerste teken alsnog van een hoofdletter te voorzien. De waarde wordt dan als 'Frank' weergegeven.

  • Bekijk hier nog meer personalisatiefuncties.

Personalisatie testen

Je kunt de weergave van personalisatie testen in Copernica. Dat doe je door middel van de 'Voorvertoningsmodus' in je template of document. De voorvertoning is gebaseerd op de standaardbestemming. De standaardbestemming dient zich in dezelfde database te bevinden als de ontvanger waaraan je de mailing wilt versturen.