Dokumentation
Mit Isotope Widerrufsbutton + GPSR bekommt dein Isotope-Shop die Technik für die Widerrufsfunktion nach § 356a BGB (gilt seit 19.06.2026) und für die Angaben zur Produktsicherheit nach Art. 19 der EU-Produktsicherheitsverordnung (GPSR). Voraussetzungen: Contao 4.13, Isotope eCommerce 2.9, PHP 8.1 oder neuer, Notification Center 1.6 (kommt mit Isotope). Paket: contaolabs/isotope-legal-bundle
Rechtliche Prüfung: Die Erweiterung stellt die Technik bereit, sie ist keine Rechtsberatung. Für die rechtliche Prüfung deines Shops bist du selbst verantwortlich. Lass Texte, Mails, Fristen, Einstellungen und Produktangaben vor dem Livegang von einer Fachstelle prüfen, zum Beispiel vom Händlerbund, der IT-Recht-Kanzlei oder deiner Anwältin bzw. deinem Anwalt.
license-client-….zip hochladen.Ohne gültige Lizenz sind die GPSR-Bereiche und die Module im Backend gesperrt. Widerrufsformular, Mails und GPSR-Angaben im Shop laufen immer weiter, und die Liste der eingegangenen Widerrufe bleibt immer erreichbar.
{{cl_withdrawal::link}} verwenden. Das Gesetz verlangt, dass die Funktion während der Widerrufsfrist ständig verfügbar, hervorgehoben und leicht zugänglich ist.##cl_withdrawal_link## (fertiger Link) oder ##cl_withdrawal_url## (nur die Adresse) einfügen. Der Link öffnet das Formular direkt mit der passenden Bestellung, ohne Login. Er ist signiert und lässt sich nicht auf andere Bestellungen umschreiben.Im Kundenkonto erscheint der Button automatisch in der Bestelldetail-Ansicht. Angemeldete Kunden sehen im Widerrufsformular außerdem ihre Bestellungen.
Du oder Sie: Formular und Eingangsbestätigung siezen. Duzt dein Shop seine Kunden, setzt du in der Shop-Konfiguration Kunden duzen. Die Texte in eigenen Benachrichtigungen schreibst du ohnehin selbst.
So sieht das Ganze im Demo-Shop aus: Seite „Vertrag widerrufen“, Link im Footer, Block „Produktsicherheit“ bei Skibrille und Skihelm.
Mehrere Teil-Widerrufe zu einer Bestellung sind möglich, bereits widerrufene Mengen werden abgezogen. Sets aus Isotope Bundle Products erscheinen als ein Produkt.
Isotope speichert kein Lieferdatum. Die Frist beginnt deshalb
Die Frist (Standard 14 Tage) und ein Puffer für die Lieferzeit (Standard 14 Tage) stellst du in der Shop-Konfiguration ein. So lange bieten Kundenkonto und Bestellansicht den Widerruf an. Über das Formular kommt ein Kunde auch danach noch durch: Der Widerruf wird angenommen und in der Liste mit ⚠ als „nach Fristende“ markiert. Mit Frist beginnt erst mit dem Versand bleiben noch nicht versendete Bestellungen unbegrenzt widerrufbar.
Für Waren ohne Widerrufsrecht (zum Beispiel Sonderanfertigungen) setzt du die Checkbox Widerrufsrecht ausgeschlossen am Produkttyp (gilt für alle Produkte des Typs) oder am einzelnen Produkt. Für das Feld am Produkt aktivierst du im Produkttyp unter „Attribute“ das Feld aus der Gruppe „Widerrufsrecht“. Solche Positionen lassen sich im Formular nicht auswählen und tragen einen Hinweis.
Ohne weitere Einrichtung verschickt die Erweiterung eine einfache Mail mit allen Angaben an den Kunden und an die E-Mail für Widerrufe aus der Shop-Konfiguration. Eigene Texte gestaltest du im Notification Center mit den Typen Widerruf: Eingangsbestätigung und Widerruf: Info an den Shop. Die Benachrichtigungen wählst du anschließend in der Shop-Konfiguration aus.
Neben allen Bestell-Tokens wie in der Bestellbestätigung (z. B. ##billing_address_firstname##, ##document_number##) stehen bereit:
##withdrawal_text## – alle Angaben als Text: Bestellung, Name, E-Mail, Umfang, Positionen, Grund, Eingang##withdrawal_received_at## – Datum und Uhrzeit des Eingangs, z. B. „22.10.2026, 14:05:31 Uhr“##withdrawal_name##, ##withdrawal_email##, ##withdrawal_reason##, ##withdrawal_scope####withdrawal_items## (Text) und ##withdrawal_items_html## (Liste)##withdrawal_order_number##, ##withdrawal_deadline##, ##withdrawal_late####admin_email## – die E-Mail für WiderrufeAls Empfänger trägst du ##withdrawal_email## (Kunde) bzw. ##admin_email## (Shop) ein. Optional setzt die Erweiterung nach einem Widerruf einen Bestellstatus, zum Beispiel einen neuen Status „Widerrufen“.
Unter Isotope → Widerrufe siehst du alle Widerrufe mit Eingang, Bestellung, Name, Umfang und Status. Den Status (eingegangen, in Bearbeitung, erledigt) und eine interne Notiz pflegst du selbst, die Angaben des Kunden bleiben unverändert. Über die Symbole öffnest du die Bestellung oder schickst die Eingangsbestätigung erneut. In der Bestellung selbst steht oben ein Hinweis, wenn ein Widerruf vorliegt.
Auf der Produktseite erscheint unter dem Produkt der aufklappbare Block Produktsicherheit. Wer ihn selbst platzieren möchte, schaltet in der Shop-Konfiguration Automatisch auf der Produktseite zeigen aus und gibt im Leser-Template <?= $this->clGpsr ?> oder den Insert-Tag {{gpsr::block}} aus.
Unter Isotope → GPSR-Prüfbericht stehen alle veröffentlichten Produkte mit einer Ampel, filterbar nach Produkttyp und Status:
Viele Hersteller importierst du per CSV direkt im Prüfbericht. Das Format wird an der Kopfzeile erkannt (Trennzeichen Semikolon oder Komma):
name;trademark;street;postal;city;country;email;website;outside_eu;eu_name;eu_street;eu_postal;eu_city;eu_country;eu_email
ACME GmbH;ACME;Musterweg 1;01067;Dresden;de;info@acme.example;;nein;;;;;;
Hersteller mit gleichem Namen werden aktualisiert. Die Zuordnung zu Produkten geht per Artikelnummer:
sku;manufacturer
TS-100;ACME GmbH
mod_cl_withdrawal – Widerrufsformular, mod_cl_withdrawal_link – Button, cl_gpsr_block – Block „Produktsicherheit“{{cl_withdrawal::link}} und {{cl_withdrawal::url}} – Link bzw. Adresse des Widerrufsformulars{{gpsr::block}} – Block des aktuellen Produkts, {{gpsr::block::ID}} für ein bestimmtes{{gpsr::manufacturer}}, {{gpsr::manufacturer_address}}, {{gpsr::eu_person}}, {{gpsr::warnings}}, {{gpsr::identifier}} – einzelne Angaben, optional mit ::IDDer Grundstil liegt in bundles/contaolabsisotopelegal/legal.css und lässt sich im Theme überschreiben. Farben und Ecken passt du am einfachsten über Variablen an:
.cl-wd, .cl-gpsr {
--cl-legal-accent: #8a5a2b; /* Buttons, Auswahl, Fokus */
--cl-legal-accent-ink: #fff; /* Schrift auf Buttons */
--cl-legal-line: #dcdcdf; /* Rahmen */
--cl-legal-radius: 12px; /* Ecken */
}
Weitere Variablen: --cl-legal-ink, --cl-legal-muted, --cl-legal-soft, --cl-legal-bg, --cl-legal-ok, --cl-legal-warn, --cl-legal-error.