|
dbXapp 2.0
RAD, CMS, Module und Runtime-IDE fuer dbXapp
|
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.
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.
Aufrufmuster:
| 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:
Aufrufmuster:
| 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.
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.
| 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.
| 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.
| 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.
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:
Der Katalog zeigt nur aktive Artikel, die dem internen Channel shop zugeordnet sind. Er unterstuetzt:
Vorhandene Templates sind unter anderem:
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.
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:
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.
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.
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.
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.
Standard-Channels sind:
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:
Webhook-Secrets und Provider-Signaturen sind Sicherheitsgrenzen. Ein neuer Importweg darf Bestellungen nicht ungeprueft aus beliebigem JSON erzeugen.
Die Admin-Seite settings verwaltet unter anderem:
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.