8declare(strict_types=1);
13 $path = __DIR__ .
'/content/' . $name .
'.html';
14 $html = file_get_contents($path);
15 if (
$html ===
false) {
16 throw new RuntimeException(
'Tutorial-Inhalt fehlt: ' . $path);
21function tutorial_page(
string $id,
string $title,
string $permalink,
string $description,
string $keywords,
string $sorter,
string $content): array {
24 'action' =>
'page.create',
29 'seo_title' => $title,
30 'permalink' => $permalink,
31 'description' => $description,
32 'keywords' => $keywords,
35 'template' =>
'c-body1-footer',
36 'hero_template' =>
'none',
37 'hero_image_id' =>
'none',
38 'gallery_template' =>
'image-gallery',
39 'gallery_visible_count' =>
'1',
40 'gallery_image_size' =>
'original',
41 'gallery_lightbox_width' =>
'100vw',
42 'gallery_overflow' =>
'tutorial',
43 'gallery_click_behavior' =>
'lightbox',
50function tutorial_image(
string $id,
string $source,
string $fileName,
string $title,
string $alt,
string $caption, ?array $crop =
null): array {
53 'file_name' => $fileName,
54 'media_folder' =>
'img/gallery',
61 'caption' => $caption,
62 'tags' =>
'dbxapp,tutorial,screenshot',
65 $params[
'crop_x'] = $crop[0];
66 $params[
'crop_y'] = $crop[1];
67 $params[
'crop_width'] = $crop[2];
68 $params[
'crop_height'] = $crop[3];
69 $params[
'fit'] =
'cover';
71 return array(
'id' => $id,
'action' =>
'media.create_image_variant',
'params' => $params);
74function tutorial_assign(
string $id,
string $mediaRef,
string $pageRef,
string $caption): array {
77 'action' =>
'media.assign',
79 'media_id' =>
'$ref:' . $mediaRef .
'.media_id',
80 'content_id' =>
'$ref:' . $pageRef .
'.page_id',
83 'caption' => $caption,
91 'action' =>
'media.assign',
97 'caption' => $caption,
106 'id' =>
'update_dbxcontent_dbxki',
107 'action' =>
'page.update',
112 'title' =>
'Tutorial: dbxContent mit dbxKi',
113 'seo_title' =>
'Tutorial: dbxContent mit dbxKi',
114 'description' =>
'Neue CMS-Seiten, gezielte Änderungen, Medien, Prüfung und Übersetzungen mit dbxKi – Schritt für Schritt.',
115 'keywords' =>
'dbxContent, dbxKi, CMS, Content erstellen, Content ändern, Übersetzung, Tutorial',
117 'template' =>
'c-body1-footer',
118 'hero_template' =>
'none',
119 'hero_image_id' =>
'none',
120 'gallery_template' =>
'image-gallery',
121 'gallery_visible_count' =>
'1',
122 'gallery_image_size' =>
'original',
123 'gallery_lightbox_width' =>
'100vw',
124 'gallery_overflow' =>
'tutorial',
125 'gallery_click_behavior' =>
'lightbox',
130foreach (array(507, 508, 509, 510, 511) as $usageId) {
132 'id' =>
'unassign_dbxki_' . $usageId,
133 'action' =>
'media.unassign',
134 'params' => array(
'usage_id' => $usageId),
139 array(306,
'dbxKi öffnen: Von dieser Übersicht starten Sie neue Content-, Änderungs- und Übersetzungsaufträge.'),
140 array(307,
'Neuen Content beschreiben: Zielseite, Thema, Zielgruppe, Aufbau und Grenzen vollständig angeben.'),
141 array(281,
'Ergebnis finden: Im Content Tree Zielordner, neue Seite und Sprachstatus kontrollieren.'),
142 array(285,
'Seitendaten prüfen: Titel, Permalink, Beschreibung, Template und Aktivstatus vergleichen.'),
143 array(288,
'Inhalt lesen: Überschriften, Fakten, Links, Module und Handlungsaufforderung im Editor prüfen.'),
144 array(291,
'Medien kontrollieren: Hero, Gallery und Inline-Medien im rechten CMS-Bereich richtig zuordnen.'),
145 array(308,
'Gezielt ändern: Bestehende Seite wählen und exakt benennen, welche Bereiche gleich bleiben.'),
146 array(309,
'Einzelseite übersetzen: Ausgangsseite, Zielsprache und Fachbegriffe festlegen.'),
147 array(310,
'Sprachstruktur synchronisieren: Komplette Zielsprachen nur nach sorgfältiger Bereichs- und Inhaltsprüfung erzeugen.'),
156 'Tutorial: Shop administrieren',
157 'tutorial-shop-admin',
158 'Shop-Einstellungen, Artikel, Medien, Zahlungsarten, Channels und Bestellungen Schritt für Schritt verwalten.',
159 'dbxShop Admin, Shop Einstellungen, Artikelpflege, Bestellungen, Zahlung, Channels, Tutorial',
164 'shop_admin_settings',
165 'output/playwright/shop-settings-820-after.png',
166 'tutorial-shop-admin-01-einstellungen.webp',
167 'Shop-Grundeinstellungen',
168 'Shop-Admin mit Aktivstatus, Standard-Channel, Währung, Preisanzeige und Mehrwertsteuerklassen',
169 'Schritt 1: Shop aktivieren, Standard-Channel, Währung, Preis- und Steueranzeige zuerst festlegen.',
170 array(0, 0, 820, 461)
172$steps[] =
tutorial_assign(
'assign_shop_admin_settings',
'shop_admin_settings',
'shop_admin_page',
'Schritt 1: Grundeinstellungen und Steuerklassen prüfen, bevor Artikel veröffentlicht werden.');
174 'shop_admin_payment',
175 'output/playwright/shop-settings-payment-820.png',
176 'tutorial-shop-admin-02-zahlungsarten.webp',
177 'Zahlungsarten konfigurieren',
178 'Shop-Admin mit Vorkasse, Rechnung und PayPal-Sandbox-Einstellungen',
179 'Schritt 2: Nur vollständig konfigurierte Zahlungsarten aktivieren; Online-Anbieter zuerst im Sandbox-Modus testen.',
180 array(0, 0, 820, 461)
182$steps[] =
tutorial_assign(
'assign_shop_admin_payment',
'shop_admin_payment',
'shop_admin_page',
'Schritt 2: Vorkasse, Rechnung und Providerdaten sicher konfigurieren und testen.');
185 'output/playwright/shop-orders-status-workflow.png',
186 'tutorial-shop-admin-03-bestellungen.webp',
187 'Bestellungen verwalten',
188 'Shop-Admin-Bestellreport mit Filter, Status, Zahlung, Summe und Bearbeitungsaktion',
189 'Schritt 3: Bestellungen suchen, Zahlungs- und Versandstatus unterscheiden und den Datensatz über die Aktion öffnen.'
191$steps[] =
tutorial_assign(
'assign_shop_admin_orders',
'shop_admin_orders',
'shop_admin_page',
'Schritt 3: Im Bestellreport nach Nummer oder Status filtern und die Detailbearbeitung öffnen.');
193 'shop_admin_channel',
194 'output/playwright/workflow-ebay-step2.png',
195 'tutorial-shop-admin-04-channel-pruefung.webp',
196 'Channel-Bereitschaft prüfen',
197 'Workflow-Schritt zur automatischen Prüfung eines Shop-Artikels für einen eBay-Channel',
198 'Schritt 4: Vor dem Export fehlende Channel-, Kategorie-, Policy- und Zugangsdaten anhand der automatischen Meldung ergänzen.'
200$steps[] =
tutorial_assign(
'assign_shop_admin_channel',
'shop_admin_channel',
'shop_admin_page',
'Schritt 4: Channel-Mapping und Bereitschaft prüfen; externe Veröffentlichung bleibt eine bewusste Aktion.');
204 'shop_frontend_page',
205 'Tutorial: Shop im Frontend benutzen',
206 'tutorial-shop-frontend',
207 'Katalog, Produktdetail, Warenkorb, Kasse, Rechtstexte und Bestellstatus im Shop Schritt für Schritt benutzen.',
208 'dbxShop Frontend, Katalog, Produkt, Warenkorb, Checkout, Bestellung, Tutorial',
213 'shop_frontend_catalog',
214 '.playwright-cli/page-2026-07-18T20-16-16-888Z.png',
215 'tutorial-shop-frontend-01-katalog.webp',
217 'dbXapp Shop-Katalog mit Artikelgruppen, Suche, Filtern und Produktkarten',
218 'Schritt 1: Artikelgruppe wählen, Suche und Detailfilter verwenden und Trefferzahl kontrollieren.',
219 array(0, 0, 1440, 810)
221$steps[] =
tutorial_assign(
'assign_shop_frontend_catalog',
'shop_frontend_catalog',
'shop_frontend_page',
'Schritt 1: Im Katalog Gruppen, Suche, Filter und Seitennavigation verwenden.');
223 'shop_frontend_product',
224 '.playwright-cli/page-2026-07-18T20-16-31-880Z.png',
225 'tutorial-shop-frontend-02-produktdetail.webp',
227 'Produktdetail eines dbXapp Pakets mit Bild, SKU, Beschreibung, Preis, Lieferung, Menge und Warenkorb-Schaltfläche',
228 'Schritt 2: Produkt, SKU, Preis, Steuer, Versand, Lieferzeit und gewünschte Menge vor dem Hinzufügen prüfen.',
229 array(0, 0, 1440, 810)
231$steps[] =
tutorial_assign(
'assign_shop_frontend_product',
'shop_frontend_product',
'shop_frontend_page',
'Schritt 2: Produktangaben und Menge prüfen und den Artikel in den Warenkorb legen.');
233 'shop_frontend_cart',
234 '.playwright-cli/page-2026-07-18T20-16-59-712Z.png',
235 'tutorial-shop-frontend-03-warenkorb.webp',
237 'Warenkorb mit Artikel, Menge, Preis, Versand, Gesamtsumme und Schaltfläche zur Kasse',
238 'Schritt 3: Menge und Gesamtsumme kontrollieren, Änderungen aktualisieren und erst dann zur Kasse wechseln.',
239 array(0, 0, 1440, 810)
241$steps[] =
tutorial_assign(
'assign_shop_frontend_cart',
'shop_frontend_cart',
'shop_frontend_page',
'Schritt 3: Warenkorbposition, Menge, Versand und Summe prüfen und zur Kasse wechseln.');
243 'shop_frontend_checkout',
244 '.playwright-cli/page-2026-07-18T20-17-13-302Z.png',
245 'tutorial-shop-frontend-04-kasse.webp',
246 'Kasse und Kundendaten',
247 'Checkout mit Bestellübersicht und Eingabefeldern für Name, E-Mail, Telefon, Lieferadresse und Hinweis',
248 'Schritt 4: Bestellübersicht erneut prüfen, Kundendaten vollständig eintragen und anschließend Zahlung und Rechtliches bestätigen.',
249 array(0, 0, 1440, 810)
251$steps[] =
tutorial_assign(
'assign_shop_frontend_checkout',
'shop_frontend_checkout',
'shop_frontend_page',
'Schritt 4: Kundendaten, Zahlung und rechtliche Zustimmung sorgfältig abschließen; Bestellbutton nur einmal verwenden.');
255 'workflow_create_page',
256 'Tutorial: Workflow erstellen',
257 'tutorial-workflow-erstellen',
258 'Workflow-Definitionen mit Ziel, Bausteinen, Entscheidungen, Automatik und Modul-Bindings Schritt für Schritt erstellen.',
259 'dbxWorkflow_admin, Workflow erstellen, Prozess-Designer, Entscheidung, Modul-Binding, Tutorial',
264 'workflow_create_list',
265 '.playwright-cli/page-2026-07-18T09-40-19-168Z.png',
266 'tutorial-workflow-erstellen-01-definitionen.webp',
267 'Workflow-Definitionen',
268 'Liste aktiver Workflow-Definitionen mit Key, Titel, Ziel und Aktionen zum Bearbeiten oder Starten',
269 'Schritt 1: Vorhandene Definitionen prüfen oder über „Neuer Workflow“ eine neue Definition beginnen.',
270 array(0, 180, 1440, 810)
272$steps[] =
tutorial_assign(
'assign_workflow_create_list',
'workflow_create_list',
'workflow_create_page',
'Schritt 1: In der Definitionsliste Keys, Ziele und Aktivstatus prüfen und einen neuen Workflow anlegen.');
274 'workflow_create_header',
275 'output/playwright/workflow-edit-rid3.png',
276 'tutorial-workflow-erstellen-02-kopfdaten.webp',
277 'Workflow-Kopfdaten',
278 'Workflow-Editor mit Feldern für Key, Titel, Ergebnis, Beschreibung und Aktivstatus',
279 'Schritt 2: Stabilen Workflow-Key, verständlichen Namen, fachliches Ziel, Beschreibung und Aktivstatus festlegen.'
281$steps[] =
tutorial_assign(
'assign_workflow_create_header',
'workflow_create_header',
'workflow_create_page',
'Schritt 2: Key, Name, Ziel und Beschreibung fachlich eindeutig formulieren.');
283 'workflow_create_designer',
284 '.playwright-cli/page-2026-07-18T09-40-50-384Z.png',
285 'tutorial-workflow-erstellen-03-designer.webp',
286 'Visueller Prozess-Designer',
287 'Workflow-Designer mit Palette für Eingabe, Aktion, Prüfung und Entscheidung sowie konfiguriertem Schritt',
288 'Schritt 3: Bausteine in Reihenfolge anordnen und pro Schritt Bezeichnung, Schlüssel, Ergebnis, Bearbeitung und Abhängigkeit pflegen.',
289 array(0, 200, 1440, 810)
291$steps[] =
tutorial_assign(
'assign_workflow_create_designer',
'workflow_create_designer',
'workflow_create_page',
'Schritt 3: Eingaben, Aktionen, Prüfungen und Entscheidungen im visuellen Designer zusammensetzen.');
293 'workflow_create_binding',
294 'output/playwright/workflow-bind-new.png',
295 'tutorial-workflow-erstellen-04-binding.webp',
296 'Modul-Binding erstellen',
297 'Binding-Editor mit Generator für Modul, Datadic und Bind-Schlüssel',
298 'Schritt 4: Fachmodul und DD verbinden, Auswahl und Vorbelegung prüfen und Finish-Logik auf den richtigen Datensatz begrenzen.'
300$steps[] =
tutorial_assign(
'assign_workflow_create_binding',
'workflow_create_binding',
'workflow_create_page',
'Schritt 4: Über Modul-Bindings Auswahlquellen, Fachformulare und Abschlusslogik sicher verbinden.');
305 'Tutorial: Workflow benutzen',
306 'tutorial-workflow-nutzen',
307 'Workflow starten, Aufgaben bearbeiten, automatische Prüfungen verstehen, Fachmodule nutzen und kontrolliert abschließen.',
308 'dbxWorkflow, Workflow nutzen, Schritte, Automatik, Review, Abschluss, Tutorial',
313 'workflow_use_start',
314 'output/playwright/workflow-ebay-step1.png',
315 'tutorial-workflow-nutzen-01-start.webp',
317 'Gestarteter Workflow mit Ziel, Fortschritt, erster Aufgabe, Artikelauswahl und Übernehmen-Schaltfläche',
318 'Schritt 1: Ziel prüfen, den richtigen Fachdatensatz auswählen und den ersten Wert mit „Übernehmen“ speichern.'
320$steps[] =
tutorial_assign(
'assign_workflow_use_start',
'workflow_use_start',
'workflow_use_page',
'Schritt 1: Neue Instanz starten, Ziel prüfen und den ersten Schritt bewusst übernehmen.');
322 'workflow_use_check',
323 'output/playwright/workflow-ebay-step2.png',
324 'tutorial-workflow-nutzen-02-automatik.webp',
325 'Automatische Prüfung',
326 'Workflow nach automatischer Bereitschaftsprüfung mit erledigten und gesperrten Schritten',
327 'Schritt 2: Automatische Meldung vollständig lesen; fehlende Angaben im Fachmodul ergänzen, bevor der Ablauf fortgesetzt wird.'
329$steps[] =
tutorial_assign(
'assign_workflow_use_check',
'workflow_use_check',
'workflow_use_page',
'Schritt 2: Automatische Prüfung auswerten und fehlende Fachdaten gezielt ergänzen.');
331 'workflow_use_module',
332 '.playwright-cli/page-2026-07-18T09-47-11-599Z.png',
333 'tutorial-workflow-nutzen-03-modulschritt.webp',
334 'Fachmodul bearbeiten',
335 'Aktueller Workflow-Schritt mit Links zur Artikelbearbeitung und zum eBay-Mapping sowie Bestätigung',
336 'Schritt 3: Fachformular öffnen, dort speichern, zum Workflow zurückkehren, Bestätigung setzen und übernehmen.',
337 array(0, 180, 1440, 810)
339$steps[] =
tutorial_assign(
'assign_workflow_use_module',
'workflow_use_module',
'workflow_use_page',
'Schritt 3: Fachmodul wirklich speichern und danach den Modulschritt im Workflow bestätigen.');
341 'workflow_use_review',
342 'output/playwright/workflow-ebay-review.png',
343 'tutorial-workflow-nutzen-04-review.webp',
344 'Review und Abschluss',
345 'Workflow-Abschlussprüfung mit 100 Prozent Fortschritt, Ergebnisübersicht und bewusster Abschlussaktion',
346 'Schritt 4: Zusammenfassung, externe Daten und Ziel kontrollieren und erst danach den fachlichen Abschluss bestätigen.'
348$steps[] =
tutorial_assign(
'assign_workflow_use_review',
'workflow_use_review',
'workflow_use_page',
'Schritt 4: Review vollständig prüfen; 100 Prozent sind erst nach erfolgreichem Finish der fachliche Abschluss.');
352 'id' =>
'update_tutorial_overview',
353 'action' =>
'page.update',
358 'description' =>
'Übersicht aller dbXapp Tutorials für Grundlagen, dbxContent mit dbxKi, Shop und Workflow.',
359 'keywords' =>
'dbXapp Tutorials, dbxContent, dbxKi, Shop, Workflow, Anleitung',
366 array(
'recipe' =>
'tutorial-series-20260718.v1',
'steps' =>
$steps),
367 JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_THROW_ON_ERROR
tutorial_page(string $id, string $title, string $permalink, string $description, string $keywords, string $sorter, string $content)
foreach(array(507, 508, 509, 510, 511) as $usageId) $dbxKiSlides
tutorial_assign(string $id, string $mediaRef, string $pageRef, string $caption)
tutorial_image(string $id, string $source, string $fileName, string $title, string $alt, string $caption, ?array $crop=null)
tutorial_assign_existing(string $id, int $mediaId, int $pageId, string $caption)
tutorial_content(string $name)