Waardes van repeaters gebruiken binnen IAF
Het repeater element gebruik je om subformulieren meerdere keren te tonen in hetzelfde formulier. Denk aan een standaard naam, adres en woonplaats blokje dat veel formulieren gebruiken. Dit principe bespaart werk voor de redacteur, omdat hij niet steeds dezelfde velden hoeft toe te voegen. Stel nou dat je deze waardes netjes in een mail wil zetten. Het toevoegen van alle repeater waardes in een mail, ook als deze leeg zijn, staat niet zo professioneel. Daarnaast wil je een mail uiteraard zo persoonlijk mogelijk opstellen. Dit artikel licht toe hoe je tekst en/of mail zodanig kan personaliseren dat deze alleen de relevante waardes van een repeater element laat zien.
Vereisten:
Om repeaters te kunnen gebruiken, moet je op z’n minst een subformulier hebben. Daarna kun je aan je formulier een repeater toevoegen. In dit artikel zal het voorbeeld van een mail gebruikt worden, dus het zal ook nodig zijn een mail handler aanwezig te hebben op je formulier. Dit kan zowel een "een taal" als een "meertalig" handler zijn.
Dit artikel gaat uit van een formulier dat bestaat uit het ophalen van een naam van een persoon die naar een bezoekersdag gaat en die een lijst van personen aangeeft die hem/haar zullen vergezellen op deze dag.
Wenselijke situatie:
We willen aan het einde van dit artikel een mail kunnen opstellen waarin alleen de ingevulde waardes van een repeater worden weergegeven. Dit betreft dus ook een situatie waarin mensen aangeven dat er 3 elementen zijn, maar er vervolgens slechts 2 invult.
Oplossing:
Om de waardes van het formulier op te vragen, maken we gebruik van de mogelijkheid om Javascript uit te voeren in de mail handler. Op de volgende manier kun je de naam van de persoon die de aanmelding uitvoert achterhalen en in de mail verwerken:
Beste $step1.naam.value$,
Je hebt je aangemeld voor de bezoekersdag.
Dank voor je aanmelding.
De eerste stap van het formulier heeft dus een identifier "step1", en het tekst element waar de naam ingevoerd wordt heeft een identifier "naam".
Dezelfde opzet wordt gebruikt bij een repeater element. De ingevulde waardes haal je echter op de volgende manier op (let op, dit is pseudo code):
[stap identifier].[repeater identifier].repeat[index repeater].[veld identifier].value
Binnen het voorbeeld haal ik de toegevoegde namen als volgt op:
Beste $step1.naam.value$,
Je hebt je aangemeld voor de bezoekersdag. Ook heb je aangegeven met de volgende personen langs te komen:
$step1.additionele_personen.repeat0.naam.value$ $step1.additionele_personen.repeat1.naam.value$ $step1.additionele_personen.repeat2.naam.value$ $step1.additionele_personen.repeat3.naam.value$
Dank voor je aanmelding.
Het probleem dat hier echter ontstaat, is dat als een persoon geen waarde invult voor 1 of meerdere repeater elementen, dat deze dan toch toegevoegd worden aan de mail, waardoor er lege ruimte ontstaat. Dit probleem los je op door de waardes van de repeater binnen een groter stuk Javascript op te nemen. Je maakt een variabele aan die de waardes meeneemt, mits deze gevuld zijn. Om dit te bereiken krijg je de volgende code:
Beste $step1.naam.value$,
Je hebt je aangemeld voor de bezoekersdag. Ook heb je aangegeven met de volgende personen langs te komen:
$
var mail='';
if(step1.additionele_personen.repeat0.naam.value!==""){
mail = mail + "\n" + step1.additionele_personen.repeat0.naam.value;
}
if(step1.additionele_personen.repeat1.naam.value!==""){
mail = mail + "\n" + step1.additionele_personen.repeat1.naam.value;
}
if(step1.additionele_personen.repeat2.naam.value!==""){
mail = mail + "\n" + step1.additionele_personen.repeat2.naam.value;
}
if(step1.additionele_personen.repeat3.naam.value!==""){
mail = mail + "\n" + step1.additionele_personen.repeat3.naam.value;
}
mail;
$
Dank voor je aanmelding.
In eerste instantie wordt de "mail" variabele aangemaakt. Vervolgens wordt er per stap van de repeater beoordeeld of de waarde van "naam" leeg is of niet. Als deze niet leeg is ("!=="), dan krijgt deze variabele ook de mail-gegevens, gevolgd door een nieuwe regel en daarna de naam van de ingevulde naam. Dit wordt vervolgens voor elk repeater element uitgevoerd.
Als laatste stap wordt de mail variabele teruggegeven, waar nu dus alle benodigde waardes in staan.
De onderstaande afbeelding laat een case zien waarin niet alle waardes zijn ingevuld en wat het uiteindelijke resultaat is.
Opmerkingen
Enkele opmerkingen omtrent het bovenstaande:
- Zorg ervoor dat er altijd evenveel repeat[index] waardes zijn als dat er keuzes zijn. Bij een te klein aantal zullen waardes niet meegenomen worden en bij een te groot aantal zal de code niet succesvol afgerond kunnen worden
- Je moet handmatig alle repeat controles toevoegen. Stel daarom een vaste "if" op, kopieer en plak dit stuk code en pas het aan. Als het goed is hoef je dit maar één keer te doen
- Mocht je op meerdere waardes dienen te checken, dan kun je het stuk code makkelijk uitbreiden:
if(step1.additionele_personen.repeat0.naam.value!=="" && step1.additionele_personen.repeat0.email.value!=="")
- Mocht je willen weten hoe je omgaat met radiobuttons in een formulier? Zie hiervoor de code snippet in het artikel omtrent het netjes opmaken van een mail binnen IAF
Opmerkingen
0 opmerkingen
Artikel is gesloten voor opmerkingen.