# Conditionele logica

Toon, verberg, vereis en vertakt op basis van antwoorden.

## Conditionele logica

Logicablokken reageren op wat een respondent invoert — toon of verberg elk blok, spring naar pagina’s, blokkeer verzending of bereken waarden. Combineer eenvoudige regels tot geavanceerde vertakking zonder code.

<h2 id="what-logic-can-do">Wat logica kan doen</h2>

<p>
  Elk logicablok heeft een of meer <strong>regels</strong>. Elke regel koppelt een <em>conditiegroep</em> (wanneer moet dit activeren?) aan
  een of meer <em>acties</em> (wat moet er gebeuren?). Er zijn negen actietypen beschikbaar:
</p>

<h2 id="adding-a-logic-block">Een logicablok toevoegen</h2>

<p>
  Een logicablok is een documentelement — het staat op het canvas tussen vragen, net als een kop of een afbeelding. Je kunt het overal
  plaatsen: tussen twee velden op dezelfde pagina, bovenaan een pagina of vlak voor een pagina-einde.
</p>

<h2 id="conditions">Condities</h2>

<p>
  Condities zijn de kant <strong>Wanneer</strong> van een regel. Elke conditie kiest een <strong>veld</strong>, past een{' '}
  <strong>operator</strong> toe en vergelijkt vaak met een <strong>waarde</strong>. De veldkiezer groepeert wat je kunt observeren:{' '}
  <strong>Vragen</strong>, <strong>Verborgen velden</strong>, <strong>Berekende velden</strong> en <strong>Metadata</strong> (op dit moment
  de taal van de respondent).
</p>

<h3 id="all-or-any">Alle of Elk</h3>

<p>Zodra een regel twee of meer condities heeft, verschijnt er een schakelaar boven aan de sectie Wanneer:</p>

<ul>
  <li>
    <strong>Alle</strong> — elke conditie moet waar zijn voordat de regel activeert. De rijen lezen als "en".
  </li>
  <li>
    <strong>Elk</strong> — één ware conditie is genoeg. De rijen lezen als "of".
  </li>
</ul>

<h3 id="sets-of-conditions">Sets van condities</h3>

<p>
  <strong>Voeg een set voorwaarden toe</strong> nest een tweede groep binnen de eerste, één niveau diep, met zijn eigen Alle/Elk-schakelaar.
  Dat dekt samengestelde logica zoals "abonnement <strong>is</strong> Pro <em>en</em> (land <strong>is</strong> Noorwegen <em>of</em> land{' '}
  <strong>is</strong> Zweden)". Een set bevat alleen condities — hij kan geen andere set bevatten.
</p>

> ⚠️ **Een verborgen vraag heeft geen waarde**
> <p>
>     Als logica een vraag verbergt, telt het antwoord dat de vraag mogelijk al had nergens meer mee — niet in condities, niet in
>     berekeningen, niet in het betalingsbedrag en niet in de opgeslagen inzending. Het antwoord komt alleen terug als de vraag weer zichtbaar
>     wordt. Hetzelfde geldt voor elke vraag in een verborgen rij, kolom of herhalende groep, en voor een gekozen optie die logica verbergt.
>     Een pagina die de regels Stel volgende pagina in overslaan, telt ook als verborgen: de vragen erop zijn niet verplicht en wat daar is
>     beantwoord, vervalt. Verborgen <em>velden</em> zijn het tegenovergestelde: die dragen altijd hun waarde.
>   </p>

> 💡 **Houd het leesbaar**
> <p>
>     Als een enkel logicablok te complex aanvoelt, overweeg dan de logica te verdelen over meerdere logicablokken of de pagina’s van je
>     formulier opnieuw in te delen.
>   </p>

<h2 id="operators-reference">Operatorenoverzicht</h2>

<p>
  De lijst met operators wordt bepaald door het veld dat je hebt gekozen — je ziet altijd alleen de operators die dat veld ondersteunt.
  Hieronder benoemt elke kop de exacte set.
</p>

<h3 id="text-text-input-text-area-and-text-calculated-fields">Tekst (Tekstinvoer, Tekstgebied en tekst-berekende velden)</h3>

<p>
  Elke tekstvergelijking negeert hoofdletters en spaties aan het begin en eind, dus <code>x@Competitor.com</code> eindigt op{' '}
  <code>@competitor.com</code>.
</p>

<p>De overige tekstachtige velden bieden een beperktere set, dus kies het type dat past bij hoe je wilt vergelijken:</p>

<h3 id="numeric-number-star-rating-linear-scale-numeric-hidden-and-calculated-fields">
  Numeriek (Getal, Sterrenrating, lineaire schaal, numerieke verborgen en berekende velden)
</h3>

<h3 id="checkboxes-and-picture-choice">Selectievakjes en afbeeldingskeuze</h3>

<h3 id="dropdown-and-radio-buttons-single-select">Dropdown en Keuzerondjes (enkelvoudige selectie)</h3>

<h3 id="toggle-switch-and-boolean-calculated-fields">Schakelaar (en boolean-berekende velden)</h3>

<h3 id="signature">Handtekening</h3>

<h3 id="file-upload">Bestandsupload</h3>

<h3 id="date-picker-and-time-picker">Datumkiezer en Tijdkiezer</h3>

<h3 id="ranking">Rangschikking</h3>

<h3 id="matrix--grid">Matrix / Raster</h3>

<h3 id="payment">Betaling</h3>

<h3 id="fields-you-cannot-watch">Velden die je niet kunt observeren</h3>

<p>
  <strong>Schedule appointment</strong> en <strong>Documents</strong> kunnen doel zijn van een zichtbaarheidsactie, maar nooit bron van een
  conditie. Een boeking wordt aan de inzending gekoppeld in plaats van opgeslagen als een gewoon antwoord, en een Documents-blok verzamelt
  helemaal geen antwoord. Gebruik eerdere kwalificatieantwoorden om een van beide te tonen of te verbergen. Elke zichtbare Schedule
  appointment-vraag moet geboekt zijn vóór de inzending; een verborgen vraag blokkeert dit niet. Zie{' '}
  <a href="/nl/integrations/cal-com#logic">Cal.com-planning met logica</a>.
</p>

<h2 id="targeting">Doelkeuze</h2>

<p>
  Elke actie heeft een <strong>doel</strong> nodig — het element waarop het van toepassing is. Het doel hangt af van het actietype:
</p>

<p>
  Toon en Verberg reiken verder dan vragen. Richt je op elk blok op het canvas — een alinea, kop, afbeelding of lay-outcontainer — om een
  notitie te tonen die standaard verborgen was, of om inhoud te verbergen zodra die niet langer relevant is. Ze kunnen ook afzonderlijke
  opties in een keuzeveld als doel hebben, niet alleen de hele vraag. Verberg eerst een blok via het blokmenu en schrijf vervolgens een
  regel om het te tonen.
</p>
<h2 id="how-rules-combine">Hoe meerdere regels worden gecombineerd</h2>

<p>
  Elke regel staat op zichzelf, en ze worden allemaal samen geëvalueerd. Regels worden van boven naar beneden gelezen, over logicablokken
  heen, in documentvolgorde. Hoe meerdere regels op hetzelfde doel worden gecombineerd, hangt af van de actie.
</p>

<p>
  Zo kun je meerdere regels op hetzelfde blok richten zonder dat ze elkaar tegenwerken. Een feedbackformulier heeft een Keuzerondjes-vraag —
  "Waar kunnen we je mee helpen?" — met vier opties, en een e-mailveld "Mogen we contact met je opnemen?" dat standaard verborgen is. Vier
  regels <strong>tonen</strong> elk datzelfde e-mailveld (plus hun eigen vervolgvraag) voor hun optie. Het e-mailveld verschijnt ongeacht
  welke optie wordt gekozen, en blijft alleen verborgen als geen enkele optie overeenkomt.
</p>

> 💡 **Vaak volstaat een enkele regel**
> <p>
>     Om een blok zichtbaar te maken voor meerdere antwoorden is één regel met <strong>Elk</strong> en een conditie per antwoord — of één
>     enkele <strong>is not empty</strong>-conditie die ze allemaal dekt — makkelijker te lezen dan vier regels. Grijp naar meerdere regels
>     wanneer elke optie ook een eigen, aparte vervolgvraag nodig heeft.
>   </p>

<h3 id="conflicting-rules">Conflicterende regels</h3>

<p>
  Wanneer twee regels het oneens zijn over hetzelfde doel — de ene <strong>Toon</strong>t een blok terwijl de andere het{' '}
  <strong>Verberg</strong>t, of de ene maakt een veld verplicht terwijl de andere het optioneel maakt — en beide condities tegelijk
  overeenkomen, <strong>wint de eerste regel</strong>. De latere, verliezende regel wordt in de editor gemarkeerd: "Deze actie is nooit van
  toepassing — een eerdere regel bepaalt dit doel al. De volgorde van de regels beslist: de eerste regel wint."
</p>

<p>
  Eén uitzondering op de volgorde: een regel waarvan de conditie een berekend veld leest, wordt uitgevoerd na de regel die het schrijft,
  ongeacht de documentvolgorde, zodat een score altijd berekend is voordat er iets op vertakt. Regels die elkaars berekende velden in een
  lus schrijven, geven een publicatiewaarschuwing die de keten benoemt — doorbreek de lus zodat waarden voorspelbaar worden opgelost.
</p>

<h3 id="hidden-and-required">Verborgen wint van verplicht</h3>

<p>
  Een vraag die uiteindelijk verborgen is, is nooit verplicht — of hij nu door een regel verborgen werd of via het blokmenu verborgen is
  zonder regel om hem weer te tonen. Het sterretje verdwijnt en de inzending wordt niet geblokkeerd — anders zou een respondent vastzitten
  in een formulier door een veld dat hij niet kan zien.
</p>

<h2 id="common-patterns">Veelgebruikte patronen</h2>

<h3 id="show-a-follow-up-question-based-on-a-previous-answer">Toon een vervolgvraag op basis van een eerder antwoord</h3>

<p>
  Een tevredenheidsonderzoek vraagt "Hoe beoordeel je je ervaring?" met een 1-5 sterrenrating. Een logicablok eronder gebruikt de conditie
  "rating is less than or equal to 3" met de actie <strong>Toon</strong>, gericht op een tekstgebiedveld dat vraagt "Wat kunnen we
  verbeteren?" Respondenten die 4 of 5 geven, zien de vervolgvraag nooit.
</p>

<h3 id="reveal-a-message-when-an-option-is-picked">Toon een bericht wanneer een optie wordt gekozen</h3>

<p>
  Een aanmeldformulier heeft een keuzerondje-vraag: "Welk abonnement past het best bij jou?" Eronder staat een alinea — "Goede keuze! Ons
  Pro-abonnement bevat prioritaire ondersteuning." — die standaard verborgen is met <strong>Verberg</strong> uit het blokmenu. Een
  logicablok maakt hem zichtbaar: als abonnement <strong>is</strong> "Pro", <strong>Toon</strong> de alinea. De aanmoedigende notitie
  verschijnt alleen voor wie Pro kiest en blijft voor alle anderen verborgen.
</p>

<h3 id="branch-to-different-pages-based-on-a-selection">Vertakking naar verschillende pagina’s op basis van een selectie</h3>

<p>
  Een evenementregistratieformulier heeft een keuzerondje-vraag: "Bent u aanwezig ter plaatse of op afstand?" Twee logicablokken volgen:
</p>

<ul>
  <li>
    <strong>Regel 1</strong> — conditie: aanwezigheid <strong>is</strong> "Ter plaatse", actie: <strong>Stel volgende pagina in</strong>{' '}
    "Locatiedetails".
  </li>
  <li>
    <strong>Regel 2</strong> — conditie: aanwezigheid <strong>is</strong> "Op afstand", actie: <strong>Stel volgende pagina in</strong>{' '}
    "Streaming-instellingen".
  </li>
  <li>
    <strong>Regel 3</strong> — conditie: aankomsttijd <strong>is not empty</strong>, actie: <strong>Stel volgende pagina in</strong>{' '}
    "Bevestiging". Aankomsttijd is een verplichte vraag op "Locatiedetails".
  </li>
</ul>

<p>
  Regel 1 en 2 lezen de vraag aanwezigheid, dus ze werken wanneer de respondent de pagina ervan verlaat. Daarna gaat Volgende in
  paginavolgorde verder. Regel 3 leest een vraag op "Locatiedetails", dus die werkt wanneer de respondent die pagina verlaat. Wie ter
  plaatse aanwezig is, slaat dan "Streaming-instellingen" over. Elk pad verzamelt alleen relevante informatie, waarna beide paden samenkomen
  op een gedeelde "Bevestiging"-pagina.
</p>

<h3 id="calculate-a-score-and-branch-on-it">Bereken een score en vertak daarop</h3>

<p>
  Een leadkwalificatieformulier heeft drie sterrenratingvragen: budget, tijdlijn en bevoegdheid. Een berekend veld met de naam "Leadscore"
  gebruikt een logicablok met de actie <strong>Bereken waarde</strong> om de waarde van elke rating op te tellen. Een tweede logicablok
  leest het berekende veld: als Leadscore <strong>is greater than 12</strong>, <strong>Stel volgende pagina in</strong> "Prioritaire
  opvolging"; anders spring naar de standaard bevestigingspagina.
</p>

<h3 id="react-to-a-hidden-field-value">Reageer op een verborgen veldwaarde</h3>

<p>
  De URL vult een verborgen veld met de naam <strong>plan</strong> (bijv. <code>?plan=enterprise</code>). Een logicablok controleert: als
  plan <strong>is</strong> "enterprise", <strong>Toon</strong> de vraag "Toegewijde accountmanager" en <strong>Maak verplicht</strong>
  het veld "Bedrijfsgrootte". Respondenten op het gratis abonnement zien deze vragen nooit.
</p>

<h3 id="gate-submission-on-a-calculated-total">Blokkeer verzending op basis van een berekend totaal</h3>

<p>
  Een bestelformulier berekent een lopend totaal. Een logicablok gebruikt de conditie: als Ordertotaal <strong>is less than 10</strong>,
  <strong>Voorkom verzending van formulier</strong>. De respondent kan niet verzenden totdat aan de minimale besteldrempel is voldaan.
</p>

<p>
  Terwijl een preventieregel actief is, wordt de knop als niet-beschikbaar weergegeven en krijgt de respondent te horen waarom. Typ de reden
  in <strong>Bericht dat aan de respondent wordt getoond</strong> op de actierij — "Je bestelling moet minstens 10 bedragen" — zodat ze
  weten welk antwoord ze moeten aanpassen. Laat het leeg en het formulier valt terug op "Dit formulier kan niet worden verzonden met de
  huidige antwoorden." (of "U kunt niet doorgaan naar de volgende pagina met de huidige antwoorden." voor een navigatieblok). Wanneer
  meerdere preventieregels tegelijk afgaan, bepaalt de eerste regel met een bericht de tekst.
</p>

> 💡 **Test logica met Voorbeeld**
> <p>
>     Nadat je je regels hebt ingesteld, schakel je over naar <strong>Voorbeeld</strong> in de bovenste werkbalk en vul je het formulier in
>     zoals een respondent dat zou doen. Logica wordt in realtime geactiveerd in Voorbeeld, zodat je elke vertakking, elk verborgen veld en
>     elke validatieblokkering kunt controleren voordat je publiceert.
>   </p>

<h2 id="next-steps">Volgende stappen</h2>
<div class="not-prose grid gap-3 sm:grid-cols-2">
  - [Verborgen velden](/nl/building-forms/hidden-fields) — Leg URL-parameters vast en gebruik ze in logica
  - [Berekende velden](/nl/building-forms/calculated-fields) — Bereken scores en totalen met logicabewerkingen
  - [Antwoord doorvoeren](/nl/building-forms/answer-piping) — Verwijs naar elk antwoord elders in het formulier
</div>
