Skip to content

Sessie 2025-11-20: Nieuwsbrief Integratie, User Profielen & Pathauto URLs

Datum

20 november 2025

Deelnemers

Sjoerd, AI Agent (Warp)

Doelen Sessie

  • MailChimp nieuwsbrief integratie definitief maken
  • User profielen (Customer + Openbaar) optimaliseren
  • URL structuur voor users en profielen instellen

Uitgevoerd

1. MailChimp Subscribe Oplossing - Custom Module + Toggle Block

Besluit: Custom module vg_mailchimp_subscribe behouden als primaire methode

Aanpak onderzocht: - ECA/BPMN: Gisteren geprobeerd maar subscribe action ontbrak - MailChimp signup block: Vraagt dubbele data entry (email + naam) - Custom module: Beste oplossing voor automatische sync

Implementatie: - Module uitgebreid met hook_user_update() voor unsubscribe functionaliteit - Subscribe bij user insert als field_nieuwsbrief = TRUE - Unsubscribe bij user update als checkbox wordt uitgezet - Custom toggle block aangemaakt: "Aanmelden nieuwsbrief" - Block toont simpele checkbox met huidige status - Gebruikt user account veld field_nieuwsbrief (niet customer profiel) - Automatische MailChimp API calls via hooks - Error handling en user feedback messages toegevoegd

Bestanden: - /web/modules/custom/vg_mailchimp_subscribe/vg_mailchimp_subscribe.module - /web/modules/custom/vg_mailchimp_subscribe/src/Plugin/Block/NewsletterToggleBlock.php - /web/modules/custom/vg_mailchimp_subscribe/src/Form/NewsletterToggleForm.php

2. Velden Structuur Opgeschoond

field_nieuwsbrief verplaatst naar User Account: - Was: Customer profiel - Nu: User account entity - Reden: Alle users hebben dit nodig, ook oude accounts zonder customer profiel - Beide profielen kunnen nu optioneel de waarde lezen

field_website verwijderd van User Account: - Was: Onnodig dubbel met website veld in profielen - Verwijderd via config delete

field_beroep op Openbaar profiel verwijderd: - Optie A gekozen: Eén bron (Customer profiel), toon waar nodig - Voorkomt data sync issues en dubbele entry - Bij weergave via Customer profiel veld tonen

field_locatie verwijderd van Openbaar profiel: - Was afkomstig van event/agenda entity - Niet relevant voor gebruikersprofielen

field_bio opnieuw aangemaakt: - Oude veld had Field Permissions issue (grijs/disabled) - Nieuw veld zonder restricties - Type: text_long met text_textarea widget - Text format: Eenvoudige HTML

3. Profile Types Configuratie

Customer profiel: - multiple: false ingesteld (was: true) - Voorkomt dat users meerdere klantprofielen aanmaken - Tab "Adresboek" verdwenen, nu "Klantgegevens" - Verplicht bij registratie - Conditional fields werkend: - Beroep "student" -> Opleiding veld - Beroep "anders" -> Anders namelijk veld - Velden niet meer required by default, alleen via conditional

Openbaar profiel: - Optioneel, users kunnen later aanmaken - Velden: Weergavenaam, Profielfoto, Over mij, Website - Beroep wordt getoond vanuit Customer profiel

4. Permissions Ingesteld

Authenticated rol toegevoegd: - create openbaar profile - update own openbaar profile - view own openbaar profile - delete own openbaar profile - create customer profile - update own customer profile - view own customer profile - use text format basic_html

Text format restricted_html verwijderd voor authenticated: - Te verwarrend om te kiezen tussen Eenvoudige en Beperkte HTML - Authenticated users hebben nu alleen Eenvoudige HTML

Content_editor rol: - use text format email_html toegevoegd

5. Pathauto URL Patterns Geconfigureerd

User account URL: - Pattern: /user/[user:uid]/[user:name] - Voorbeeld: /user/44/sjoerd-aangemeld - Combineert ID (uniek) met naam (leesbaar)

Openbaar profiel URL: - Pattern: /profiel/[profile:uid:entity:name]
- Voorbeeld: /profiel/sjoerd-aangemeld - Alleen username, leesbaarder voor publiek

Bulk update uitgevoerd: - Alle bestaande user en profiel aliases geregeneerd - Oude incorrecte aliases (zoals /44/usersjoerd-aangemeld) opgeruimd

Pathauto pattern aangemaakt: - Entity type: Profile - Bundle: Openbaar - Weight: -5 - Selection criteria: alleen openbaar profiel type

6. Text Formats Opgeschoond

Verwijderd: - Podcast URL (was overbodig)

Toegevoegd aan rollen: - Beperkte HTML: Authenticated (later weer verwijderd) - Email HTML: Content_editor (Redacteur)

Eindresultaat text formats: - Beheer: Beheerder - Redactie: Redacteur, Beheerder
- Eenvoudige HTML: Geverifieerde gebruiker, Abonnee, Beheerder - Podcast: Redacteur, Beheerder - Mailchimp campaign: Redacteur, Beheerder - Platte tekst: Iedereen - Email HTML: Redacteur, Beheerder

7. Layout Builder Voorbereiding

User account pagina: - Layout Builder al actief - Two-column layout (75% / 25%) - Nieuwsbrief toggle block toegevoegd aan sidebar - Klaar voor verdere aanpassingen

Technische Details

Custom Module Hooks

vg_mailchimp_subscribe_user_insert()  // Subscribe bij registratie
vg_mailchimp_subscribe_user_update()  // Subscribe/unsubscribe bij wijziging

MailChimp Configuratie

  • DEV lijst ID: 0dc076aa56
  • Merge fields: EMAIL, FNAME, LNAME, MMERGE3 (beroep)
  • Double opt-in: enabled
  • Webhook hash: e64fc24e1027ae0a5c4130de188fadf5

Drupal Entities Structuur

User Account
├─ field_nieuwsbrief (boolean)
├─→ Customer Profiel (1:1, verplicht)
│   ├─ Adres velden
│   ├─ field_beroep (met conditionals)
│   ├─ field_telefoon
│   ├─ KVK, BIG nummers
│   └─ field_website_praktijk
└─→ Openbaar Profiel (0:1, optioneel)
    ├─ field_weergavenaam
    ├─ field_foto
    ├─ field_bio
    └─ field_website_praktijk

Openstaande Punten

Voor Volgende Sessie

  1. Layout Builder verder uitwerken voor user account pagina
  2. Customer profiel velden mooi groeperen en tonen
  3. Openbaar profiel layout via Layout Builder
  4. Beroep veld van Customer tonen op Openbaar profiel
  5. Validaties toevoegen (KVK 8 cijfers, BIG 11 cijfers)

Voor Winkel (Later)

  1. Custom font in PDF facturen
  2. Nieuw product type: Ticket met QR-code generatie

Deployment Checklist - KRITIEK voor Migratie naar LIVE

STAP 1: Pathauto Patterns (EERST DOEN!)

WAARSCHUWING: Dit MOET voor config import, anders krijgen bestaande users verkeerde URLs

  1. User account pattern instellen:
  2. Ga naar: /admin/config/search/path/patterns
  3. Bewerk user pattern
  4. Zet op: /user/[user:uid]/[user:name]

  5. Openbaar profiel pattern aanmaken:

  6. Maak nieuw pattern voor Profile entity
  7. Bundle: Openbaar
  8. Pattern: /profiel/[profile:uid:entity:name]

  9. Bulk update aliases uitvoeren:

  10. Ga naar: /admin/config/search/path/update_bulk
  11. Selecteer Users en Profiles
  12. Run update

  13. Oude incorrecte aliases verwijderen:

  14. Check path_alias tabel voor patronen zoals /44/usersjoerd-aangemeld
  15. Verwijder handmatig

STAP 2: Standaard Migratie

  1. Config import vanuit DEV
  2. MailChimp lijst ID wijzigen (0dc076aa56 -> LIVE lijst)
  3. MailChimp webhook URL updaten
  4. Mollie naar live mode
  5. Base URL in settings.php
  6. Test registratie flow
  7. Test MailChimp subscribe/unsubscribe

Configuratie Exports Nodig

Nieuwe/Gewijzigde Configs

  • profile.type.customer (multiple: false)
  • pathauto.pattern.user (nieuw pattern)
  • pathauto.pattern.profile_openbaar (nieuw)
  • user.role.authenticated (nieuwe permissions)
  • user.role.content_editor (email_html permission)
  • field.storage.user.field_nieuwsbrief (nieuw)
  • field.field.user.user.field_nieuwsbrief (nieuw)
  • field.field.profile.openbaar.field_bio (opnieuw aangemaakt)
  • filter.format.podcast_url (verwijderd)
  • Diverse entity form/view displays

Custom Module

  • /web/modules/custom/vg_mailchimp_subscribe/ (gehele module)

Geleerde Lessen

  1. Field Permissions module kan velden blokkeren ook al zijn entity permissions goed
  2. Pathauto patterns moeten VAN TEVOREN op LIVE staan voor config import
  3. Shared field storage betekent niet automatische data sync tussen entities
  4. User ID in URL is niet onveilig en helpt bij debugging
  5. Text format keuzes simpel houden voor eindgebruikers
  6. Profile multiple setting moet FALSE zijn voor 1-op-1 relatie

Status

Sessie succesvol afgerond. User registratie en profielen zijn nu goed werkend met: - Automatische MailChimp sync - Nette URL structuur
- Correcte permissions - Gebruiksvriendelijke forms

Volgende focus: Layout Builder voor mooie profiel weergave, daarna verder met winkel (facturen, tickets).