Versandfreigrenze pro Land, USt-ID, Rechtstexte+FAQ jetzt admin-editierbar
1) Versandkostenfreigrenze ist jetzt länderabhängig statt einer einzigen Zahl für alle: Deutschland 75 €, Österreich/Luxemburg 85 €, Schweiz 100 € (im Adminbereich unter "Versandkosten-Staffel" änderbar). Betrifft Warenkorb (live je nach gewähltem Land), Checkout-Berechnung, sowie alle Text-Hinweise (Topbar, FAQ, AGB) in allen 4 Sprachen. 2) Neues Feld "USt-IdNr." im Impressum (optional, admin-editierbar) — erscheint nur, wenn ausgefüllt. 3) Impressum, AGB, Datenschutzerklärung, Widerrufsbelehrung und FAQ sind jetzt vollständig im Adminbereich editierbar (neue Collection "⚖️ Rechtstexte & FAQ") statt fest im Code zu stehen. Jede Rechtsseite besteht aus frei bearbeitbaren Abschnitten (Überschrift + Text) — VanVan kann selbst Abschnitte ergänzen, ändern oder löschen. Freitext wird beim Anzeigen sicher escaped (kein kaputtes HTML durch Tippfehler möglich) und nackte Links automatisch klickbar gemacht. FAQ bleibt dabei weiterhin in allen 4 Sprachen separat pflegbar. Ausführlich getestet: Freigrenze pro Land im echten Warenkorb verifiziert (Puppeteer, 84€ Warenwert -> DE kostenlos, AT/LU "noch 1€", CH "noch 16€"), Rechtstexte/FAQ/USt-ID gegen den fertigen Build geprüft, EU-Streitschlichtung-Link-Bug (Satzzeichen wurde mitverlinkt) gefunden und behoben. Co-Authored-By: Claude Sonnet 5 <[email protected]>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
9a2c75ebe6
commit
0c1c8f075f
+114
-2
@@ -247,9 +247,17 @@ collections:
|
||||
description: >
|
||||
Gilt automatisch im Warenkorb/an der Kasse, sobald jemand mehrere Produkte oder
|
||||
mehrere Stück kauft (bei genau 1 Stück von 1 Produkt gilt stattdessen der eigene
|
||||
Versandpreis am Produkt, falls dort einer eingetragen ist). Ab 75 € Warenwert ist der
|
||||
Versand immer kostenlos, unabhängig von dieser Tabelle.
|
||||
Versandpreis am Produkt, falls dort einer eingetragen ist). Ab der unten je Land
|
||||
eingestellten Freigrenze ist der Versand immer kostenlos, unabhängig von dieser Tabelle.
|
||||
fields:
|
||||
- label: "Versandkostenfreigrenze pro Land (€) — ab diesem Warenwert ist der Versand immer kostenlos"
|
||||
name: freigrenze
|
||||
widget: object
|
||||
fields:
|
||||
- { label: Deutschland, name: de, widget: number, value_type: float, step: 0.01 }
|
||||
- { label: Österreich, name: at, widget: number, value_type: float, step: 0.01 }
|
||||
- { label: Schweiz, name: ch, widget: number, value_type: float, step: 0.01 }
|
||||
- { label: Luxemburg, name: lu, widget: number, value_type: float, step: 0.01 }
|
||||
- label: Deutschland
|
||||
name: de
|
||||
widget: list
|
||||
@@ -433,3 +441,107 @@ collections:
|
||||
- { label: IBAN, name: iban, widget: string, required: false, hint: "z.B. DE12 3456 7890 1234 5678 90" }
|
||||
- { label: BIC, name: bic, widget: string, required: false }
|
||||
- { label: Bank (Name), name: bank, widget: string, required: false }
|
||||
|
||||
- name: rechtstexte
|
||||
label: "⚖️ Rechtstexte & FAQ"
|
||||
icon: gavel
|
||||
files:
|
||||
- name: impressum
|
||||
label: "Impressum"
|
||||
file: src/content/impressum.json
|
||||
description: >
|
||||
Erscheint auf /impressum/. Jeder Abschnitt hat eine Überschrift + einen Text — Absätze
|
||||
durch eine Leerzeile trennen, einzelne Zeilenumbrüche (z.B. für Adresszeilen) reichen
|
||||
mit Enter. Links (z.B. https://...) werden automatisch klickbar, du musst kein HTML
|
||||
schreiben. Abschnitte können frei ergänzt, umbenannt oder gelöscht werden.
|
||||
fields:
|
||||
- label: "USt-IdNr. (optional)"
|
||||
name: ustId
|
||||
widget: string
|
||||
required: false
|
||||
hint: "Nur ausfüllen, falls vorhanden — als Kleinunternehmer nach §19 UStG oft nicht nötig. Erscheint als eigener Absatz unter den Abschnitten."
|
||||
- label: Abschnitte
|
||||
name: sections
|
||||
widget: list
|
||||
summary: "{{fields.heading}}"
|
||||
fields:
|
||||
- { label: Überschrift, name: heading, widget: string }
|
||||
- { label: Text, name: body, widget: text }
|
||||
- name: agb
|
||||
label: "Allgemeine Geschäftsbedingungen (AGB)"
|
||||
file: src/content/agb.json
|
||||
description: >
|
||||
Erscheint auf /agb/. Gleiches Prinzip wie beim Impressum — Abschnitte mit Überschrift +
|
||||
Text, frei ergänzbar/änderbar.
|
||||
fields:
|
||||
- label: Abschnitte
|
||||
name: sections
|
||||
widget: list
|
||||
summary: "{{fields.heading}}"
|
||||
fields:
|
||||
- { label: Überschrift, name: heading, widget: string }
|
||||
- { label: Text, name: body, widget: text }
|
||||
- name: datenschutz
|
||||
label: "Datenschutzerklärung"
|
||||
file: src/content/datenschutz.json
|
||||
description: >
|
||||
Erscheint auf /datenschutz/. Gleiches Prinzip — Abschnitte mit Überschrift + Text.
|
||||
fields:
|
||||
- label: Abschnitte
|
||||
name: sections
|
||||
widget: list
|
||||
summary: "{{fields.heading}}"
|
||||
fields:
|
||||
- { label: Überschrift, name: heading, widget: string }
|
||||
- { label: Text, name: body, widget: text }
|
||||
- name: widerruf
|
||||
label: "Widerrufsbelehrung"
|
||||
file: src/content/widerruf.json
|
||||
description: >
|
||||
Erscheint auf /widerruf/. Gleiches Prinzip — Abschnitte mit Überschrift + Text. Der
|
||||
Link zum Muster-Widerrufsformular am Ende der Seite ist fest eingebaut und muss hier
|
||||
nicht gepflegt werden.
|
||||
fields:
|
||||
- label: Abschnitte
|
||||
name: sections
|
||||
widget: list
|
||||
summary: "{{fields.heading}}"
|
||||
fields:
|
||||
- { label: Überschrift, name: heading, widget: string }
|
||||
- { label: Text, name: body, widget: text }
|
||||
- name: faq
|
||||
label: "FAQ (Häufig gestellte Fragen)"
|
||||
file: src/content/faq.json
|
||||
description: >
|
||||
Erscheint auf /faq/ — in allen 4 Sprachen separat pflegbar. Achtung: die 4 Sprachen
|
||||
sind unabhängig voneinander, eine neue Frage muss in jeder Sprache einzeln ergänzt
|
||||
werden, damit sie überall erscheint.
|
||||
fields:
|
||||
- label: Deutsch
|
||||
name: de
|
||||
widget: list
|
||||
summary: "{{fields.q}}"
|
||||
fields:
|
||||
- { label: Frage, name: q, widget: string }
|
||||
- { label: Antwort, name: a, widget: text }
|
||||
- label: Englisch
|
||||
name: en
|
||||
widget: list
|
||||
summary: "{{fields.q}}"
|
||||
fields:
|
||||
- { label: Frage, name: q, widget: string }
|
||||
- { label: Antwort, name: a, widget: text }
|
||||
- label: "Schweizerdeutsch"
|
||||
name: ch
|
||||
widget: list
|
||||
summary: "{{fields.q}}"
|
||||
fields:
|
||||
- { label: Frage, name: q, widget: string }
|
||||
- { label: Antwort, name: a, widget: text }
|
||||
- label: Französisch
|
||||
name: fr
|
||||
widget: list
|
||||
summary: "{{fields.q}}"
|
||||
fields:
|
||||
- { label: Frage, name: q, widget: string }
|
||||
- { label: Antwort, name: a, widget: text }
|
||||
|
||||
Reference in New Issue
Block a user