Personalisatie functions: loadprofile

Met de {loadprofile} functie kun je een profiel inladen en toekennen aan een Smarty-variabele. Hierdoor kun je in mailings ook verwijzen naar profielgegevens van andere profielen. Deze andere profielen mogen ook uit andere databases komen.

Ophalen van profielen op basis van een ID

Als je het ID van een profiel weet, dan kun je het profiel ophalen op basis van dit ID en toekennen aan een variabele. De naam van de variabele mag je zelf bepalen. Je kunt meerdere extra profielen inladen en elk toekennen aan een eigen variabele:

{loadprofile id=12345 assign=extra1}
{loadprofile id=34567 assign=extra2}

Hallo {$profile.naam|escape},

We hebben ook informatie over andere profielen, namelijk:
- {$extra1.naam|escape}
- {$extra2.naam|escape}

In bovenstaand voorbeeld zie je hoe je eenvoudig andere profielen kunt inladen en kunt toekennen aan Smarty variabelen. De nieuwe variabelen kun je op dezelfde manier gebruiken als de gewone {$profile} variabele, en geeft je dus toegang tot alle velden, interesses en andere eigenschappen van het profiel.

Zoeken naar profielen in een database of selectie

Als je het ID van het profiel nog niet weet kun je zoeken naar een profiel op basis van gewone profielvelden. In plaats van het attribuut "id" moet je dan het attribuut "source" gebruiken waarin je de naam van de database of selectie plaatst. Met de overige attributen bepaal je de zoek-criteria:

{loadprofile source="mijn_database" voornaam="Johan" achternaam="Jansen" assign="johan_jansen"}

{if $johan_hansen}
    Het e-mailadres van Johan Jansen is {$johan_jansen.email|escape}.
{else}
    Er is geen informatie over Johan Jansen beschikbaar.
{/if}

Hierboven zoeken we binnen de database "mijn_database" naar een profiel met de voornaam "Johan" en de achternaam "Jansen". Als het profiel wordt gevonden, wordt het toegekend aan de variabele {$johan_jansen}.

Als je niet in een complete database wilt zoeken, maar binnen een bepaalde selectie of subselectie, dan kan dit ook:

{loadprofile source="mijn_database.mijn_selectie.mijn_subselectie" ...}

Alleen het eerste profiel wordt gebruikt

Als er meerdere profielen voldoen aan de zoekcriteria, dan wordt alleen het eerst gevonden profiel toegekend aan de variabele. Dit is het profiel met het laagste ID. Met het optionele attribuut "orderby" kun je invoeren dat je de profielen op een andere manier wilt sorteren:

{loadprofile source="mijn_database" achternaam="Jansen" orderby="voornaam" assign="first"}
{loadprofile source="mijn_database" achternaam="Jansen" orderby="voornaam desc" assign="last"}

De eerste persoon met de achternaam Jansen is {$first.voornaam|escape}.
De laatste persoon met de achternaam Jansen is {$last.voornaam|escape}.

Je kunt eventueel het achtervoegsel "asc" of "desc" gebruiken om oplopend of aflopend te sorteren. Standaard wordt oplopend gesorteerd (je kunt "asc" dus net zo goed weglaten).

Meerdere matches

Mocht je nou álle gevonden profielen willen gebruiken, dan kun je het attribuut "multiple" toevoegen. Er wordt dan een collectie van profielen ingeladen, waar je met een {foreach} blok doorheen kunt lopen:

{loadprofile source="mijn_database" achternaam="Jansen" orderby="voornaam" assign="profiles" multiple=true}

De volgende personen hebben de achternaam Jansen:
{foreach $profiles as $item}
    {$item.voornaam|escape} {$item.achternaam|escape}
{/foreach}

Om te voorkomen dat het aantal gevonden profielen de spuigaten uit loopt, kun je eventueel een "limit" attribuut toevoegen:

{loadprofile ... assign="profiles" multiple=true limit=10}

Profielen die naar elkaar verwijzen

In bovenstaande voorbeelden hebben we steeds hardgecodeerde waardes gebruikt. Natuurlijk wordt het systeem pas echt krachtig als je ook weer variabelen in de attributen zelf gebruikt. Dit kan gewoon met Smarty:

{loadprofile source="regiokanteren" naam=$profile.regiokantoor assign=kantoor}

Bovenstaand voorbeeld laat zien hoe je, bijvoorbeeld, een database met regiokanteren kunt bijhouden, waarbij elk regiokantoor een eigen naam heeft (bijvoorbeeld "noord-holland", "zuid-holland", enzovoort). In je gewone profielendatabase kun je elk profiel een veld "regiokantoor" geven waarbij je verwijst naar deze naam. Met de {loadprofile} functie kun je vervolgens bij elk mailing de gegevens van het bijpassende regiokantoor inladen.