Skip to content

Sessie Verslag: Dashboard-centric User Experience Refactor

Datum: 1 december 2025 Doel: Vereenvoudigde user navigation met Account pagina als centrale hub

Wat is Bereikt

1. SSH Key Setup (dreojs user)

  • Nieuwe SSH key met passphrase aangemaakt voor user dreojs
  • ssh-agent geconfigureerd voor automatische key loading
  • Public key toegevoegd aan authorized_keys
  • Laptop key getest en werkend

2. Navigatie Structuur Vereenvoudigd

Van 4 pagina's naar 1 centrale pagina: - ❌ Aparte Dashboard pagina verwijderd - ✅ Account pagina (/user/{uid}) is nu de centrale hub - ✅ Layout Builder actief op Account pagina - ✅ Login redirect gaat naar Account pagina

Gin Account Menu (sidebar): 1. Klantgegevens → /user/{uid}/klantgegevens/edit 2. Profiel → /user/{uid}/profiel

User Toolmenu (Gin toolbar dropdown): 1. Account weergeven → /my/account 2. Account bewerken → /my/account/edit 3. Profiel weergeven → /my/profiel 4. Profiel bewerken → /my/profiel/edit 5. Klantgegevens bewerken → /my/klantgegevens/edit

3. Routes & Controllers

Profile Routes

/user/{uid}/profiel               → View mode (custom)
/user/{uid}/profiel/edit          → Edit form (custom)
/user/{uid}/klantgegevens/edit    → Edit form (direct, no view)

Redirect Routes (/my/*)

Alle User Toolmenu items gebruiken /my/* shortcuts die redirecten naar user-specifieke pagina's:

/my/account                → /user/{current_uid}
/my/account/edit           → /user/{current_uid}/edit
/my/profiel                → /user/{current_uid}/profiel
/my/profiel/edit           → /user/{current_uid}/profiel/edit
/my/klantgegevens/edit     → /user/{current_uid}/klantgegevens/edit

Access Control

  • ProfileViewController heeft access() method
  • Users kunnen alleen eigen profielen zien/bewerken
  • Admins hebben toegang tot alle profielen

4. Tabs Configuratie

  • Klantgegevens: Geen tabs (direct edit)
  • Profiel: Weergeven + Bewerken tabs
  • Account: Weergeven + Bewerken tabs (native Drupal)
  • Dubbele tabs gefixed via hook_menu_local_tasks_alter()

5. Technische Implementatie

Nieuwe/Gewijzigde Bestanden

Controllers: - vg_commerce/src/Controller/ProfileViewController.php - Profile view/edit + access control - vg_commerce/src/Controller/MyPageRedirectController.php - /my/* redirects

Configuration: - vg_commerce/vg_commerce.routing.yml - Profile + redirect routes - vg_commerce/vg_commerce.links.menu.yml - Gin Account Menu + User Toolmenu items - vg_commerce/vg_commerce.links.task.yml - Profiel tabs (view/edit) - vg_commerce/vg_commerce.module - Login redirect, tabs filter, toolbar alter

Theme: - vg_commerce/src/Theme/CommerceThemeNegotiator.php - Gin theme voor alle user pages

Verwijderde Bestanden

  • UserDashboardController.php (niet meer nodig)
  • user-dashboard.html.twig (niet meer nodig)
  • ❌ Dashboard route

6. Menu Implementatie

User Toolmenu aangemaakt: - Machine name: user-toolmenu - Label: "User Toolmenu" - Geplaatst in Gin toolbar - 5 menu items met /my/* redirect routes

7. Layout Builder

  • Account pagina gebruikt Layout Builder (was al actief)
  • Widgets kunnen via UI worden toegevoegd/verplaatst
  • Klaar voor toekomstige uitbreiding (admin berichten, aanbevolen artikelen, etc.)

Testing Checklist ✅

  • Account pagina accessible via /user/{uid}
  • Menu shows: Klantgegevens, Profiel (in sidebar)
  • User Toolmenu shows 5 items in Gin toolbar
  • Klantgegevens links directly to edit, no tabs
  • Profiel has view/edit tabs
  • Profiel view shows fields correctly
  • Account page still has view/edit tabs
  • Login redirects to /user/{uid}
  • All pages use Gin theme
  • Users can only access their own profiles
  • /my/* redirects work for current user
  • No duplicate tabs on any page
  • Layout Builder works on Account page

Belangrijke Beslissingen

Waarom Account = Dashboard?

Probleem: 4 separate pages was verwarrend Oplossing: Account pagina heeft al Layout Builder, dus gebruik die als centrale hub Voordeel: - Geen extra complexity - Layout Builder werkt nu al - Users snappen "Account" beter dan "Dashboard"

Waarom /my/* Redirect Routes?

Probleem: Menu items kunnen geen [user:current:uid] token gebruiken Oplossing: Shorthand routes zoals /my/profiel die redirecten naar /user/{current_uid}/profiel Voordeel: - Simpele, statische routes in menu items - Werkt voor elke ingelogde user - Makkelijk te onthouden URLs

Waarom Klantgegevens zonder View Mode?

Reden: - Technische velden (adres, BTW, etc.) - Primary actie is bewerken, niet bekijken - Consistenter met e-commerce UX patterns

Waarom Profiel WEL met View Mode?

Reden: - User wil zien hoe anderen hem/haar zien - "Preview" functionaliteit is waardevol - Volgt Drupal's native user entity pattern

Open voor Volgende Sessies

Toekomstige Features (niet in deze sessie)

  1. Admin berichten systeem - Flagging of custom entity voor berichten aan users
  2. Aanbevolen artikelen - Op basis van browse history
  3. Bewaar artikel functionaliteit - Flag module voor saved content
  4. Gin toolbar customization - Shortcuts voor authenticated users
  5. Dashboard widgets - Recent orders, invoices, etc.

Deployment naar Live

Zie deployment checklist hieronder.

Statistieken

  • Sessieduur: ~4 uur
  • Routes aangepast: 8
  • Controllers: 2
  • Menu's: 2 (Account + Toolmenu)
  • Cache rebuilds: 20+
  • Grootste uitdaging: Menu items met dynamic user IDs (opgelost met /my/* redirects)
  • Grootste win: Van 4 pages naar 1 centrale hub met Layout Builder

Deployment Checklist naar Live

Pre-Deployment

  • Backup live database en files
  • Git commit alle dev changes
    cd /var/www/sites/dev.voedingsgeneeskunde
    git add web/modules/custom/vg_commerce
    git commit -m "User experience refactor: Account als centrale hub + User Toolmenu"
    git push origin main
    

Deployment Stappen (Live Site)

1. Code Deployment

cd /var/www/sites/live.voedingsgeneeskunde.nl
git pull origin main

2. Module Re-enable (vg_commerce was uitgeschakeld)

ldrush pm:enable vg_commerce -y

3. Cache Clear

ldrush cr

4. Menu Aanmaken

Via UI: /admin/structure/menu/add - Menu naam (machine name): user-toolmenu - Label: User Toolmenu - Beschrijving: Snelle navigatie voor ingelogde gebruikers - Save

Na opslaan verschijnen automatisch de 5 menu items (via vg_commerce.links.menu.yml)

5. Menu Block Plaatsen

Via UI: /admin/structure/block - Kies Gin theme - Zoek naar geschikte Gin toolbar regio - Plaats "Menu: User Toolmenu" block - Visibility: Alleen voor ingelogde users - Save

6. Account Page Layout (optioneel)

Via UI: /admin/config/people/accounts/display - Layout Builder gebruiken om widgets toe te voegen zoals op dev - Of: laat users de default layout zien en pas later aan

7. Permissions Check

ldrush upwd admin --password="{{admin_password}}"
Test als normale user: - Kan user eigen profiel zien/bewerken? - Kan user NIET andere profielen zien? - Werken alle User Toolmenu items?

Post-Deployment Verificatie

Test Checklist (Live)

  • Login werkt en redirect naar /user/{uid}
  • Gin Account Menu toont: Klantgegevens, Profiel
  • User Toolmenu in toolbar toont 5 items
  • Klik elk menu item - redirects werken
  • Test /my/profiel - redirect naar eigen profiel
  • Klantgegevens: geen tabs, direct edit
  • Profiel: view + edit tabs aanwezig
  • Users kunnen NIET elkaars profielen zien
  • Geen PHP errors in logs
  • Gin theme actief op alle user pages

Als Iets Misgaat

Rollback procedure:

cd /var/www/sites/live.voedingsgeneeskunde.nl
git reset --hard HEAD~1  # Undo laatste commit
ldrush pm:uninstall vg_commerce -y  # Module uitzetten
ldrush cr
# Restore database backup

Belangrijke Notities voor Live

  1. vg_commerce module was uitgeschakeld - Dit was om errors te voorkomen tijdens dev. Nu kan het weer aan!

  2. User Toolmenu moet handmatig worden aangemaakt via UI op live (menu machine name: user-toolmenu)

  3. Config is in code - Menu items komen automatisch zodra vg_commerce enabled is

  4. Geen database updates nodig - Alleen code changes

  5. Backwards compatible - Oude URLs blijven werken, nieuwe komen erbij

Contact

Bij vragen of problemen tijdens deployment, check de logs:

ldrush watchdog:show --tail


Session completed successfully! Ready for deployment. 🎉