Formulierbouwer voor PrestaShop 8 en 9: documentatie
De module installeren, een formulier bouwen, logica, stappen, e-mails en webhook instellen, en inzendingen beheren en exporteren.
DataFirefly Form Builder voegt aan PrestaShop 8 en 9 een formulierbouwer met drag & drop toe. Elk formulier verschijnt op themaposities, op een CMS-pagina, in een pop-upvenster of op een eigen pagina. Inzendingen worden in de back-office bewaard, per e-mail verstuurd en zijn als CSV te exporteren.
Installatie
- Klik in Modules > Modulebeheer op Een module uploaden en sleep het bestand
dfformbuilder.ziperin. - Onder Klantenservice verschijnen twee menu’s: Formulieren en Formulierinzendingen.
- De knop Configureren van de module opent de algemene instellingen (zie verderop) en toont het aantal formulieren en ongelezen inzendingen.
Vereisten: PrestaShop 8.0.0 tot 9.x, PHP 7.2 of hoger. Bestanden die bezoekers versturen, staan in /upload/dfformbuilder/, dat beschrijfbaar moet zijn. De module gebruikt geen override.
Bijwerken: installeer het nieuwe ZIP-bestand over het oude. Formulieren en inzendingen blijven bewaard, de updatescripts voegen nieuwe tabellen toe.
Een formulier maken
Klik in Klantenservice > Formulieren op Nieuw formulier en kies een startpunt:
- Contactformulier: naam, e-mail, onderwerp en bericht. Het veld Bestelreferentie verschijnt alleen als het onderwerp over een bestelling gaat.
- Offerteaanvraag: particulier of bedrijf (de velden Bedrijf en btw-nummer verschijnen alleen voor een bedrijf), aantal, budget, termijn, bijlagen. Op een productpagina wordt de productnaam automatisch ingevuld.
- Sollicitatie: drie stappen (contactgegevens, functie, documenten), verplicht cv dat bij de e-mail wordt gevoegd.
- Leeg formulier.
De lijst met formulieren biedt ook Dupliceren, Exporteren (JSON-bestand) en in de werkbalk Importeren. Een geïmporteerd formulier wordt uitgeschakeld en zonder weergavepositie aangemaakt.
De bouwer
De bovenste balk bevat de interne naam van het formulier, het vakje Ingeschakeld, de bewerkingstaal, de knoppen Ongedaan maken en Opnieuw, Voorbeeld en Opslaan. Daaronder staan vier tabbladen: Velden, Instellingen, E-mails, Weergave en integratie.
Tabblad Velden
- Linkerkolom: de veldtypes. Een klik voegt het veld toe onder het geselecteerde, slepen zet het waar u wilt.
- Midden: het formulier zoals het wordt getoond, met de echte breedtes. Velden verplaatst u met drag & drop of met de pijlen op elke kaart, en u kunt ze dupliceren of verwijderen.
- Rechterkolom: de instellingen van het geselecteerde veld.
Sneltoetsen: Enter selecteert een veld, Alt + pijltjes verplaatst het, Delete verwijdert het, Ctrl+Z maakt ongedaan, Ctrl+Y doet opnieuw, Ctrl+S slaat op. De browser waarschuwt als u de pagina verlaat met niet-opgeslagen wijzigingen.
Talen
Alle teksten (labels, helpteksten, opties, meldingen, e-mails, URL) vult u in voor de taal die bovenaan is gekozen. Een lege tekst neemt die van de standaardtaal van de winkel over, grijs weergegeven in het veld. Loop voor het publiceren elke taal na.
Veldsleutel
Elk invoerveld heeft een technische sleutel die uit het label wordt afgeleid (bijvoorbeeld email, order_reference). Het is de kolomnaam in de CSV-export en een variabele in e-mails: {email}. Hij moet uniek zijn binnen het formulier.
Veldtypes
- Tekst, E-mail, Telefoon, Website: voorbeeldtekst, maximale lengte, vooraf invullen. Een webadres zonder
https://wordt automatisch aangevuld. - Getal: minimum, maximum en stap.
- Lange tekst: hoogte in regels, maximale lengte met tekenteller voor de bezoeker.
- Datum: vroegste en laatste datum, als JJJJ-MM-DD of met het woord
today. - Keuzelijst, Keuzerondjes, Selectievakjes: opties met een label per taal en een waarde. De waarde wordt opgeslagen en door de logica gebruikt; leeg neemt ze het label over. De link Meerdere opties tegelijk toevoegen accepteert één optie per regel, zo nodig als
label|waarde. - Toestemming: een selectievakje met een tekst waarin links mogen (privacybeleid).
- Sterrenbeoordeling: 3 tot 10 sterren, opgeslagen als 4/5.
- Bestandsupload: toegestane extensies, maximale grootte per bestand (begrensd door de algemene instelling), meerdere bestanden tot 10.
- Verborgen veld: vaste of vooraf ingevulde waarde, onzichtbaar voor de bezoeker.
- Kop, Tekstblok, Scheidingslijn: alleen opmaak, er wordt niets opgeslagen.
- Nieuwe stap: deelt het formulier op in stappen (zie verderop).
Elk veld heeft een breedte: volledig, twee derde, half of een derde. Smallere velden staan op grote schermen naast elkaar en op mobiel onder elkaar.
Vooraf invullen
Tekst-, e-mail-, telefoon- en verborgen velden kunnen worden ingevuld met het e-mailadres, de voornaam, de achternaam, de volledige naam of het bedrijf van de ingelogde klant, de productnaam of -referentie (op een productpagina), de pagina-URL of een URL-parameter. Voorbeeld: een verborgen veld met de parameter utm_source en een link naar /contact?utm_source=nieuwsbrief bewaren nieuwsbrief bij de inzending.
Antwoordadres
Vink Gebruiken als antwoordadres aan bij een e-mailveld: een antwoord op de meldingsmail gaat dan rechtstreeks naar de bezoeker.
Voorwaardelijke logica
Vink in het paneel van een veld Dit veld tonen of verbergen afhankelijk van andere antwoorden aan en kies:
- Dit veld tonen of verbergen;
- als alle of minstens één van de voorwaarden kloppen;
- elke voorwaarde: een veld, een operator (is, is niet, bevat, bevat niet, is leeg, is ingevuld, is groter dan, is kleiner dan) en een waarde.
Bij een keuzelijst, keuzerondjes of selectievakjes kiest u de waarde uit de opties. Een verborgen veld wordt niet gecontroleerd, opgeslagen of verzonden. Dezelfde logica wordt bij verzending opnieuw op de server berekend.
Formulieren in meerdere stappen
Voeg een element Nieuwe stap (groep Opmaak) toe waar een stap moet beginnen en geef het een titel. Velden vóór de eerste markering vormen de eerste stap. Voor de bezoeker:
- verschijnen een voortgangsbalk en de titels van de stappen (uit te schakelen in Instellingen > Formulier in meerdere stappen);
- hebben de knoppen Volgende en Vorige een tekst per taal;
- wordt elke stap gecontroleerd voordat hij verder kan;
- wordt een stap overgeslagen als de logica al zijn velden verbergt.
Tabblad Instellingen
- Titel en inleiding: titel voor bezoekers en inleidende tekst.
- Verzenden: tekst van de verzendknop, bevestigingsmelding of doorverwijzing naar een URL na verzending.
- Toegang: formulier alleen voor ingelogde klanten (anderen zien een link naar de inlogpagina), CSS-klasse.
- Beschikbaarheid en limieten: openings- en sluitingsdatum (tijdzone van de winkel), maximaal aantal inzendingen, één inzending per persoon (gecontroleerd op klantaccount en ingevuld e-mailadres), sluitingsmelding.
- Concept: bewaart de antwoorden 30 dagen in de browser van de bezoeker tot de verzending. Vóór verzending gaat er niets naar de winkel en bestanden worden niet bewaard.
Tabblad E-mails
Melding aan de winkel
Wordt verstuurd in de standaardtaal van de winkel. Ontvangers gescheiden door komma’s; bij een leeg veld gelden de standaardontvangers uit de moduleconfiguratie en daarna het e-mailadres van de winkel. Het onderwerp accepteert de variabelen {form_name} en {veldsleutel}, die u met een klik kopieert. De optie De geüploade bestanden bijvoegen voegt bestanden toe tot in totaal 15 MB.
Voorwaardelijke ontvangers
Elke regel koppelt een voorwaarde aan adressen: bijvoorbeeld als Onderwerp Offerte is, versturen naar verkoop@uw-winkel.nl. De instelling Als een voorwaarde klopt voegt deze adressen toe aan de ontvangers of vervangt ze.
Bevestiging aan de bezoeker
Vereist een e-mailveld in het formulier. De e-mail gaat in de taal die de bezoeker gebruikte, met het onderwerp en bericht van uw keuze (variabelen toegestaan) en optioneel een samenvatting van de antwoorden.
Webhook
Vul een URL in (Zapier, Make, n8n, CRM) om elke inzending als JSON via een POST-verzoek te ontvangen. Voorbeeldinhoud:
{
"event": "submission.created",
"form": { "id": 3, "name": "Contact" },
"submission": { "id": 128, "date": "2026-09-30T10:12:00+02:00", "language": "nl",
"shop_id": 1, "customer_id": 0, "product_id": 0, "page_url": "https://..." },
"fields": {
"email": { "label": "E-mail", "type": "email", "value": "jan@voorbeeld.nl", "display": "jan@voorbeeld.nl" }
}
}
Met een ondertekeningsgeheim bevat de header X-DFFB-Signature de waarde sha256= gevolgd door de HMAC-SHA256 van de inhoud. Controle in PHP:
$body = file_get_contents('php://input');
$expected = 'sha256=' . hash_hmac('sha256', $body, 'UW_GEHEIM');
$valid = hash_equals($expected, $_SERVER['HTTP_X_DFFB_SIGNATURE'] ?? '');
De aanroep wacht maximaal 5 seconden. Het resultaat (afgeleverd, geweigerd met HTTP-code, geen antwoord) staat op de pagina van elke inzending.
Tabblad Weergave en integratie
Weergavemodus
Direct op de pagina of achter een knop, in een pop-upvenster, met de knoptekst per taal. Deze modus geldt voor de posities, de shortcode en de widget.
Automatische posities
Vink de themaposities aan: startpagina (displayHome), contactpagina (displayContactContent, displayContactRightColumn), productpagina (displayProductAdditionalInfo, displayFooterProduct), vertrouwensblok (displayReassurance), winkelwagen (displayShoppingCartFooter), CMS-pagina’s (displayCMSDisputeInformation), kolommen (displayLeftColumn, displayRightColumn), boven de footer (displayFooterBefore), einde van de inhoud (displayWrapperBottom). Een positie toont niets als het thema haar niet aanroept.
Eigen pagina
Elk formulier kan een eigen pagina hebben, bijvoorbeeld /forms/3-offerteaanvraag, met een vriendelijke URL per taal. De link Voorbeeld werkt ook als het formulier uitgeschakeld is; inzendingen worden daar geweigerd tot het is ingeschakeld.
Integratiecodes
- Shortcode voor een CMS-pagina:
[dfform id=3] - Smarty-widget in een template:
{widget name='dfformbuilder' id_form=3} - Eigen hook:
{hook h='displayDfForm' id_form=3}
Statistieken
Over 30 dagen: weergaven (formulier getoond of pop-up geopend), gestart (klik in een veld), inzendingen, conversie- en uitvalpercentage. Bezoekers zonder JavaScript en de meeste bots worden niet geteld. Weergaven en conversie staan ook in de lijst met formulieren.
Inzendingen beheren
Klantenservice > Formulierinzendingen toont de inzendingen met formulier, samenvatting, status en datum, allemaal filterbaar. Bulkacties: markeren als gelezen of afgehandeld, archiveren, exporteren naar CSV, verwijderen (de bestanden worden ook verwijderd).
Bij het openen krijgt een inzending de status Gelezen. De pagina toont:
- alle antwoorden en de bestanden om te downloaden;
- de status en een interne notitie;
- de klant (als hij was ingelogd), het product, de pagina van verzending, de taal, het IP-adres, het resultaat van e-mail en webhook;
- de knoppen Afdrukken, Antwoorden per e-mail, vorige en volgende inzending.
De bezoeker antwoorden
Het paneel De bezoeker antwoorden stuurt uw bericht naar het adres uit het e-mailveld (bij voorkeur het veld dat als antwoordadres is gemarkeerd), in de taal van de bezoeker en in de e-mailopmaak van de winkel. Het antwoord blijft in de geschiedenis en de inzending kan tegelijk op Afgehandeld worden gezet.
CSV-export
Het paneel onder de lijst exporteert per formulier, status en periode. Met een gekozen formulier krijgt u één kolom per veld. Het bestand is UTF-8 met puntkomma als scheidingsteken en opent direct in Excel, LibreOffice en Google Sheets.
Algemene module-instellingen
- Standaardontvangers: gebruikt als een formulier geen eigen ontvangers heeft.
- Maximale bestandsgrootte (standaard 10 MB): algemene limiet per bestand. Kan niet hoger zijn dan
upload_max_filesizeenpost_max_sizevan PHP. - Inzendingen bewaren gedurende (dagen): daarna worden inzendingen en hun bestanden automatisch verwijderd. 0 bewaart ze onbeperkt.
- IP-adres opslaan: uitgeschakeld wordt alleen een hash bewaard voor de inzendingslimiet.
- Minimale invultijd (3 seconden) en inzendingen per uur per bezoeker (10): bescherming tegen bots.
- reCAPTCHA v3: sitesleutel, geheime sleutel en minimale score (0,5 aanbevolen). Het script van Google laadt pas als de bezoeker begint met invullen.
Beveiliging en AVG
- Elk formulier bevat een onzichtbaar lokveld en een handtekening met tijdstempel; een te snelle of te frequente inzending wordt geweigerd.
- Scripts, HTML-pagina’s en uitvoerbare bestanden worden altijd geweigerd en de inhoud van bestanden wordt gecontroleerd. Bestanden krijgen een willekeurige naam in een beveiligde map en zijn alleen via de back-office te downloaden.
- Met de officiële module psgdpr zitten de inzendingen van een klant (account of ingevuld e-mailadres) in de export van zijn gegevens en worden ze met zijn account verwijderd.
Vertalingen
De interface van de module is beschikbaar in het Frans en het Engels; andere talen van de back-office tonen haar in het Engels. De e-mailsjablonen van de module bestaan in het Engels, Frans, Duits, Spaans, Italiaans, Nederlands, Pools en Portugees. De teksten van de formulieren zelf vult u in alle winkeltalen in.
Problemen oplossen
Het formulier verschijnt niet
Controleer of het formulier is ingeschakeld, of uw thema de gekozen positie aanroept en of de openingsdata het niet sluiten. Test bij twijfel de shortcode op een CMS-pagina of de eigen pagina.
E-mails komen niet aan
De inzendingspagina toont of de melding is verstuurd. Controleer Geavanceerde instellingen > E-mail en stuur een test-e-mail vanuit PrestaShop.
Een bestand wordt geweigerd
Controleer de toegestane extensies van het veld, de maximale grootte van het veld en van de module, en de PHP-limieten upload_max_filesize en post_max_size.
De antispambeveiliging blokkeert het formulier
Een pagina die al enkele weken openstaat, heeft een verlopen handtekening: de bezoeker moet de pagina opnieuw laden. Gebruikt u reCAPTCHA, controleer dan of het domein in de Google-console staat en verlaag de minimale score als echte klanten worden geblokkeerd.