# dfsavecart: winkelwagen bewaren via een magic link

> Overzicht dfsavecart voegt de functie « Bewaren voor later » toe aan de winkelwagenpagina van uw PrestaShop 8- of 9-winkel. De bezoeker, ingelogd of als gast, vult zijn e-mailadres in…

- Pagina: <https://www.datafirefly.com/nl/documentation/dfsavecart/>
- Taal: nl
- Bijgewerkt op: 2026-09-09
- Andere talen: [fr](https://www.datafirefly.com/documentation/dfsavecart/index.md), [en](https://www.datafirefly.com/en/documentation/dfsavecart/index.md), [es](https://www.datafirefly.com/es/documentation/dfsavecart/index.md), [de](https://www.datafirefly.com/de/documentation/dfsavecart/index.md), [it](https://www.datafirefly.com/it/documentation/dfsavecart/index.md), [pl](https://www.datafirefly.com/pl/documentation/dfsavecart/index.md), [pt](https://www.datafirefly.com/pt/documentation/dfsavecart/index.md)
- Index: <https://www.datafirefly.com/nl/documentation/llms.txt>

## Overzicht

dfsavecart voegt de functie « Bewaren voor later » toe aan de winkelwagenpagina van uw PrestaShop 8- of 9-winkel. De bezoeker, ingelogd of als gast, vult zijn e-mailadres in en krijgt een beveiligde link (een « magic link ») die zijn winkelwagen exact herstelt, met dezelfde producten en dezelfde aantallen, op elk toestel en op elk moment binnen de ingestelde geldigheidsduur.

De module is niet opdringerig: hij raakt het bestelproces, het afrekenen en de andere modules niet aan. Hij werkt met het native e-mailsysteem van PrestaShop en dus met uw bestaande SMTP.

## Vereisten

- PrestaShop 8.0.x tot 9.x
- PHP 8.1 of hoger
- MySQL 5.7+ of MariaDB 10.3+
- Werkende e-mailverzending (Geavanceerde parameters > E-mail: test de verzending vóór u de module installeert)

## Installatie

1. Download het bestand `dfsavecart.zip` vanuit uw DataFirefly-account.
2. Ga in de PrestaShop-backoffice naar **Modules > Modulebeheer**.
3. Klik op **Een module uploaden** en kies de ZIP.
4. PrestaShop installeert de module automatisch: de tabel `ps_df_savecart` wordt aangemaakt en de hooks worden geregistreerd.
5. Klik op **Configureren** om bij de instellingen te komen.

Er wordt geen enkele class- of controller-override geïnstalleerd: het verwijderen verloopt netjes en laat niets achter (de tabel en de instellingen worden gewist).

## Configuratie

Alle instellingen staan op één pagina: **Modules > Modulebeheer > dfsavecart > Configureren**.

### Hoofdinstellingen

- **De module inschakelen**: hoofdschakelaar. Staat die uit, dan verdwijnt het blok aan de frontzijde zonder dat u de module hoeft te verwijderen.
- **Positie van de knop**: _Onder aan de winkelwagen_ (aanbevolen, hook `displayShoppingCartFooter`), _In de winkelwagen_ (hook `displayShoppingCart`) of _Beide_. De keuze hangt van uw thema af: controleer na een wijziging hoe de winkelwagenpagina eruitziet.
- **Geldigheidsduur van de link**: 1 tot 365 dagen, standaard 30. Daarna verloopt de link en wordt de vermelding opgeruimd.

### Beveiliging en antispam

- **Limiet per e-mailadres per dag**: het maximale aantal verzendingen naar hetzelfde adres binnen 24 voortschrijdende uren (standaard 10). Zet 0 om dit uit te schakelen. De teller berust op een gezouten hash van het e-mailadres: het adres wordt daarvoor niet in leesbare vorm bewaard.
- **Link voor eenmalig gebruik**: staat dit aan, dan wordt de link na het eerste herstel ongeldig. Handig voor vertrouwelijke winkelwagens (B2B, offertes).

### Gedrag bij het herstellen

- **De huidige winkelwagen legen vóór het herstel**: standaard aan. Staat dit uit, dan komen de producten uit de link bij de lopende winkelwagen (samentellen).

### AVG en e-mail

- **AVG-toestemming vragen**: toont een verplicht selectievakje vóór de verzending (standaard aan, aanbevolen).
- **Blinde kopie naar de handelaar sturen**: zet het contactadres van de winkel bij elke verzending in bcc, voor interne opvolging.
- **Onderwerp van de e-mail (per taal)**: aan te passen voor elke actieve taal van de winkel. Beschikbare variabelen: `{shop_name}` en `{firstname}`.

## Werking aan klantzijde

1. De klant legt producten in zijn winkelwagen en opent de winkelwagenpagina.
2. Hij ziet het blok « Bewaar deze winkelwagen voor later » met een e-mailveld (vooraf ingevuld als hij is ingelogd).
3. Hij vult zijn e-mailadres in, vinkt de toestemming aan indien gevraagd en klikt op **De link versturen**.
4. Hij ontvangt een e-mail met een overzicht van de winkelwagen (producten, aantallen, geschat totaal), de vervaldatum en een knop **Mijn winkelwagen herstellen**.
5. Een klik op die knop herstelt de exacte winkelwagen en leidt naar de winkelwagenpagina, met een bevestigingsmelding.

### Bijzondere gevallen bij het herstellen

- **Uitgeschakeld of verwijderd product**: de regel wordt overgeslagen en de klant krijgt een melding met de niet-beschikbare producten.
- **Onvoldoende voorraad**: de hoeveelheid wordt tot het beschikbare maximum teruggebracht, met een melding over die aanpassing.
- **Verlopen of al gebruikte link** (bij eenmalig gebruik): er verschijnt een sobere foutpagina, met links naar de huidige winkelwagen en de startpagina.
- **Taal en valuta**: die van de oorspronkelijke winkelwagen worden hersteld.

## E-mails

De HTML- en tekstsjablonen worden geleverd in het **Frans, Engels, Spaans en Duits**, in `modules/dfsavecart/mails/{iso}/savecart.html` en `savecart.txt`. De gebruikte taal is die van de winkelwagen op het moment van bewaren.

Beschikbare variabelen in de sjablonen: `{firstname}`, `{shop_name}`, `{restore_link}`, `{cart_items_html}`, `{cart_items_txt}`, `{cart_total}` en `{expiry_date}`.

Wilt u de sjablonen blijvend aanpassen, kopieer ze dan naar de mailmap van uw thema in plaats van die van de module te wijzigen: die laatste worden bij een update overschreven.

## Beveiliging

- **Token van 256 bits**: gegenereerd met `random_bytes(32)`, de cryptografisch veilige generator van PHP. Dat geeft 64 hexadecimale tekens in de URL.
- **Opslag als hash**: alleen de SHA-256-afdruk van het token staat in de database. Raakt de database gecompromitteerd, dan valt geen enkele link te reconstrueren.
- **CSRF**: het AJAX-endpoint voor het bewaren controleert het sessietoken van PrestaShop.
- **Strikte validatie**: het formaat van het token wordt aan serverzijde gecontroleerd (`[a-f0-9]{64}`) vóór elke databasequery.

## AVG

- Instelbare uitdrukkelijke toestemming vóór het versturen van de e-mail.
- Voor de antispamlimiet wordt het e-mailadres niet leesbaar bewaard: er wordt alleen een gezouten hash gebruikt (met de geheime sleutel van de winkel).
- Verlopen vermeldingen worden automatisch verwijderd (opruimen), zie het volgende onderdeel.
- Er gaat geen enkel gegeven naar een externe dienst: alles blijft in uw PrestaShop-database.
- Vraagt een klant om verwijdering, wis dan zijn regels in de tabel `ps_df_savecart` (kolom `email`).

## Verlopen links opruimen

Er zijn drie mogelijkheden, van de eenvoudigste naar de meest geautomatiseerde:

1. **Handmatige knop**: op de configuratiepagina van de module, « De verlopen vermeldingen opruimen ».
2. **Module CronJobs**: installeer de gratis CronJobs-module van PrestaShop; de hook `actionCronJob` van de module wordt dan automatisch aangeroepen en start het opruimen.
3. **Crontab van het systeem**: plan een regelmatige aanroep van de cron van uw winkel, volgens uw serverconfiguratie.

## Statistieken

De configuratiepagina toont vier tellers in real time: **totaal bewaard**, **actief** (niet verlopen), **verlopen** (wachtend op opruiming) en **hersteld** (links die minstens één keer zijn gebruikt). De verhouding hersteld op totaal geeft u het conversiepercentage van de functie.

## Multistore

De module werkt in multistore: elke bewaring onthoudt de identificatie van de oorspronkelijke winkel, die bij het herstellen wordt gebruikt. De configuratie verloopt via de standaard winkelcontext van PrestaShop.

## Problemen oplossen

### De e-mail komt niet aan

- Controleer de algemene e-mailverzending van de winkel: **Geavanceerde parameters > E-mail > De verzending testen**.
- Controleer de spammap van de ontvanger.
- Raadpleeg de logboeken: **Geavanceerde parameters > Logboeken** (de fouten van de module dragen het voorvoegsel `[dfsavecart]`).

### Het blok verschijnt niet op de winkelwagenpagina

- Controleer of de module in zijn configuratie is ingeschakeld.
- Controleer of de winkelwagen minstens één product bevat (bij een lege winkelwagen blijft het blok verborgen).
- Controleer de gekozen positie: sommige thema's implementeren de hook `displayShoppingCartFooter` niet. Schakel dan over op « In de winkelwagen » of « Beide ».
- Leeg de cache: **Geavanceerde parameters > Prestaties > Cache legen**.

### Melding « Ongeldig beveiligingstoken »

- De winkelwagenpagina heeft te lang opengestaan en de sessie is verlopen: ververs de pagina en probeer opnieuw.

### Melding « Te veel aanvragen voor dit adres »

- De dagelijkse antispamlimiet voor dat e-mailadres is bereikt. Verhoog de limiet in de configuratie of wacht 24 uur.

## Verwijderen

Bij het verwijderen worden de tabel `ps_df_savecart` (alle bewaarde winkelwagens gaan verloren) en alle configuratiesleutels gewist. Er blijft niets achter in de database en niets in de bestanden.
