# dfsavecart — Warenkorb-Speicherung mit Magic Link

> Überblick dfsavecart fügt der Warenkorb-Seite Ihres PrestaShop-8- oder -9-Shops eine Funktion „Für später aufbewahren" hinzu. Der Besucher, eingeloggt oder als Gast, gibt seine E-Mail-Adresse ein und erhält einen sicheren Link…

- Seite: <https://www.datafirefly.com/de/documentation/dfsavecart/>
- Sprache: de
- Aktualisiert am: 2026-07-01
- Weitere Sprachen: [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), [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), [nl](https://www.datafirefly.com/nl/documentation/dfsavecart/index.md)
- Index: <https://www.datafirefly.com/de/documentation/llms.txt>

## Überblick

dfsavecart fügt der Warenkorb-Seite Ihres PrestaShop-8- oder -9-Shops eine Funktion „Für später aufbewahren" hinzu. Der Besucher, eingeloggt oder als Gast, gibt seine E-Mail-Adresse ein und erhält einen sicheren Link („Magic Link"), der seinen exakten Warenkorb wiederherstellt — gleiche Produkte, gleiche Mengen — auf jedem Gerät, jederzeit innerhalb der konfigurierten Gültigkeitsdauer.

Das Modul ist nicht intrusiv: Es beeinflusst weder den Bestellprozess noch den Checkout oder andere Module. Es arbeitet mit dem nativen E-Mail-System von PrestaShop (und damit mit Ihrem bestehenden SMTP).

## Voraussetzungen

- PrestaShop 8.0.x bis 9.x
- PHP 8.1 oder höher
- MySQL 5.7+ oder MariaDB 10.3+
- Funktionierender E-Mail-Versand (Erweiterte Einstellungen > E-Mail — testen Sie den Versand vor der Modulinstallation)

## Installation

1. Laden Sie die Datei `dfsavecart.zip` aus Ihrem DataFirefly-Konto herunter.
2. Gehen Sie im PrestaShop-Backoffice zu **Module > Modul-Manager**.
3. Klicken Sie auf **Modul hochladen** und wählen Sie das ZIP aus.
4. PrestaShop installiert das Modul automatisch: Die Tabelle `ps_df_savecart` wird erstellt und die Hooks registriert.
5. Klicken Sie auf **Konfigurieren**, um zu den Einstellungen zu gelangen.

Es werden keine Klassen- oder Controller-Overrides installiert: Die Deinstallation ist sauber und rückstandsfrei (Tabelle und Konfigurationsschlüssel werden entfernt).

## Konfiguration

Alle Einstellungen befinden sich auf einer einzigen Seite: **Module > Modul-Manager > dfsavecart > Konfigurieren**.

### Haupteinstellungen

- **Modul aktivieren** — Hauptschalter. Deaktiviert verschwindet der Block aus dem Frontoffice, ohne zu deinstallieren.
- **Button-Position** — _Warenkorb-Fuß_ (empfohlen, Hook `displayShoppingCartFooter`), _Im Warenkorb_ (Hook `displayShoppingCart`) oder _Beides_. Die Wahl hängt von Ihrem Theme ab: Prüfen Sie die Darstellung auf der Warenkorb-Seite nach der Änderung.
- **Gültigkeitsdauer des Links** — von 1 bis 365 Tagen, 30 Standard. Danach läuft der Link ab und der Eintrag wird bereinigt.

### Sicherheit und Anti-Spam

- **Limit pro E-Mail / Tag** — maximale Anzahl von Versendungen für dieselbe Adresse in gleitenden 24 h (10 Standard). 0 zum Deaktivieren. Der Zähler basiert auf einem gesalzenen Hash der E-Mail: Die Adresse wird für diese Funktion nicht im Klartext gespeichert.
- **Einmal-Link** — wenn aktiviert, wird der Link nach der ersten Wiederherstellung ungültig. Nützlich für vertrauliche Warenkörbe (B2B, Angebote).

### Wiederherstellungsverhalten

- **Aktuellen Warenkorb vor der Wiederherstellung leeren** — standardmäßig aktiviert. Wenn deaktiviert, werden die Produkte des Links zum laufenden Warenkorb hinzugefügt (kumulativ).

### DSGVO und E-Mail

- **DSGVO-Einwilligung anfordern** — zeigt vor dem Versand ein Pflicht-Kästchen an (standardmäßig aktiviert, empfohlen).
- **BCC an den Händler senden** — fügt die Kontakt-E-Mail des Shops bei jedem Versand als BCC hinzu, für interne Nachverfolgung.
- **E-Mail-Betreff (pro Sprache)** — für jede aktive Shop-Sprache anpassbar. Verfügbare Variablen: `{shop_name}` und `{firstname}`.

## Funktionsweise für den Kunden

1. Der Kunde legt Produkte in seinen Warenkorb und öffnet die Warenkorb-Seite.
2. Er sieht den Block „Diesen Warenkorb für später aufbewahren" mit einem E-Mail-Feld (vorausgefüllt, wenn eingeloggt).
3. Er gibt seine E-Mail ein, setzt das Einwilligungshäkchen falls verlangt, und klickt auf **Link senden**.
4. Er erhält eine E-Mail mit einer Warenkorb-Zusammenfassung (Produkte, Mengen, geschätzter Gesamtbetrag), dem Ablaufdatum und einem Button **Warenkorb wiederherstellen**.
5. Ein Klick auf den Button stellt den exakten Warenkorb wieder her und leitet zur Warenkorb-Seite weiter, mit einer Bestätigungsmeldung.

### Sonderfälle bei der Wiederherstellung

- **Deaktiviertes oder gelöschtes Produkt** — die Zeile wird übersprungen und der Kunde per Meldung über die nicht verfügbaren Produkte informiert.
- **Unzureichender Bestand** — die Menge wird auf das verfügbare Maximum angepasst, mit einer Meldung über die Anpassung.
- **Abgelaufener oder bereits verwendeter Link** (Einmal-Modus) — eine schlichte Fehlerseite wird angezeigt, mit Links zum aktuellen Warenkorb und zur Startseite.
- **Sprache und Währung** — die des ursprünglichen Warenkorbs werden wiederhergestellt.

## E-Mails

HTML- und Text-Vorlagen werden in **Französisch, Englisch, Spanisch und Deutsch** in `modules/dfsavecart/mails/{iso}/savecart.html` und `savecart.txt` mitgeliefert. Verwendet wird die Sprache des Warenkorbs zum Zeitpunkt der Speicherung.

Verfügbare Variablen in den Vorlagen: `{firstname}`, `{shop_name}`, `{restore_link}`, `{cart_items_html}`, `{cart_items_txt}`, `{cart_total}`, `{expiry_date}`.

Um Vorlagen dauerhaft anzupassen, duplizieren Sie sie in den mails-Ordner Ihres Themes, statt die des Moduls zu bearbeiten: Diese würden beim Update überschrieben.

## Sicherheit

- **256-Bit-Token** — erzeugt von `random_bytes(32)`, dem kryptografisch sicheren Generator von PHP. 64 Hexadezimalzeichen in der URL.
- **Hash-Speicherung** — nur der SHA-256-Fingerabdruck des Tokens wird in der Datenbank gespeichert. Bei einer Kompromittierung der Datenbank kann kein Link rekonstruiert werden.
- **CSRF** — der AJAX-Speicher-Endpoint prüft das PrestaShop-Sitzungstoken.
- **Strikte Validierung** — das Token-Format wird serverseitig geprüft (`[a-f0-9]{64}`), bevor eine Datenbankabfrage erfolgt.

## DSGVO

- Konfigurierbare ausdrückliche Einwilligung vor dem E-Mail-Versand.
- Für das Anti-Spam-Limit wird die E-Mail nicht im Klartext aufbewahrt: Es wird nur ein gesalzener Hash (mit dem geheimen Schlüssel des Shops) verwendet.
- Abgelaufene Datensätze werden automatisch gelöscht (Bereinigung) — siehe nächster Abschnitt.
- Es werden keine Daten an Drittanbieter übermittelt: Alles bleibt in Ihrer PrestaShop-Datenbank.
- Bei einem Löschantrag eines Kunden löschen Sie dessen Zeilen in der Tabelle `ps_df_savecart` (Spalte `email`).

## Bereinigung abgelaufener Links

Drei Optionen, von der einfachsten zur am stärksten automatisierten:

1. **Manueller Button** — auf der Konfigurationsseite des Moduls, „Abgelaufene Einträge bereinigen".
2. **CronJobs-Modul** — installieren Sie das kostenlose CronJobs-Modul von PrestaShop: Der Hook `actionCronJob` des Moduls wird automatisch aufgerufen und löst die Bereinigung aus.
3. **System-Crontab** — planen Sie einen regelmäßigen Aufruf des Shop-Crons entsprechend Ihrer Serverkonfiguration.

## Statistiken

Die Konfigurationsseite zeigt vier Echtzeit-Zähler: **gesamt gespeichert**, **aktiv** (nicht abgelaufen), **abgelaufen** (Bereinigung ausstehend) und **wiederhergestellt** (mindestens einmal verwendete Links). Das Verhältnis wiederhergestellt / gesamt ergibt die Conversion-Rate der Funktion.

## Multishop

Das Modul ist Multishop-kompatibel: Jede Speicherung merkt sich die ID des Ursprungs-Shops, die bei der Wiederherstellung verwendet wird. Die Konfiguration folgt dem Standard-Shop-Kontext von PrestaShop.

## Fehlerbehebung

### Die E-Mail kommt nicht an

- Prüfen Sie den globalen E-Mail-Versand des Shops: **Erweiterte Einstellungen > E-Mail > Versand testen**.
- Prüfen Sie den Spam-Ordner des Empfängers.
- Prüfen Sie die Logs: **Erweiterte Einstellungen > Logs** (Modulfehler haben das Präfix `[dfsavecart]`).

### Der Block erscheint nicht auf der Warenkorb-Seite

- Prüfen Sie, ob das Modul in seiner Konfiguration aktiviert ist.
- Prüfen Sie, ob der Warenkorb mindestens ein Produkt enthält (der Block ist bei leerem Warenkorb ausgeblendet).
- Prüfen Sie die gewählte Position: Manche Themes implementieren den Hook `displayShoppingCartFooter` nicht — wechseln Sie dann auf „Im Warenkorb" oder „Beides".
- Leeren Sie den Cache: **Erweiterte Einstellungen > Leistung > Cache leeren**.

### Meldung „Ungültiges Sicherheitstoken"

- Die Warenkorb-Seite war zu lange geöffnet und die Sitzung ist abgelaufen: Aktualisieren Sie die Seite und versuchen Sie es erneut.

### Meldung „Zu viele Anfragen für diese Adresse"

- Das tägliche Anti-Spam-Limit für diese E-Mail wurde erreicht. Erhöhen Sie das Limit in der Konfiguration oder warten Sie 24 h.

## Deinstallation

Die Deinstallation entfernt die Tabelle `ps_df_savecart` (alle gespeicherten Warenkörbe gehen verloren) und sämtliche Konfigurationsschlüssel. Es bleiben keine Rückstände in der Datenbank oder auf der Festplatte.
