dbxapp 4.1.3
CMS, Shop, Workflows und modulare Geschäftsanwendungen
Loading...
Searching...
No Matches
tutorial-series-20260718/job.php
Go to the documentation of this file.
1<?php
8declare(strict_types=1);
9
10$bundleDir = __DIR__;
11
12function tutorial_content(string $name): string {
13 $path = __DIR__ . '/content/' . $name . '.html';
14 $html = file_get_contents($path);
15 if ($html === false) {
16 throw new RuntimeException('Tutorial-Inhalt fehlt: ' . $path);
17 }
18 return trim($html);
19}
20
21function tutorial_page(string $id, string $title, string $permalink, string $description, string $keywords, string $sorter, string $content): array {
22 return array(
23 'id' => $id,
24 'action' => 'page.create',
25 'params' => array(
26 'lng' => 'de',
27 'folder_id' => 15,
28 'title' => $title,
29 'seo_title' => $title,
30 'permalink' => $permalink,
31 'description' => $description,
32 'keywords' => $keywords,
33 'activ' => 1,
34 'group_read' => '*',
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',
44 'sorter' => $sorter,
45 'content' => $content,
46 ),
47 );
48}
49
50function tutorial_image(string $id, string $source, string $fileName, string $title, string $alt, string $caption, ?array $crop = null): array {
51 $params = array(
52 'source_file' => $source,
53 'file_name' => $fileName,
54 'media_folder' => 'img/gallery',
55 'width' => 1600,
56 'height' => 900,
57 'fit' => 'contain',
58 'quality' => 86,
59 'title' => $title,
60 'alt' => $alt,
61 'caption' => $caption,
62 'tags' => 'dbxapp,tutorial,screenshot',
63 );
64 if ($crop !== null) {
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';
70 }
71 return array('id' => $id, 'action' => 'media.create_image_variant', 'params' => $params);
72}
73
74function tutorial_assign(string $id, string $mediaRef, string $pageRef, string $caption): array {
75 return array(
76 'id' => $id,
77 'action' => 'media.assign',
78 'params' => array(
79 'media_id' => '$ref:' . $mediaRef . '.media_id',
80 'content_id' => '$ref:' . $pageRef . '.page_id',
81 'slot' => 'gallery',
82 'lng' => 'de',
83 'caption' => $caption,
84 ),
85 );
86}
87
88function tutorial_assign_existing(string $id, int $mediaId, int $pageId, string $caption): array {
89 return array(
90 'id' => $id,
91 'action' => 'media.assign',
92 'params' => array(
93 'media_id' => $mediaId,
94 'content_id' => $pageId,
95 'slot' => 'gallery',
96 'lng' => 'de',
97 'caption' => $caption,
98 ),
99 );
100}
101
102$steps = array();
103
104// Bestehendes dbxKi-Tutorial zum vollstaendigen dbxContent/dbxKi-Ablauf ausbauen.
105$steps[] = array(
106 'id' => 'update_dbxcontent_dbxki',
107 'action' => 'page.update',
108 'params' => array(
109 'lng' => 'de',
110 'id' => 89,
111 'patch' => array(
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',
116 'content' => tutorial_content('dbxcontent-dbxki'),
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',
126 ),
127 ),
128);
129
130foreach (array(507, 508, 509, 510, 511) as $usageId) {
131 $steps[] = array(
132 'id' => 'unassign_dbxki_' . $usageId,
133 'action' => 'media.unassign',
134 'params' => array('usage_id' => $usageId),
135 );
136}
137
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.'),
148);
149foreach ($dbxKiSlides as $index => $slide) {
150 $steps[] = tutorial_assign_existing('assign_dbxki_' . ($index + 1), $slide[0], 89, $slide[1]);
151}
152
153// Shop Admin.
155 'shop_admin_page',
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',
160 '0110',
161 tutorial_content('shop-admin')
162);
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)
171);
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)
181);
182$steps[] = tutorial_assign('assign_shop_admin_payment', 'shop_admin_payment', 'shop_admin_page', 'Schritt 2: Vorkasse, Rechnung und Providerdaten sicher konfigurieren und testen.');
184 'shop_admin_orders',
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.'
190);
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.'
199);
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.');
201
202// Shop Frontend.
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',
209 '0120',
210 tutorial_content('shop-frontend')
211);
213 'shop_frontend_catalog',
214 '.playwright-cli/page-2026-07-18T20-16-16-888Z.png',
215 'tutorial-shop-frontend-01-katalog.webp',
216 'Shop-Katalog',
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)
220);
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',
226 'Produktdetail',
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)
230);
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',
236 'Warenkorb',
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)
240);
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)
250);
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.');
252
253// Workflow erstellen.
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',
260 '0130',
261 tutorial_content('workflow-erstellen')
262);
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)
271);
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.'
280);
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)
290);
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.'
299);
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.');
301
302// Workflow benutzen.
304 'workflow_use_page',
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',
309 '0140',
310 tutorial_content('workflow-nutzen')
311);
313 'workflow_use_start',
314 'output/playwright/workflow-ebay-step1.png',
315 'tutorial-workflow-nutzen-01-start.webp',
316 'Workflow starten',
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.'
319);
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.'
328);
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)
338);
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.'
347);
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.');
349
350// Tutorial-Uebersicht zuletzt aktualisieren, wenn alle Zielseiten angelegt sind.
351$steps[] = array(
352 'id' => 'update_tutorial_overview',
353 'action' => 'page.update',
354 'params' => array(
355 'lng' => 'de',
356 'id' => 79,
357 'patch' => array(
358 'description' => 'Übersicht aller dbXapp Tutorials für Grundlagen, dbxContent mit dbxKi, Shop und Workflow.',
359 'keywords' => 'dbXapp Tutorials, dbxContent, dbxKi, Shop, Workflow, Anleitung',
360 'content' => tutorial_content('overview'),
361 ),
362 ),
363);
364
365echo json_encode(
366 array('recipe' => 'tutorial-series-20260718.v1', 'steps' => $steps),
367 JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_THROW_ON_ERROR
368);
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)