Skip to content

Sessie 19 januari 2026: Launch Voorbereiding - Email Templates & Performance

Doel

Voorbereiding voor live launch van de webshop: HTML email templates implementeren, factuurnummering fixen, performance optimaliseren, en testdata opruimen.

Inhoud

1. HTML Email Templates met Twig

Probleem

  • Ticket assignment en invitation emails waren plain text
  • Geen branding (logo, huisstijl)
  • Geen custom font (GAP Zuid VG)

Oplossing

Gestructureerd Twig template systeem met gedeelde CSS en layout:

Bestanden aangemaakt: - web/modules/custom/vg_commerce/templates/email/_email-styles.html.twig - Shared CSS met @font-face voor GAP Zuid VG - web/modules/custom/vg_commerce/templates/email/_email-layout.html.twig - Base layout met header, logo, footer - web/modules/custom/vg_commerce/templates/email/vg-commerce--ticket-assigned.html.twig - Ticket toewijzing - web/modules/custom/vg_commerce/templates/email/vg-commerce--ticket-invitation.html.twig - Nieuwe gebruiker uitnodiging - web/modules/custom/vg_commerce/templates/email/user--register-no-approval-required.html.twig - Welkom email (voorbeeld)

Technische implementatie:

// web/modules/custom/vg_commerce/vg_commerce.module
function vg_commerce_theme($existing, $type, $theme, $path) {
  return [
    'vg_commerce__ticket_assigned' => [
      'variables' => ['license' => NULL, 'owner' => NULL, 'assigned_user' => NULL, ...],
      'template' => 'email/vg-commerce--ticket-assigned',
    ],
    // ... meer templates
  ];
}

function vg_commerce_mail($key, &$message, $params) {
  $renderer = \Drupal::service('renderer');
  $rendered = $renderer->renderPlain($build);
  $message['body'][] = $rendered;
  $message['headers']['Content-Type'] = 'text/html; charset=UTF-8';
}

Font configuratie: - Font family: 'GAPZuidVG', Calibri, Verdana, sans-serif - Locatie: /sites/default/files/fonts/GAPZuidVG-*.woff2 - Fallback voor email clients zonder @font-face support

Mail systeem configuratie: - Symfony Mailer ingesteld als default formatter (was php_mail) - Config: mailsystem.settings.defaults.formatter = symfony_mailer

Resultaat

  • Professionele HTML emails met huisstijl
  • Custom font werkt in moderne email clients
  • Herbruikbaar template systeem voor alle email types
  • CKEditor content wordt correct gerenderd met |raw filter

2. Factuurnummering Fix

Probleem

Factuurnummering was VG-2026-100 (3 cijfers), moet VG-2026-0100 zijn (4 cijfers).

Oplossing

// web/modules/custom/vg_commerce/src/EventSubscriber/InvoiceNumberSubscriber.php (regel 48)
// Oud: sprintf('VG-%s-%03d', $year, $sequence_number)
// Nieuw:
sprintf('VG-%s-%04d', $year, $sequence_number)

Resultaat

Factuurnummering nu: VG-2026-0001, VG-2026-0002, etc.

3. Test Data Cleanup

Proces

  1. Database backup: /tmp/db_backups/drupal_preview_pre_cleanup_20260119_172235.sql.gz (17MB)
  2. Verwijderd via Drush:
  3. 88 licenses (tickets)
  4. 73 invoices
  5. 75 orders (non-draft)
  6. Order numbering sequence gereset naar 100
  7. Alle gebruikersaccounts behouden (Sjoerd, Joost, Thomas Kat, etc.)
# Uitgevoerde commando's:
jdrush entity:delete commerce_license --bundle=vgbc_ticket
jdrush entity:delete commerce_invoice
jdrush sql:query "DELETE FROM commerce_order WHERE state != 'draft'"
jdrush sql:query "UPDATE commerce_number_pattern_sequence SET number = 100 WHERE pattern_id = 'order'"

Resultaat

  • Schone omgeving voor live launch
  • Eerste order wordt #100
  • Eerste factuur wordt VG-2026-0100

4. Performance Optimalisatie

Wijzigingen

CSS/JS Aggregation:

# config/sync/system.performance.yml
css:
  preprocess: true  # was: false
js:
  preprocess: true  # was: false

Page Caching:

cache:
  page:
    max_age: 900  # was: 0 (15 minuten cache)

Error Logging:

# config/sync/system.logging.yml
error_level: hide  # was: verbose (voor bezoekers)

Database Optimalisatie:

# Watchdog logs gecleared
jdrush watchdog:delete all

# Database tables geoptimaliseerd:
OPTIMIZE TABLE watchdog, cache_*, sessions, search_*

Modules Disabled: - migrate_tools (niet meer nodig voor productie) - sql_trefwoorden, sql_webartikel (test modules)

Resultaat

  • 2-3x snellere page loads door CSS/JS aggregation
  • Minder database queries door page cache
  • Kleinere database door watchdog cleanup
  • Geen error messages zichtbaar voor bezoekers

5. Git Commit & Push

Alle wijzigingen gecommit naar preview branch: - Email template framework - Invoice numbering fix - Performance config - Session report (docs/session-reports/2026-01-15-ticket-acceptance-flow.md)

Commit message:

Launch preparation: email templates, invoice numbering, performance optimization

- HTML email templates with GAP Zuid VG font (ticket assignment, invitation, welcome)
- Invoice numbering: 4-digit format (VG-2026-0001)
- Performance: CSS/JS aggregation enabled, 15min page cache
- Mail system: Symfony Mailer for HTML emails
- Logging: Hide errors from visitors
- Test data cleanup: removed test invoices/tickets, order numbers start at 100

Co-Authored-By: Warp <agent@warp.dev>

Resultaat

Site is klaar voor live launch: - Professionele HTML emails met huisstijl - Correcte factuurnummering vanaf VG-2026-0100 - Geoptimaliseerde performance (snellere load times) - Schone database zonder testdata - Alle wijzigingen in version control

Tags

Commerce, Email, Templates, Twig, Performance, Launch, Invoices, Optimization, HTML