dbXapp 2.0
RAD, CMS, Module und Runtime-IDE fuer dbXapp
Loading...
Searching...
No Matches
Shop-Leitfaden

Stand: 2026-07-14

dbxShop ist die Shop-Fachanwendung von dbXapp. Sie umfasst inzwischen den oeffentlichen Katalog, Produktsuche und Filter, Warenkorb, Checkout, Zahlungsarten, Bestellungen, Rechnungen, Widerruf, Medien, Artikelgruppen, Attribute, Versandgruppen und Verkaufskanaele. Die Administration liegt in einem getrennten Modul dbxShop_admin.

Der Shop nutzt die normalen dbXapp-Bausteine: Routing ueber dbx_run1, Templates ueber dbxTPL, Datenzugriff ueber dbxDB, Struktur ueber DD, Formulare ueber dbxForm, Listen ueber dbxReport, CMS-Seiten fuer Rechtstexte und openWin fuer Admin-Dialoge.

Modulaufteilung

dbx/modules/dbxShop/
dbxShop.class.php Frontend-Router
cfg/config.php Shop-Konfiguration
cfg/payment.php PayPal-Fallbackkonfiguration
dd/*.dd.php Shop-Datenmodell
fd/*.fd.php Produkt-, Checkout- und Fachformulare
include/dbxShopRepository.class.php Datenzugriff und Fachdaten
include/dbxShopService.class.php Frontend-Anwendungslogik
include/dbxShopPayPal.class.php PayPal-Adapter
include/dbxShopAmazonPay.class.php Amazon-Pay-Adapter
include/dbxShopChannelConnector.class.php Channel-Adapter
tpl/htm/*.htm Frontend-Templates
design/css/shop.css Shop-Komponentenstil
design/js/shop.js Shop-Komponentenverhalten
tools/ Testdaten- und Mockup-Werkzeuge
dbx/modules/dbxShop_admin/
dbxShop_admin.class.php Admin-Router-Wrapper
include/dbxShopAdmin.class.php Admin-Anwendungslogik
cfg/config.php Zugriff: Gruppe admin
fd/*.fd.php Settings- und Reportfelder
tpl/htm/*.htm Admin-Templates
design/css/shop-admin.css Admin-Komponentenstil

dbxShop ist bewusst Frontend und verwendet das aktive Frontend-Design. dbxShop_admin besitzt das Suffix _admin und wird fuer Administratoren vom Design-Router auf default_design_admin aufgeloest. Aktuell ist das Admin-Design dbxapp.

Frontend-Routen

Aufrufmuster:

?dbx_modul=dbxShop&dbx_run1={route}
dbx_run1 Aufgabe
start, catalog Katalog mit Suche, Gruppen- und Attributfiltern
product, detail Produktdetail anhand SKU/Parameter
cart Warenkorb anzeigen und Mengen bearbeiten
checkout Kundendaten, Zahlungsart und Zustimmung erfassen
paypal_start PayPal-Ablauf aus dem Checkout starten
paypal_return PayPal-Rueckkehr erfassen und Zahlung verbuchen
paypal_cancel abgebrochene PayPal-Zahlung behandeln
amazon_pay_return Amazon-Pay-Rueckkehr verarbeiten
amazon_pay_cancel abgebrochene Amazon-Pay-Zahlung behandeln
order, orders eigene bzw. zuletzt erzeugte Bestellungen anzeigen
invoice_pdf zugreifbare Rechnung als PDF ausgeben
channel_webhook externe Bestell-/Channel-Rueckmeldung annehmen
legal, terms CMS-Rechtstexte des Shops ausgeben
return, returns, withdrawal Widerrufsseite und Formular ausgeben

Beispiel fuer eine CMS- oder Template-Inclusion:

[modul=dbxShop]dbx_run1=catalog[/modul]

Admin-Routen

Aufrufmuster:

?dbx_modul=dbxShop_admin&dbx_run1={route}
dbx_run1 Aufgabe
dashboard, start Kennzahlen und Schnellzugriffe
install DD-Schema, Defaults und Testgrundlage sicherstellen
products Artikelliste, Auswahl- und Massenaktionen
product_edit Artikel bearbeiten oder neu anlegen
product_tree_move Artikelgruppe im Baum verschieben
product_channel_mapping Channel-spezifische Artikeldaten pflegen
products_help kontextbezogene Produkthilfe
groups hierarchische Artikelgruppen verwalten
attributes Attributdefinitionen verwalten
product_attributes Attributwerte eines Artikels pflegen
shipping_groups Versandarten und Kosten verwalten
channel_groups Vertriebsszenarien aus Channels bilden
channels interne und externe Verkaufskanaele konfigurieren
media Shop-Medien anzeigen und hochladen
assign_media Medien Artikeln oder Gruppen zuordnen
orders Bestellreport mit Filtern und Aktionen
order_detail Status, Zahlung, Versand, Tracking und Notiz pflegen
order_invoice Rechnung als HTML anzeigen
order_invoice_pdf Rechnungs-PDF erzeugen/oeffnen
legal Rechtstexte im CMS pflegen
returns Widerrufe administrieren
settings Shop-, Steuer-, Zahlungs-, Mail- und Versandeinstellungen
payment_test konfigurierte Zahlungsanbieter pruefen

Der Modulzugriff ist ueber dbxShop_admin/cfg/config.php auf die Gruppe admin beschraenkt. Fachaktionen duerfen diese Modulberechtigung nicht durch direkte, ungeschuetzte Hilfsrouten umgehen.

Datenmodell

Alle Shop-DDs verwenden derzeit den Server dbxShop|dbxShop.db3. Jede Tabelle besitzt die Primaer-ID id. Die physischen Tabellen werden aus den DD-Dateien synchronisiert und sollen nicht parallel als handgeschriebenes SQL-Schema gepflegt werden.

Artikel und Darstellung

DD Tabelle Zweck
shopProduct shop_product SKU, Slug, Titel, Typ, Preis, Steuer, Versand, Bestand, Aktivstatus
shopProductGroup shop_product_group hierarchische Gruppen, Steuer-/Versanddefaults, Karten-, Detail- und Gallery-Templates
shopProductGroupMap shop_product_group_map Artikel-zu-Gruppe, einschliesslich Primaergruppe
shopProductImage shop_product_image CMS-Medium oder Bildpfad fuer Artikel/Gruppe
shopAttributeDefinition shop_attribute_definition gruppenbezogene Text-, Auswahl- oder Zahlenattribute
shopProductAttributeValue shop_product_attribute_value konkrete Attributwerte eines Artikels

Die Artikelgruppe kann Darstellungsvorgaben erben lassen, zum Beispiel card_template, detail_template, gallery_template, Bildanzahl, Bildmodus, Overflow und Klickverhalten. Fachliche Artikelwerte bleiben im Artikel; die Gruppe stellt Defaults und Kategorisierung bereit.

Versand und Channels

DD Tabelle Zweck
shopShippingGroup shop_shipping_group Versandweg, Lieferzeit, Kosten und Freigrenze
shopProductShippingGroupMap shop_product_shipping_group_map Artikel-zu-Versandgruppe
shopChannel shop_channel Plattform, Verbindung, Zugang, Export/Import und Teststatus
shopProductChannel shop_product_channel Aktivierung, Channel-SKU, Preis-/Versandoverride und Exportstatus
shopChannelGroup shop_channel_group wiederverwendbare Gruppe von Verkaufskanaelen
shopChannelGroupChannel shop_channel_group_channel Channels innerhalb einer Channel-Gruppe
shopProductChannelGroupMap shop_product_channel_group_map Artikel-zu-Channel-Gruppe

Direkte Channel-Zuordnungen und geerbte Zuordnungen ueber Channel-Gruppen werden gemeinsam aufgeloest. Ein Channel-spezifischer Preis von -1 bedeutet sinngemaess, dass der Artikel- bzw. Gruppenwert verwendet wird.

Bestellung und Widerruf

DD Tabelle Zweck
shopOrder shop_order Kunde, Summe, Channel, Zahlung, Rechnung, Bestand, Versand und Rechtstext-Snapshots
shopOrderItem shop_order_item unveraenderlicher Bestellpositions-Snapshot
shopOrderHistory shop_order_history Status- und Fachereignisse einer Bestellung
shopWithdrawal shop_withdrawal Widerruf mit Bezug zu Bestellung/Kunde und Adminstatus

Bestellpositionen speichern SKU, Titel, Menge, Preis, Steuer und Versand zum Bestellzeitpunkt. Nachtraegliche Artikelaenderungen duerfen eine vorhandene Bestellung deshalb nicht rueckwirkend umschreiben.

Installation, DD-Sync und Testdaten

dbxShopRepository::install() synchronisiert die 17 Shop-DDs, legt Standard-Channels an und bereinigt bestimmte Zuordnungen. Die Synchronisation wird mit schema_sync_version begrenzt. Eine Aenderung an einem DD erfordert deshalb auch eine neue Schema-Versionskennung, wenn die automatische Synchronisation erneut laufen soll.

Wenn Artikel, Versandgruppen, Channel-Gruppen oder Bilder fehlen, ruft der aktuelle Shop seedDemoProducts() auf. Das Entwicklungsprojekt darf Testdaten enthalten. Die mitgelieferten Testdaten umfassen unter anderem Software- und Servicegruppen, Versandgruppen, Channel-Gruppen und Demoartikel.

Werkzeuge fuer gezielte Testdaten und Mockups liegen unter:

dbx/modules/dbxShop/tools/seed_dbxapp_merch.php
dbx/modules/dbxShop/tools/generate_dbxapp_merch_mockups.php

Katalog und Produktdarstellung

Der Katalog zeigt nur aktive Artikel, die dem internen Channel shop zugeordnet sind. Er unterstuetzt:

  • Volltextsuche mit gewichteten Artikel-, Gruppen- und Attributwerten,
  • hierarchische Artikelgruppen und Breadcrumbs,
  • filterbare Attribute,
  • gruppenspezifische Karten- und Detailtemplates,
  • Artikel- und Gruppenbilder aus dem CMS-Medienbestand,
  • Steuer-, Liefer- und Bestandsinformationen.

Vorhandene Templates sind unter anderem:

product-card-default.htm
product-card-compact.htm
product-detail-default.htm
product-detail-technical.htm
shop-catalog-report.htm
shop-catalog-filter-form.htm

Neue Varianten werden als Shop-Templates ergaenzt und ueber die Gruppe ausgewaehlt. Der Service validiert den Template-Namen; ungepruefte Dateipfade aus Datenbankwerten sind nicht erlaubt.

Warenkorb und Checkout

Der Warenkorb wird in der PHP-Session unter dbxShop_cart gefuehrt. Der Checkout erfasst Name, E-Mail, Telefon, Lieferadresse, Notiz und Zahlungsart. Rechtstexte und Widerrufsbelehrung muessen bestaetigt werden.

Der Ablauf ist:

  1. Warenkorbpositionen gegen aktuelle Produkte pruefen.
  2. Bestand pruefen, wenn stock_enabled aktiv ist.
  3. Kundendaten und Zahlungsart validieren.
  4. Rechtstexte und Widerruf als Snapshot speichern, wenn aktiviert.
  5. Bestellung und Positionen erzeugen.
  6. Bestand gegebenenfalls reservieren.
  7. Bei Offline-Zahlung Bestaetigungsseite und Mail ausgeben.
  8. Bei PayPal/Amazon Pay zum Provider wechseln und Rueckkehr verarbeiten.
  9. Bestell- und Zahlungsereignisse in der History protokollieren.

Gastbestellungen werden mit checkout_guest_allowed gesteuert. Die oeffentliche Anzeige einer Bestellung oder Rechnung muss weiterhin die im Service implementierte Zugriffspruefung benutzen; eine frei uebergebene ID allein ist keine Berechtigung.

Zahlungsarten

Aktuell unterstuetzt die Konfiguration:

Zahlungsart Aktivierung
Vorkasse/Ueberweisung Schalter plus optionale Bankdaten und Anweisung
Rechnung Schalter plus Rechnungshinweis
PayPal Schalter, Modus, Client-ID und Client-Secret
Amazon Pay Schalter, Modus, Region, Merchant-/Store-/Key-Daten und Private Key

PayPal und Amazon Pay werden im Checkout erst angeboten, wenn die benoetigten Zugangsdaten vorhanden sind. Neue Provider gehoeren in eine eigene Adapterklasse; Secrets duerfen nicht in Templates, Logs oder Testausgaben geschrieben werden.

Rechtstexte, CMS und Widerruf

Der Shop stellt die benoetigten CMS-Seiten unter einem Shop-Ordner sicher. Rechtstexte und Widerrufsinhalt werden im CMS gepflegt, nicht dauerhaft als HTML im Shop-Template dupliziert. Beim Checkout koennen Snapshots in der Bestellung gespeichert werden, damit die zum Kaufzeitpunkt akzeptierte Fassung nachvollziehbar bleibt.

Widerrufe werden ueber das Frontendformular in shop_withdrawal gespeichert und im Admin-Modul bearbeitet. Kunden- und Admin-Mail koennen separat aktiviert werden.

Medien

Produktbilder referenzieren vorzugsweise zentrale CMS-Medien ueber media_id. Ein image_path bleibt als Fallback fuer vorhandene oder erzeugte Dateien moeglich. Ein Bild kann einem Artikel oder einer Artikelgruppe zugeordnet sein. Gruppenbilder dienen als Fallback und als visuelle Navigation im Katalog.

Der konfigurierbare CMS-Slot lautet standardmaessig shop. Medien duerfen nicht allein durch Dateinamen als vertrauenswuerdig behandelt werden; Uploadziel, Dateiname und Dateityp werden serverseitig begrenzt.

Channels und externe Plattformen

Standard-Channels sind:

shop, amazon, ebay, kleinanzeigen, mobile

dbxShopChannelConnector kapselt Verbindungstest, Payload-Normalisierung und Artikelexport. Plattformbezogene Implementierungen existieren fuer eBay, Amazon, mobile.de und Kleinanzeigen; zusaetzlich gibt es einen generischen Middleware-Weg. Der interne Channel shop benoetigt keinen externen Export.

Eine sichtbare Channel-Konfiguration bedeutet nicht automatisch, dass ein Produktivvertrag oder alle API-Berechtigungen vorhanden sind. Vor Livebetrieb muessen Zugangsdaten, API-Scopes, Marketplace-/Seller-Kontext, Policies, Webhook-Authentifizierung und Fehlerwiederholung geprueft werden.

Der Webhook-Endpunkt ist:

?dbx_modul=dbxShop&dbx_run1=channel_webhook&channel={channel_key}

Webhook-Secrets und Provider-Signaturen sind Sicherheitsgrenzen. Ein neuer Importweg darf Bestellungen nicht ungeprueft aus beliebigem JSON erzeugen.

Einstellungen

Die Admin-Seite settings verwaltet unter anderem:

  • Aktivstatus, Standard-Channel und Waehrung,
  • Brutto-/Nettoanzeige und drei Steuerklassen,
  • B2B-, Lager- und Channel-Schalter,
  • Gastbestellung und Rechtstext-Snapshots,
  • Kunden-/Admin-Mail und Absender,
  • Vorkasse, Rechnung, PayPal und Amazon Pay,
  • digitale Lieferung und pauschalen Versand,
  • den CMS-Medienslot.

Die Konfiguration wird mit dbx()->get_config('dbxShop') gelesen und ueber die zentrale Konfigurationsschnittstelle gespeichert. Keine zweite JSON- oder ENV-Konfiguration fuer dieselben Werte einfuehren.

Erweiterungsregeln

  • Neue Tabellen zuerst als DD in dbxShop/dd modellieren.
  • Jede Shop-Tabelle benoetigt id als Primaerschluessel mit Autoincrement- Semantik der jeweiligen Datenbank.
  • Datenzugriff gehoert in dbxShopRepository, nicht in Templates.
  • Frontendablauf gehoert in dbxShopService.
  • Adminablauf gehoert in dbxShopAdmin und bleibt admin-geschuetzt.
  • Neue Eingaben verwenden dbxForm und FD, neue Listen dbxReport.
  • Preis-, Steuer-, Versand- und Bestellwerte werden serverseitig berechnet.
  • IDs aus Request oder Session werden immer gegen Rechte und Datensatzbezug geprueft.
  • Secrets werden nicht ausgegeben oder in Systemmeldungen protokolliert.
  • Externe Calls erhalten Timeout, Fehlerbehandlung und nachvollziehbaren Status; sie duerfen lokale Bestellungen nicht inkonsistent hinterlassen.

Pruefliste

  • DD-Sync laeuft auf einer leeren Entwicklungsdatenbank durch.
  • Jede Tabelle besitzt id und eine funktionierende Autoincrement-ID.
  • Demoartikel erscheinen im Katalog und lassen sich filtern.
  • Warenkorb addiert, aendert und entfernt Positionen korrekt.
  • Checkout weist unvollstaendige Daten und fehlende Zustimmung ab.
  • Offline-Zahlung erzeugt Bestellung und Positionen genau einmal.
  • Provider-Rueckkehr ist wiederholbar bzw. erzeugt keine Doppelbestellung.
  • Eigene Bestellungen und Rechnungen sind zugreifbar, fremde nicht.
  • Adminreports, Formulare und Massenaktionen funktionieren.
  • Rechtstexte, Widerruf, Medien und Mail-Schalter sind geprueft.
  • Channel-Tests und Exporte zeigen Fehler, ohne Secrets auszugeben.
  • dbxapp und fleurop stellen den Shop lesbar und responsive dar.

Verwandte Dokumentation