Files
vans-diy-bastelbedarf/public/admin/config.yml
T
qcigano 094edaaf39 Versandkosten-System (Pflichtenheft Punkt 9) + kritischen Warenkorb/Checkout-Bug behoben
Neu:
- Produkte können eigene Versandkosten je Land (DE/AT/CH/LU) bekommen, gelten nur bei
  Einzelkauf (genau 1 Stück von 1 Produkt)
- Versandkosten-Staffel nach Warenwert je Land, von VanVan im Adminbereich bearbeitbar
  (neuer Bereich "Versandkosten-Staffel"), greift bei mehreren Produkten/Stück
- Versandkostenfrei ab 75 € gilt immer, unabhängig von Einzelkauf/Staffel
- Checkout berechnet und zeigt jetzt die echten Versandkosten live beim Länderwechsel an

Kritischer Bugfix (unabhängig vom neuen Feature entdeckt):
- Warenkorb- und Checkout-Skripte haben "import" innerhalb von define:vars-Skripten benutzt,
  was Astro als IIFE rendert (kein ES-Modul) — das hat in der echten Live-Version die ganze
  Zeit zu "Cannot use import statement outside a module" geführt, wodurch Warenkorb und
  Checkout praktisch nie funktioniert haben. Behoben durch Trennung: define:vars-Skript setzt
  nur Werte auf window, separates <script type="module"> mit den echten Imports liest sie aus.
  Mit echtem End-to-End-Test verifiziert (Artikel in Warenkorb legen, Land wechseln, Summe
  prüfen) statt nur Screenshot.
2026-08-02 17:56:21 +02:00

201 lines
8.3 KiB
YAML

backend:
name: github
repo: vans-diy-bastelbedarf/website
branch: main
base_url: https://vans-diy-bastelbedarf-cms-auth.dogfather1608.workers.dev
# Bilder, die VanVan hier hochlädt, landen automatisch hier im Projekt und sind danach
# unter /img/products/<dateiname> auf der Website erreichbar.
media_folder: "public/img/products"
public_folder: "/img/products"
collections:
- name: products
label: Produkte
label_singular: Produkt
folder: src/content/products
create: true
delete: true
slug: "{{fields.slug}}"
identifier_field: slug
extension: json
format: json
summary: "{{name.de}} — {{preis}} €"
fields:
- label: "Interner Code (URL) — nach Veröffentlichung nicht mehr ändern!"
name: slug
widget: string
hint: "Nur Kleinbuchstaben, Zahlen und Bindestriche, z.B. wolke-plushie-lavendel"
- label: "📷 Fotos"
name: bilder
widget: list
required: false
hint: "Hier Fotos hochladen oder per Drag & Drop reinziehen. Das erste Foto ist das Hauptbild."
field: { label: Foto, name: bild, widget: image }
- label: Name
name: name
widget: object
fields:
- { label: Deutsch, name: de, widget: string }
- { label: Englisch, name: en, widget: string }
- { label: "Schweizerdeutsch", name: ch, widget: string }
- { label: Französisch, name: fr, widget: string }
- label: Artikelnummer
name: artikelnummer
widget: string
required: false
- label: Kategorie
name: kategorie
widget: relation
collection: categories
search_fields: ["name.de"]
value_field: "slug"
display_fields: ["name.de"]
- label: "Unterkategorie (optional)"
name: unterkategorie
widget: string
required: false
hint: "Interner Code der Unterkategorie eintragen, z.B. kuh-frieda (siehe Kategorien-Bereich)"
- { label: "Preis (in Euro)", name: preis, widget: number, value_type: float, step: 0.01 }
- label: "Alter Preis (nur ausfüllen, wenn im Sale)"
name: preisAlt
widget: number
value_type: float
step: 0.01
required: false
- { label: "Bestand (Anzahl auf Lager)", name: bestand, widget: number, value_type: int }
- label: Beschreibung
name: beschreibung
widget: object
fields:
- { label: Deutsch, name: de, widget: text }
- { label: Englisch, name: en, widget: text }
- { label: "Schweizerdeutsch", name: ch, widget: text }
- { label: Französisch, name: fr, widget: text }
- { label: Material, name: material, widget: string, required: false }
- { label: "Größe / Maße", name: groesse, widget: string, required: false }
- label: Farben
name: farben
widget: list
required: false
hint: "Eine Farbe pro Zeile, z.B. Lavendel"
- { label: Lieferumfang, name: lieferumfang, widget: string, required: false }
- { label: Pflegehinweise, name: pflegehinweise, widget: string, required: false }
- { label: Lieferzeit, name: lieferzeit, widget: string, required: false }
- label: Auszeichnungen
name: badges
widget: select
multiple: true
required: false
options:
- { label: Neu, value: neu }
- { label: Bestseller, value: bestseller }
- { label: "Im Sale", value: sale }
- { label: Handgemacht, value: handgemacht }
- label: "🚚 Eigene Versandkosten (nur für Einzelkauf dieses Produkts)"
name: versand
widget: object
required: false
hint: "Gilt NUR, wenn jemand genau 1 Stück von genau diesem Produkt kauft. Bei mehreren Produkten/Stück im Warenkorb gilt automatisch die allgemeine Versandkosten-Staffel (siehe eigener Bereich 'Versandkosten-Staffel' im Menü links). Leer lassen = Staffel gilt auch beim Einzelkauf."
fields:
- { label: "Deutschland (€)", name: de, widget: number, value_type: float, step: 0.01, required: false }
- { label: "Österreich (€)", name: at, widget: number, value_type: float, step: 0.01, required: false }
- { label: "Schweiz (€)", name: ch, widget: number, value_type: float, step: 0.01, required: false }
- { label: "Luxemburg (€)", name: lu, widget: number, value_type: float, step: 0.01, required: false }
- name: categories
label: Kategorien
label_singular: Kategorie
folder: src/content/categories
create: true
delete: false
slug: "{{fields.slug}}"
identifier_field: slug
extension: json
format: json
summary: "{{name.de}}"
fields:
- label: "Interner Code (URL) — nach Veröffentlichung nicht mehr ändern!"
name: slug
widget: string
- label: "Reihenfolge (0 = zuerst)"
name: order
widget: number
value_type: int
- label: Name
name: name
widget: object
fields:
- { label: Deutsch, name: de, widget: string }
- { label: Englisch, name: en, widget: string }
- { label: "Schweizerdeutsch", name: ch, widget: string }
- { label: Französisch, name: fr, widget: string }
- label: Beschreibung
name: description
widget: object
fields:
- { label: Deutsch, name: de, widget: text }
- { label: Englisch, name: en, widget: text }
- { label: "Schweizerdeutsch", name: ch, widget: text }
- { label: Französisch, name: fr, widget: text }
- label: "Icon (Emoji)"
name: icon
widget: string
hint: "z.B. 🧸"
- label: Unterkategorien
name: subcategories
widget: list
required: false
summary: "{{fields.name.de}}"
fields:
- { label: "Interner Code (URL)", name: slug, widget: string }
- label: Name
name: name
widget: object
fields:
- { label: Deutsch, name: de, widget: string }
- { label: Englisch, name: en, widget: string }
- { label: "Schweizerdeutsch", name: ch, widget: string }
- { label: Französisch, name: fr, widget: string }
- name: versandkosten
label: "🚚 Versandkosten-Staffel"
files:
- name: staffel
label: "Versandkosten-Staffel nach Warenwert"
file: src/content/versandstaffel.json
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.
fields:
- label: Deutschland
name: de
widget: list
summary: "ab {{fields.abWarenwert}} € → {{fields.kosten}} €"
fields:
- { label: "Ab Warenwert (€)", name: abWarenwert, widget: number, value_type: float, step: 0.01 }
- { label: "Versandkosten (€)", name: kosten, widget: number, value_type: float, step: 0.01 }
- label: Österreich
name: at
widget: list
summary: "ab {{fields.abWarenwert}} € → {{fields.kosten}} €"
fields:
- { label: "Ab Warenwert (€)", name: abWarenwert, widget: number, value_type: float, step: 0.01 }
- { label: "Versandkosten (€)", name: kosten, widget: number, value_type: float, step: 0.01 }
- label: Schweiz
name: ch
widget: list
summary: "ab {{fields.abWarenwert}} € → {{fields.kosten}} €"
fields:
- { label: "Ab Warenwert (€)", name: abWarenwert, widget: number, value_type: float, step: 0.01 }
- { label: "Versandkosten (€)", name: kosten, widget: number, value_type: float, step: 0.01 }
- label: Luxemburg
name: lu
widget: list
summary: "ab {{fields.abWarenwert}} € → {{fields.kosten}} €"
fields:
- { label: "Ab Warenwert (€)", name: abWarenwert, widget: number, value_type: float, step: 0.01 }
- { label: "Versandkosten (€)", name: kosten, widget: number, value_type: float, step: 0.01 }