Datacollectie modifiers

Modifiers zijn doorgaans ontworpen om strings te manipuleren, zoals ucfirst voor het maken van een hoofdletter aan het begin van een string. Echter, er zijn ook modifiers die bedoeld zijn voor het manipuleren van reeksen van objecten. Als je een variabele hebt waarin bijvoorbeeld een verzameling van bestellingen of producten staat, dan kun je met deze collectie-modifiers zo'n verzameling filteren of sorteren.

Let op: het woord collectie heeft een dubbele betekenis! In de context van dit artikel bedoelen we met het woord collectie élke variabele met een verzameling of array van objecten. Dit kunnen dus verzamelingen van profielen, templates, bestellingen, producties, enzovoort zijn. De betekenis is dus ruimer dan wanneer we spreken over collecties binnen de profielenmodule, waar het woord collectie de betekenis heeft van een tweede laag onder een database waarin subprofielen kunnen worden opgeslagen.

Praktisch voorbeeld

Laten we een voorbeeld bekijken van hoe je deze modifiers zou kunnen gebruiken om een datacollectie van bestellingen te manipuleren. In dit voorbeeld gaan we uit van {$profile.bestellingen}, een collectie van subprofielen binnen een profiel. Elk subprofiel in deze collectie stelt een bestelling voor, met bijvoorbeeld een status, besteldatum en totaalbedrag als eigenschappen.

{$profile.bestellingen|filter:"status":"afgerond"|orderby:"besteldatum":"desc"|limit:5}

In dit voorbeeld wordt de filter modifier gebruikt om alleen bestellingen te selecteren die tot de status "afgerond" hebben. Vervolgens sorteert de orderby modifier deze producten op basis van hun besteldatum van hoog naar laag. Tot slot beperkt de limit modifier de uitvoer tot de 5 meest recente bestellingen.

Met deze modifiers kun je handig gegevens selecteren en presenteren binnen je mailings.

De meeste modifiers werken op alle soorten datacollecties, zoals verzamelingen van bestellingen, producten of subprofielen. Andere modifiers werken alleen op een specifiek type collectie, zoals profielen of subprofielen. Hieronder zie je beide overzichtelijk in twee tabellen.

Modifiers voor alle datacollecties

Modifier Beschrijving
filter filter items in een datacollectie op basis van gegeven criteria
orderby sorteer items in een datacollectie op basis van een veld
limit beperk items in een datacollectie op tot een maximum aantal
first neem het eerste item uit een datacollectie
last neem het laatste item uit een datacollectie

Modifiers voor specifieke types collecties

Modifier Beschrijving
in_selection filter profielen op basis van een selectie. Werkt enkel op profielverzamelingen.
in_miniselectie filter subprofielen op basis van een miniselectie. Werkt enkel op subprofielverzamelingen

Filter

De modifier 'filter' toetst alle data in een datacollectie met een gegeven voorwaarde. Alleen wanneer een veld voldoet aan de gegeven voorwaarde, wordt het doorgelaten door het filter. Je kunt dit gebruiken om bijvoorbeeld een verzameling van producten of bestellingen te reduceren tot alleen de relevante items.

{$profile.bestellingen|filter:totaalbedrag:>:15}

Zoals je in bovenstaand voorbeeld ziet, accepteert de modifier drie parameters: het veld waarop moet worden gefilterd ("totaalbedrag"), de waarde die het veld moet hebben ("15"), en de operator (">").

Met de operator bedoelen we de manier waarop het veld moet worden vergeleken, zoals gelijk-aan, kleiner-dan of groter-dan. Mogelijke waarden voor de operator zijn: <, <=, >, >=, =, ==, !=. Extra operators kunnen beschikbaar zijn afhankelijk van het type van de variabele waar je op filtert.

De modifier kan ook met één of twee parameters worden aangeroepen:

{$profile.bestellingen|filter:status:afgerond}
{$profile.producten|filter:sku}

Met twee parameters: hiermee voer je een ==-vergelijking uit. Bijvoorbeeld, {$profile.bestellingen|filter:status:afgerond} filtert de bestellingen met de status "afgerond".

Met één parameter: Hiermee controleer je of veld bestaat in de inkomende data en niet null is. Bijvoorbeeld, {$profile.producten|filter:sku} filtert de producten waarvoor een SKU beschikbaar is.

Opmerking: Dit werkt momenteel alleen voor top-level eigenschappen. Als veldnaam kun je dus geen geneste velden opgeven, zoals "author.nationality".

Ordering

De modifier 'orderby' sorteert alle data in een datacollectie op basis van het gegeven veld in de data waarop deze modifier wordt toegepast.

Deze modifier heeft de vorm: orderby:field:direction. De field parameter bepaalt op welk veld de gegevens gesorteerd moet worden. De direction wordt gebruikt om te specificeren in welke volgorde de data gesorteerd moet worden: asc voor oplopend, desc voor aflopend. Het is mogelijk om de orderby-modifier aan te roepen zonder direction, in welk geval asc wordt ingevuld voor de direction parameter.

{$profile.bestellingen|orderby:"totaalbedrag":"desc"}
{$profile.bestellingen|orderby:"totaalbedrag"}

Opmerking: Dit werkt momenteel alleen voor top-level eigenschappen. Als veldnaam kun je dus geen geneste velden opgeven, zoals "author.nationality".

Limit

De modifier 'limit' beperkt de hoeveelheid items in een datacollectie. Deze modifier kan beschreven worden als: limit:aantal. De aantal parameter bepaalt het maximale aantal items die er door het filter heen gelaten wordt. Wanneer dit getal bereikt is, wordt de datacollectie afgekapt. Om bijvoorbeeld 5 bestellingen op te halen, gebruik je:

{$profile.bestellingen|limit:5}

First

De modifier 'first' pakt het eerste item uit een datacollectie en maakt daar een gewone variabele. Je gebruikt deze modifier vaak in combinatie met {assign} om een nieuwe variabele aan te maken.

{assign value=$profile.kinderen|first var="eerste_kind"}
Je eerste kind heet {$eerste_kind.naam}

Last

De modifier 'last' pakt het laatste item uit een datacollectie en maakt daar een gewone variabele. Je gebruikt deze modifier vaak in combinatie met {assign} om een nieuwe variabele aan te maken. Let op: deze modifier werkt niet op elke dataverzameling, omdat niet elke databron even gemakkelijk toegang verschaft tot het laatste item.

{assign value=$profile.kinderen|last var="laatste_kind"}
Je laatste kind heet {$laatste_kind.naam}

In_selection

De modifier in_selection filtert een collectie van profielen op basis van een bestaande selectie. Dit werkt alleen op collecties van profielen binnen databases, zoals:

{$account.databases.klanten.profiles|in_selection:"Nieuwsbriefinschrijvers"}

In_miniselectie

De modifier in_miniselectie filtert een subprofielverzameling op basis van een miniselectie binnen het profiel. Dit werkt alleen op collecties van subprofielen, zoals:

{$profile.bestellingen|in_miniselectie:"Premium bestellingen"}