Personalisatie functions: loadsubprofile
Met de {loadsubprofile}
functie kun je een subprofiel inladen en toekennen aan een
Smarty-variabele. In feite werkt de functie hetzelfde als
de {loadprofile}
functie, met wat aanvullende opties
specifiek voor subprofielen.
Benodigde parameters
De functie {loadsubprofile}
accepteert meerdere parameters. De volgende vier
zijn het belangrijkst:
Parameter | Beschrijving |
---|---|
id | Het ID van het subprofiel dat je direct wilt ophalen. |
source | De databron waaruit gezocht moet worden (zoals een database, collectie of selectie). |
assign | De naam van de Smarty-variabele waarin je het resultaat opslaat. (verplicht) |
profile | Filtert de resultaten op subprofielen die bij een specifiek profiel horen. |
Minimaal één van de parameters id
of source
is vereist.
Ophalen van subprofielen op basis van een ID
Als je het ID van een subprofiel weet, kun je dit direct gebruiken om het subprofiel op te halen:
{loadsubprofile id=12345 assign=extra1}
{loadsubprofile id=34567 assign=extra2}
We hebben ook informatie over andere subprofielen, namelijk:
- {$extra1.naam|escape}
- {$extra2.naam|escape}
De variabele die je opgeeft bij assign bevat alle velden van het subprofiel. Je kunt deze gebruiken zoals je gewend bent bij {$subprofile}.
Zoeken naar subprofielen in een collectie of miniselectie
Als je het subprofiel-ID niet kent, kun je zoeken op basis van profielkenmerken.
Gebruik dan het attribuut source
in plaats van id
. Daarmee geef je aan in welke
database en collectie (of selectie) gezocht moet worden:
{loadsubprofile source="mijn_database:mijn_collectie" 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}
In dit voorbeeld zoeken we naar een subprofiel in de collectie mijn_collectie
van database mijn_database
, met voornaam Johan en achternaam Jansen. De naam van
de database en collectie worden gescheiden met een dubbele punt :
.
Je kunt ook zoeken binnen selecties en miniselecties:
{loadsubprofile source="mijn_database.mijn_selectie:mijn_collectie" ...}
{loadsubprofile source="mijn_database:mijn_collectie.mijn_miniselectie" ...}
{loadsubprofile source="mijn_database.mijn_selectie:mijn_collectie.mijn_miniselectie" ...}
{loadsubprofile source="mijn_database.mijn_selectie.mijn_subselectie:mijn_collectie.mijn_miniselectie" ...}
Gebruik een punt .
om een selectie of miniselectie te specificeren, en een
dubbele punt :
om database en collectie van elkaar te scheiden.
Filteren op profiel
Wil je alleen subprofielen ophalen die horen bij een specifiek profiel? Gebruik dan het attribuut profile. Dit filtert op subprofielen die gekoppeld zijn aan dat profiel:
{loadsubprofile source="mijn_database:mijn_collectie" profile=1234 voornaam="Johan" achternaam="Jansen" assign="johan_jansen"}
In de praktijk gebruik je zelden een vast profiel-ID zoals 1234
. Meestal gebruik
je het ID van het profiel waarvoor het document gepersonaliseerd wordt, via
$profile.id
:
{loadsubprofile source="mijn_database:mijn_collectie" profile=$profile.id voornaam="Johan" achternaam="Jansen" assign="johan_jansen"}
Extra opties
Naast id
, source
, assign
en profile
kun je de volgende aanvullende parameters gebruiken:
Parameter | Beschrijving |
---|---|
multiple | Zet op true om meerdere subprofielen op te halen. |
limit | Beperk het aantal resultaten wanneer multiple=true is. |
orderby | Sorteer de resultaten, bijvoorbeeld orderby="datum desc" of orderby="id" . |
Alleen het eerste subprofiel wordt gebruikt
Als er meerdere subprofielen voldoen aan de zoekcriteria, dan wordt alleen het eerst gevonden subprofiel toegekend aan de variabele. Dit is het subprofiel met het laagste ID. Met het optionele attribuut "orderby" kun je invoeren dat je de subprofielen op een andere manier wilt sorteren:
{loadsubprofile source="mijn_database:mijn_collectie" achternaam="Jansen" orderby="voornaam" assign="first"}
{loadsubprofile source="mijn_database:mijn_collectie" 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 subprofielen ophalen
Mocht je nou álle gevonden subprofielen willen gebruiken, dan kun je het attribuut
"multiple" toevoegen. Er wordt dan een array van subprofielen ingeladen, waar je
met een {foreach}
blok doorheen kunt lopen:
{loadsubprofile source="mijn_database:mijn_collectie" achternaam="Jansen" orderby="voornaam" assign="subprofiles" multiple=true}
De volgende personen hebben de achternaam Jansen:
{foreach $subprofiles as $item}
{$item.voornaam|escape} {$item.achternaam|escape}
{/foreach}
Je kunt eventueel het aantal resultaten beperken met limit
:
{loadsubprofile ... assign="subprofiles" multiple=true limit=10}
Een praktijkvoorbeeld
Deze functie kun je onder meer gebruiken om de laatste bestelling uit een collectie met bestellingen te halen.
Je gebruikt dan het profile
attribuut omdat je wilt zoeken binnen de bestellingen van het huidige
profiel, en het attribuut orderby
om te zoeken naar de laatste bestelling:
{loadsubprofile source="mijn_database:orders" profile=$profile.id orderby="id desc" assign=lastorder}
{$lastorder.datum} {$lastorder.waarde}