dbxapp 4.1.3
CMS, Shop, Workflows und modulare Geschäftsanwendungen
Loading...
Searching...
No Matches
restructure_marketing_de.php
Go to the documentation of this file.
1<?php
2declare(strict_types=1);
3
8
9if (PHP_SAPI !== 'cli') {
10 fwrite(STDERR, "Dieses Werkzeug darf nur auf der Kommandozeile laufen.\n");
11 exit(1);
12}
13
14$apply = in_array('--apply', $argv, true);
15$base = dirname(__DIR__, 4);
16chdir($base);
17
18$_SERVER['REQUEST_URI'] = '/dbxapp/';
19$_SERVER['HTTP_HOST'] = 'localhost';
20$_SERVER['HTTPS'] = 'on';
21$_SERVER['SCRIPT_NAME'] = '/dbxapp/index.php';
22
23define('dbxSystem', 'dbxWebApp');
24define('dbxRunAsAdmin', 1);
25
26require $base . '/dbx/vendor/autoload.php';
27require_once $base . '/dbx/include/dbxKernel.php';
28require_once $base . '/dbx/modules/dbxContent/include/dbxContent_bootstrap_sync.php';
29require_once $base . '/dbx/modules/dbxContent/include/dbxContentPageCache.class.php';
30require_once $base . '/dbx/modules/dbxContent/include/dbxContentSitemap.class.php';
31
32$contentDd = dbxContentLng::ddContent('de');
33$folderDd = dbxContentLng::ddFolder('de');
34$db = dbx()->get_system_obj('dbxDB');
35if (!is_object($db) || !$db->connect_db_server('dbx|dbxContent.db3')) {
36 fwrite(STDERR, "Die Content-Datenbank konnte nicht über dbxDB verbunden werden.\n");
37 exit(1);
38}
39
42 2, 4, 5, 6, 8, 45, 47, 48, 51, 53, 56, 57, 58, 59, 60, 62,
43 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
44 115, 116, 117, 118, 119, 120, 121, 122,
45);
46
47$pages = array(
48 array(
49 'folder' => 2,
50 'sorter' => '0010',
51 'title' => 'Lösungen für Websites, Verkauf und Geschäftsprozesse',
52 'permalink' => 'loesungen',
53 'seo_title' => 'dbxapp Lösungen: CMS, Shop, Anwendungen und Portale',
54 'description' => 'Vier klare Lösungsbereiche verbinden Website und CMS, Shop und Multichannel, individuelle Anwendungen sowie Intranet und Portale.',
55 'keywords' => 'dbxapp Lösungen, CMS, Shop, Fachanwendung, Intranet, Portal',
56 'content' => <<<'HTML'
57<p class="lead">dbxapp verbindet Inhalte, Verkauf und betriebliche Abläufe auf einer gemeinsamen Plattform. Sie starten mit der Lösung, die heute gebraucht wird, und ergänzen weitere Funktionen, wenn das Unternehmen wächst.</p>
58
59<div class="row g-4 my-4">
60 <div class="col-md-6"><div class="card h-100"><div class="card-body">
61 <h2>Website und CMS</h2>
62 <p>Seiten, Medien und mehrsprachige Inhalte komfortabel pflegen und mit individuellen Funktionen verbinden.</p>
63 <a class="btn btn-outline-primary" href="cms-website">CMS und Website entdecken</a>
64 </div></div></div>
65 <div class="col-md-6"><div class="card h-100"><div class="card-body">
66 <h2>Shop und Multichannel</h2>
67 <p>Produkte, Leistungen, Bestellungen und Vertriebskanäle in einem nachvollziehbaren Ablauf verwalten.</p>
68 <a class="btn btn-outline-primary" href="shop-multichannel">Shop-Lösung entdecken</a>
69 </div></div></div>
70 <div class="col-md-6"><div class="card h-100"><div class="card-body">
71 <h2>Individuelle Anwendungen</h2>
72 <p>Formulare, Daten, Reports, Dashboards und Workflows passend zu den tatsächlichen Aufgaben entwickeln.</p>
73 <a class="btn btn-outline-primary" href="individuelle-anwendungen">Anwendungen entdecken</a>
74 </div></div></div>
75 <div class="col-md-6"><div class="card h-100"><div class="card-body">
76 <h2>Intranet und Portale</h2>
77 <p>Geschützte Informationen und Funktionen für Mitarbeitende, Kunden oder Partner bereitstellen.</p>
78 <a class="btn btn-outline-primary" href="intranet-portale">Portale entdecken</a>
79 </div></div></div>
80</div>
81
82<h2>Keine neue technische Insel</h2>
83<p>Alle Bereiche verwenden denselben Kern für Benutzer, Rechte, Daten, Formulare, Reports, Templates und Medien. Dadurch können Inhalte und Fachfunktionen zusammenarbeiten, ohne für jeden neuen Schritt ein getrenntes System einzuführen.</p>
84
85<div class="alert alert-primary">
86 <strong>Welche Lösung passt?</strong> Beschreiben Sie kurz Ihre Ausgangslage. Gemeinsam lässt sich klären, welcher Einstieg sinnvoll ist.
87 <a class="btn btn-primary ms-md-3 mt-2 mt-md-0" href="kontakt">Projekt besprechen</a>
88</div>
89HTML,
90 ),
91 array(
92 'folder' => 2,
93 'sorter' => '0020',
94 'title' => 'Website und CMS: Inhalte professionell verwalten',
95 'permalink' => 'cms-website',
96 'seo_title' => 'CMS und Website mit dbxapp',
97 'description' => 'Mit dbxapp verwalten Sie Seiten, Medien, Designs und mehrsprachige Inhalte und verbinden das CMS bei Bedarf mit individuellen Modulen.',
98 'keywords' => 'CMS, Website, Medienverwaltung, mehrsprachig, Webdesign, dbxapp',
99 'content' => <<<'HTML'
100<p class="lead">Ein professioneller Webauftritt braucht aktuelle Inhalte, eine klare Struktur und ein Design, das zur Marke passt. Das dbxapp CMS verbindet diese redaktionellen Aufgaben mit Medien, Rechten und funktionalen Modulen.</p>
101
102<h2>Inhalte und Seiten übersichtlich pflegen</h2>
103<p>Redakteure verwalten Texte, Bilder, Downloads, Seitenstruktur und SEO-Daten an einem Ort. Inhalte können mehrsprachig aufgebaut, gezielt veröffentlicht und von berechtigten Personen bearbeitet werden.</p>
104
105<div class="row g-3 my-4">
106 <div class="col-lg-4"><div class="card h-100"><div class="card-body"><h3>Seiten und Medien</h3><p>Inhalte strukturieren, Medien zentral verwenden und Änderungen direkt im passenden Kontext prüfen.</p></div></div></div>
107 <div class="col-lg-4"><div class="card h-100"><div class="card-body"><h3>Designfreiheit</h3><p>Inhalt, Template und Design bleiben getrennt. Dadurch sind individuelle Auftritte möglich, ohne die redaktionellen Daten neu aufzubauen.</p></div></div></div>
108 <div class="col-lg-4"><div class="card h-100"><div class="card-body"><h3>Mehrsprachigkeit</h3><p>Sprachversionen werden nachvollziehbar miteinander verbunden und können getrennt geprüft und veröffentlicht werden.</p></div></div></div>
109</div>
110
111<h2>Mehr als eine klassische Website</h2>
112<p>Formulare, Kontaktstrecken, Downloads, Shop-Funktionen, geschützte Bereiche oder individuelle Anwendungen lassen sich in Content-Seiten einbinden. So bleibt die Website der verständliche Einstieg, während dahinter echte Geschäftsprozesse ablaufen können.</p>
113
114<h2>KI-Unterstützung mit Freigabe</h2>
115<p>dbxKi kann Briefings, Textentwürfe, SEO-Daten und Übersetzungen vorbereiten. Das CMS bleibt das führende System: Vorschläge werden geprüft und erst danach übernommen.</p>
116
117<p><a class="btn btn-primary" href="kontakt">Website-Projekt anfragen</a> <a class="btn btn-outline-secondary" href="dbxki">dbxKi kennenlernen</a></p>
118HTML,
119 ),
120 array(
121 'folder' => 2,
122 'sorter' => '0030',
123 'title' => 'Shop und Multichannel: überzeugend verkaufen',
124 'permalink' => 'shop-multichannel',
125 'seo_title' => 'Shop und Multichannel mit dbxapp',
126 'description' => 'Produkte, Leistungen, Bestellungen, Zahlungen und Vertriebskanäle werden in dbxapp gemeinsam und nachvollziehbar verwaltet.',
127 'keywords' => 'Onlineshop, Multichannel, Produkte, Bestellungen, Marktplätze, dbxapp Shop',
128 'content' => <<<'HTML'
129<p class="lead">Der dbxapp Shop verbindet ein verständliches Einkaufserlebnis mit der Verwaltung von Produkten, Bestellungen und Vertriebskanälen. Inhalte, Kundenkommunikation und Verkauf bleiben Teil derselben Plattform.</p>
130
131<h2>Vom Angebot bis zur Bestellung</h2>
132<p>Produkte und Leistungen lassen sich strukturiert präsentieren. Artikelgruppen, Attribute, Bilder, Versandinformationen und rechtliche Inhalte schaffen eine belastbare Grundlage für den Verkauf.</p>
133
134<div class="row g-3 my-4">
135 <div class="col-md-6"><div class="card h-100"><div class="card-body"><h3>Katalog und Produktdaten</h3><p>Produkte, Varianten, Medien und Zuordnungen übersichtlich verwalten und passend ausgeben.</p></div></div></div>
136 <div class="col-md-6"><div class="card h-100"><div class="card-body"><h3>Bestellungen und Zahlungen</h3><p>Warenkorb, Checkout und Bestellstatus in klaren Abläufen zusammenführen; Zahlungsanbieter können passend angebunden werden.</p></div></div></div>
137 <div class="col-md-6"><div class="card h-100"><div class="card-body"><h3>Vertriebskanäle</h3><p>Eigener Shop und weitere Kanäle können auf derselben Produktbasis arbeiten. Zuordnungen bleiben je Artikel kontrollierbar.</p></div></div></div>
138 <div class="col-md-6"><div class="card h-100"><div class="card-body"><h3>Individuelle Prozesse</h3><p>B2B-Angebote, besondere Freigaben oder interne Auftragswege lassen sich als Module und Workflows ergänzen.</p></div></div></div>
139</div>
140
141<h2>Kein Shop neben dem CMS</h2>
142<p>Produktinformationen, Landingpages, Medien und Kontaktwege werden nicht in getrennten Systemen gepflegt. Das reduziert doppelte Arbeit und ermöglicht durchgängige Abläufe vom Inhalt bis zur Bearbeitung einer Bestellung.</p>
143
144<p><a class="btn btn-primary" href="kontakt">Verkaufsprozess besprechen</a> <a class="btn btn-outline-secondary" href="?dbx_modul=dbxShop&amp;dbx_run1=catalog">Demo-Shop ansehen</a></p>
145HTML,
146 ),
147 array(
148 'folder' => 2,
149 'sorter' => '0040',
150 'title' => 'Individuelle Anwendungen und Workflows',
151 'permalink' => 'individuelle-anwendungen',
152 'seo_title' => 'Individuelle Anwendungen und Workflows mit dbxapp',
153 'description' => 'dbxapp verbindet Datenmodelle, Formulare, Reports, Rechte und Workflows zu passgenauen Fachanwendungen und Portalen.',
154 'keywords' => 'Fachanwendung, Workflow, Formular, Report, Dashboard, Systemintegration',
155 'content' => <<<'HTML'
156<p class="lead">Standardsoftware passt selten exakt zu gewachsenen Abläufen. Mit dbxapp entstehen Anwendungen, die Aufgaben, Daten und Rollen eines Unternehmens abbilden, ohne als neue Insellösung neben Website, CMS oder Shop zu stehen.</p>
157
158<h2>Typische Einsatzbereiche</h2>
159<ul>
160 <li>CRM, Kunden- und Serviceportale</li>
161 <li>Auftragsbearbeitung, Lager und Inventur</li>
162 <li>Tickets, Anfragen und Freigaben</li>
163 <li>Projektsteuerung und interne Verwaltungswerkzeuge</li>
164 <li>Reports, Kennzahlen und Dashboards</li>
165 <li>Anbindung bestehender Daten und Systeme</li>
166</ul>
167
168<h2>Vom Formular zum nachvollziehbaren Prozess</h2>
169<p>Formulare erfassen strukturierte Daten. Reports machen sie auffindbar und auswertbar. Rechte bestimmen, wer lesen oder handeln darf. Workflows verbinden Status, Prüfungen und Aktionen zu einem klaren Ablauf. Jeder Schritt bleibt fachlich im zuständigen Modul.</p>
170
171<div class="row g-3 my-4">
172 <div class="col-lg-4"><div class="card h-100"><div class="card-body"><h3>Gemeinsame Datenbasis</h3><p>DD und dbxDB sorgen für einheitliche Datenzugriffe, Rechte und Serverbindungen.</p></div></div></div>
173 <div class="col-lg-4"><div class="card h-100"><div class="card-body"><h3>Einheitliche Bedienung</h3><p>dbxForm, dbxReport und dbxTPL geben neuen Modulen vertraute und erprobte Oberflächen.</p></div></div></div>
174 <div class="col-lg-4"><div class="card h-100"><div class="card-body"><h3>Kontrolliert erweiterbar</h3><p>Neue Funktionen ergänzen bestehende Module, Benutzer und Rechte, statt einen parallelen Technikstapel einzuführen.</p></div></div></div>
175</div>
176
177<h2>Transparenz im Betrieb</h2>
178<p>Das Admin-Dashboard bündelt Systemstatus, Laufzeiten, Datenbankwerte und Meldungen. Dadurch werden technische Auffälligkeiten sichtbar, bevor sie unbemerkt zu einem dauerhaften Problem werden.</p>
179
180<p><a class="btn btn-primary" href="kontakt">Anwendungsfall beschreiben</a> <a class="btn btn-outline-secondary" href="plattform">Plattform verstehen</a></p>
181HTML,
182 ),
183 array(
184 'folder' => 2,
185 'sorter' => '0050',
186 'title' => 'Intranet und Portale für geschützte Zusammenarbeit',
187 'permalink' => 'intranet-portale',
188 'seo_title' => 'Intranet und Portale mit dbxapp',
189 'description' => 'Geschützte Inhalte, Benutzer, Formulare, Reports und Workflows werden in dbxapp zu einem passenden Intranet oder Portal verbunden.',
190 'keywords' => 'Intranet, Kundenportal, Mitarbeiterportal, Rechte, geschützte Inhalte',
191 'content' => <<<'HTML'
192<p class="lead">Ein Intranet oder Portal soll Informationen nicht nur anzeigen, sondern Menschen bei ihrer Arbeit unterstützen. dbxapp verbindet geschützte Inhalte mit Benutzern, Formularen, Reports und klaren Prozessen.</p>
193
194<h2>Für Mitarbeitende, Kunden und Partner</h2>
195<p>Bereiche können nach Benutzergruppen und Aufgaben getrennt werden. Öffentliche Informationen, interne Seiten und persönliche Vorgänge bleiben trotzdem Teil einer gemeinsamen Plattform.</p>
196
197<div class="row g-3 my-4">
198 <div class="col-md-6"><div class="card h-100"><div class="card-body"><h3>Geschützte Informationen</h3><p>Wissen, Dokumente und Hinweise gezielt für berechtigte Gruppen bereitstellen.</p></div></div></div>
199 <div class="col-md-6"><div class="card h-100"><div class="card-body"><h3>Formulare und Anfragen</h3><p>Interne Meldungen, Freigaben oder Serviceanfragen strukturiert erfassen und bearbeiten.</p></div></div></div>
200 <div class="col-md-6"><div class="card h-100"><div class="card-body"><h3>Persönliche Bereiche</h3><p>Benutzer sehen ihre eigenen Vorgänge, Bestellungen oder Aufgaben in einem klaren Kontext.</p></div></div></div>
201 <div class="col-md-6"><div class="card h-100"><div class="card-body"><h3>Flexible Bereitstellung</h3><p>Je nach Schutzbedarf im eigenen Intranet, auf Hosting, in der Cloud oder als betreute Installation.</p></div></div></div>
202</div>
203
204<h2>Mit den Anforderungen wachsen</h2>
205<p>Ein Portal kann mit wenigen Inhalten und Formularen beginnen. Später lassen sich Reports, Workflows oder individuelle Module ergänzen, ohne Benutzerverwaltung und Bedienkonzept neu aufzubauen.</p>
206
207<p><a class="btn btn-primary" href="kontakt">Portal planen</a> <a class="btn btn-outline-secondary" href="pakete">Betriebsmodelle vergleichen</a></p>
208HTML,
209 ),
210 array(
211 'folder' => 2,
212 'sorter' => '0060',
213 'title' => 'dbxKi: KI-Unterstützung mit Kontrolle',
214 'permalink' => 'dbxki',
215 'seo_title' => 'dbxKi: KI für CMS, SEO und Module',
216 'description' => 'dbxKi bereitet Inhalte, SEO-Daten, Übersetzungen und Entwicklungsaufträge vor; Prüfung und Freigabe bleiben im dbxapp-Ablauf.',
217 'keywords' => 'dbxKi, künstliche Intelligenz, CMS, SEO, Übersetzung, Modulentwicklung',
218 'content' => <<<'HTML'
219<p class="lead">dbxKi verbindet KI-Anbieter mit klar beschriebenen Aufgaben in dbxapp. Die KI liefert einen prüfbaren Vorschlag; Rechte, Daten, Freigabe und Veröffentlichung bleiben unter Kontrolle des Systems und seiner Benutzer.</p>
220
221<h2>Unterstützung für Inhalte</h2>
222<p>Redaktionen können Briefings für neue Seiten, Überarbeitungen, SEO-Daten, Zusammenfassungen und Übersetzungen erstellen. Quellen, Ziel und gewünschte Struktur werden im Auftrag festgehalten.</p>
223
224<h2>Unterstützung für Module und Designs</h2>
225<p>Auch technische Aufgaben lassen sich als vollständiges Paket vorbereiten: mit Regeln, vorhandenen Dateien, gewünschtem Ergebnis und einem importierbaren Antwortpaket. Änderungen werden vor der Übernahme geprüft.</p>
226
227<ol class="my-4">
228 <li><strong>Briefing:</strong> Ziel, Zielgruppe, Quellen und Grenzen verständlich beschreiben.</li>
229 <li><strong>Auftragspaket:</strong> dbxKi stellt die notwendigen Regeln und Dateien zusammen.</li>
230 <li><strong>Ergebnis prüfen:</strong> Inhalt, Dateiliste und Änderungen kontrollieren.</li>
231 <li><strong>Freigeben:</strong> Erst die bewusste Übernahme verändert das System.</li>
232</ol>
233
234<h2>Datenschutz und Betriebsmodell</h2>
235<p>Welche Daten an einen KI-Anbieter übermittelt werden dürfen, hängt vom gewählten Anbieter, Vertrag und Einsatzzweck ab. Sensible Daten gehören nur in einen dafür ausdrücklich freigegebenen Prozess. dbxKi macht den Auftrag nachvollziehbar, ersetzt aber keine organisatorische Datenschutzentscheidung.</p>
236
237<p><a class="btn btn-primary" href="kontakt">KI-Einsatz besprechen</a> <a class="btn btn-outline-secondary" href="dokumentation">Technische Anleitung öffnen</a></p>
238HTML,
239 ),
240 array(
241 'folder' => 11,
242 'sorter' => '0010',
243 'title' => 'Die dbxapp Plattform: ein Kern, klare Bausteine',
244 'permalink' => 'plattform',
245 'seo_title' => 'dbxapp Plattform und Technik',
246 'description' => 'Ein gemeinsamer Kern verbindet Benutzer, Rechte, Daten, Formulare, Reports, Templates, CMS, Shop und individuelle Module.',
247 'keywords' => 'dbxapp Plattform, Architektur, Module, dbxDB, dbxForm, dbxReport, dbxTPL',
248 'content' => <<<'HTML'
249<p class="lead">dbxapp ist eine modulare Plattform für Websites, Shops und Geschäftsanwendungen. Wiederkehrende Aufgaben werden im Kern einheitlich gelöst, während die Fachlogik in klar abgegrenzten Modulen bleibt.</p>
250
251<h2>Gemeinsame Grundlagen</h2>
252<div class="row g-3 my-4">
253 <div class="col-md-6 col-xl-3"><div class="card h-100"><div class="card-body"><h3>Daten</h3><p>dbxDB und DD verbinden Datenzugriff, Tabellenbeschreibung, Rechte und unterschiedliche Datenbankserver.</p></div></div></div>
254 <div class="col-md-6 col-xl-3"><div class="card h-100"><div class="card-body"><h3>Formulare</h3><p>dbxForm nutzt FD, Validierung, Meldungen, Freigaben und Ajax nach einem gemeinsamen Vertrag.</p></div></div></div>
255 <div class="col-md-6 col-xl-3"><div class="card h-100"><div class="card-body"><h3>Listen</h3><p>dbxReport stellt Filter, Tabellen, Summen, Aktionen und Exporte einheitlich bereit.</p></div></div></div>
256 <div class="col-md-6 col-xl-3"><div class="card h-100"><div class="card-body"><h3>Darstellung</h3><p>dbxTPL trennt Daten und Fachlogik von wiederverwendbaren Templates und Designs.</p></div></div></div>
257</div>
258
259<h2>Benutzer, Rechte und Sicherheit</h2>
260<p>Module, Inhalte und Daten verwenden denselben Benutzer- und Gruppenkontext. DD-Rechte schützen Datenoperationen. Formulare und schreibende Aktionen erhalten zusätzlich die jeweils notwendige Absicherung gegen unbeabsichtigte Browseraktionen.</p>
261
262<h2>Desktop, Mobile, Intranet und Cloud</h2>
263<p>Dies sind keine getrennten Produkte, sondern Zugriffs- und Betriebsformen derselben Plattform. Die fachliche Codebasis bleibt gemeinsam; Design, Bereitstellung und Zugriffskontext können angepasst werden.</p>
264
265<h2>Schnittstellen und Erweiterungen</h2>
266<p>Neue Anforderungen werden als Module ergänzt. Sie können vorhandene Daten, Formulare, Reports, Workflows und CMS-Seiten nutzen. Bestehende Systeme lassen sich über klar definierte Schnittstellen einbinden.</p>
267
268<p><a class="btn btn-primary" href="entwickler">Entwicklerüberblick</a> <a class="btn btn-outline-secondary" href="pakete">Betrieb und Pakete</a></p>
269HTML,
270 ),
271 array(
272 'folder' => 11,
273 'sorter' => '0020',
274 'title' => 'Pakete und Betrieb passend zum Projekt',
275 'permalink' => 'pakete',
276 'seo_title' => 'dbxapp Pakete, Full Service und Self-Hosting',
277 'description' => 'Website, Business, Intranet und individuelle Projekte lassen sich mit Full Service, Self-Hosting oder einer passenden Vereinbarung betreiben.',
278 'keywords' => 'dbxapp Pakete, Full Service, Self-Hosting, Intranet, Enterprise, Website',
279 'content' => <<<'HTML'
280<p class="lead">Nicht jedes Projekt braucht denselben Umfang. Die Pakete beschreiben sinnvolle Einstiege; Funktionen und Betrieb werden anschließend passend zum tatsächlichen Bedarf vereinbart.</p>
281
282<div class="table-responsive my-4">
283<table class="table table-striped align-middle">
284 <thead><tr><th>Angebot</th><th>Geeignet für</th><th>Typischer Schwerpunkt</th></tr></thead>
285 <tbody>
286 <tr><th>Website</th><td>Unternehmen und Organisationen mit einem professionellen Internetauftritt</td><td>CMS, Medien, Design, Formulare und Mehrsprachigkeit</td></tr>
287 <tr><th>Business</th><td>Projekte, die Inhalte und Verkauf oder kleinere Anwendungen verbinden</td><td>Website, CMS, Shop, Benutzer und erste Prozessmodule</td></tr>
288 <tr><th>Intranet</th><td>Interne und geschützte Zusammenarbeit</td><td>Benutzer, Rechte, Inhalte, Formulare, Reports und Workflows</td></tr>
289 <tr><th>Individuell</th><td>Fachanwendungen und Systemintegration</td><td>Eigene Datenmodelle, Module, Schnittstellen und komplexere Abläufe</td></tr>
290 </tbody>
291</table>
292</div>
293
294<h2>Betriebsmodelle</h2>
295<div class="row g-3 my-4">
296 <div class="col-md-4"><div class="card h-100"><div class="card-body"><h3>Full Service</h3><p>Einrichtung, Hosting, Wartung und Weiterentwicklung werden passend zum vereinbarten Leistungsumfang übernommen.</p></div></div></div>
297 <div class="col-md-4"><div class="card h-100"><div class="card-body"><h3>Self-Hosting</h3><p>Die eigene IT verantwortet Installation, Updates, Backups, Mail-Konfiguration und sicheren Betrieb.</p></div></div></div>
298 <div class="col-md-4"><div class="card h-100"><div class="card-body"><h3>Individuelle Vereinbarung</h3><p>Aufgaben können geteilt werden, etwa eigener Betrieb mit Unterstützung bei Einrichtung oder Updates.</p></div></div></div>
299</div>
300
301<h2>Non-Profit</h2>
302<p>Für gemeinnützige Organisationen kann ein Sondertarif oder ein reduzierter Einstieg vereinbart werden. Technisch bleibt es dieselbe belastbare Plattform; entscheidend sind Ziel, Umfang und verfügbare Mittel.</p>
303
304<p><a class="btn btn-primary" href="kontakt">Passendes Angebot klären</a> <a class="btn btn-outline-secondary" href="demo">Demo testen</a></p>
305HTML,
306 ),
307 array(
308 'folder' => 11,
309 'sorter' => '0030',
310 'title' => 'Referenzen und realistische Beispielprojekte',
311 'permalink' => 'referenzen',
312 'seo_title' => 'dbxapp Referenzen und Beispielprojekte',
313 'description' => 'Realistisch beschriebene Beispielprojekte zeigen, wie CMS, Shop, Portale, Formulare, Reports und Workflows zusammenspielen.',
314 'keywords' => 'dbxapp Referenzen, Beispielprojekt, CMS, Shop, Portal, Workflow',
315 'content' => <<<'HTML'
316<p class="lead">Eine Plattform überzeugt nicht durch allgemeine Versprechen, sondern durch nachvollziehbare Abläufe. Solange ein Projekt nicht als veröffentlichte Kundenreferenz freigegeben ist, kennzeichnen wir es ausdrücklich als Beispielprojekt.</p>
317
318<div class="row g-4 my-4">
319 <div class="col-lg-4"><div class="card h-100"><div class="card-body">
320 <span class="badge text-bg-secondary mb-2">Beispielprojekt</span>
321 <h2>Service- und Kundenportal</h2>
322 <p><strong>Ausgangslage:</strong> Anfragen kommen über verschiedene Kanäle und sind schwer nachzuverfolgen.</p>
323 <p><strong>Umsetzung:</strong> Kontaktformular, geschützter Kundenbereich, Statusreport und Benachrichtigungen auf einer gemeinsamen Datenbasis.</p>
324 <p><strong>Ergebnis:</strong> Ein klarer Vorgang vom Eingang bis zur beantworteten Anfrage.</p>
325 </div></div></div>
326 <div class="col-lg-4"><div class="card h-100"><div class="card-body">
327 <span class="badge text-bg-secondary mb-2">Beispielprojekt</span>
328 <h2>Intranet mit Freigaben</h2>
329 <p><strong>Ausgangslage:</strong> Informationen, Formulare und Zuständigkeiten liegen in getrennten Werkzeugen.</p>
330 <p><strong>Umsetzung:</strong> Geschützte Inhalte, Benutzergruppen, Formulare, Reports und ein mehrstufiger Workflow.</p>
331 <p><strong>Ergebnis:</strong> Mitarbeitende finden Informationen und Aufgaben in derselben Oberfläche.</p>
332 </div></div></div>
333 <div class="col-lg-4"><div class="card h-100"><div class="card-body">
334 <span class="badge text-bg-secondary mb-2">Beispielprojekt</span>
335 <h2>Shop mit individueller Bearbeitung</h2>
336 <p><strong>Ausgangslage:</strong> Standardbestellungen und besondere B2B-Anfragen sollen gemeinsam bearbeitet werden.</p>
337 <p><strong>Umsetzung:</strong> Produktkatalog, Warenkorb, Bestellungen, kundenspezifische Formulare und interne Statusschritte.</p>
338 <p><strong>Ergebnis:</strong> Verkauf und anschließende Bearbeitung bleiben durchgängig verbunden.</p>
339 </div></div></div>
340</div>
341
342<h2>Was eine veröffentlichte Referenz zeigen soll</h2>
343<p>Ausgangssituation, umgesetzte Funktionen, aussagekräftige Screenshots, messbares oder konkret beobachtbares Ergebnis und die eingesetzten dbxapp-Module. Kundennamen und Projektdaten werden nur mit ausdrücklicher Freigabe veröffentlicht.</p>
344
345<p><a class="btn btn-primary" href="kontakt">Eigenen Anwendungsfall besprechen</a></p>
346HTML,
347 ),
348 array(
349 'folder' => 11,
350 'sorter' => '0040',
351 'title' => 'dbxapp Demo kostenlos testen',
352 'permalink' => 'demo',
353 'seo_title' => 'dbxapp Demo für Windows anfordern',
354 'description' => 'Fordern Sie die portable dbxapp Windows-Demo an und testen Sie CMS, Medien, Module und typische Abläufe lokal.',
355 'keywords' => 'dbxapp Demo, Windows Demo, portable Anwendung, SQLite, Download',
356 'content' => <<<'HTML'
357<p class="lead">Mit der kostenlosen Demo gewinnen Sie einen ersten Eindruck davon, wie CMS-Inhalte, Medien, Benutzer und Module in dbxapp zusammenspielen.</p>
358
359<h2>Was Sie testen können</h2>
360<ul>
361 <li>Seiten und Inhalte im CMS ansehen und bearbeiten</li>
362 <li>Medien und Designs kennenlernen</li>
363 <li>Shop- und Modulfunktionen ausprobieren</li>
364 <li>Administration, Reports und typische Abläufe erkunden</li>
365</ul>
366
367<h2>Portable Windows-Version</h2>
368<p>Die Demo wird als ZIP-Paket bereitgestellt und kann lokal unter Windows gestartet werden. Sie verwendet eine vorbereitete Umgebung und SQLite-Datenbanken; ein externer MySQL-Server ist für diesen Test nicht erforderlich. Vor dem Start sollten die Installationshinweise gelesen werden.</p>
369
370<div class="alert alert-info"><strong>Wichtig:</strong> Die Demo ist eine Testumgebung und kein produktiver Betrieb. Verwenden Sie darin keine echten vertraulichen oder personenbezogenen Geschäftsdaten.</div>
371
372<h2>Download-Link anfordern</h2>
373[modul=dbxDownLoad]dbx_run1=form[/modul]
374
375<h2>Noch unsicher, was Sie testen sollten?</h2>
376<p><a class="btn btn-primary" href="kontakt">Frage zur Demo stellen</a> <a class="btn btn-outline-secondary" href="dokumentation">Installationshinweise öffnen</a></p>
377HTML,
378 ),
379 array(
380 'folder' => 3,
381 'sorter' => '0010',
382 'title' => 'Für Entwickler: dbxapp sauber erweitern',
383 'permalink' => 'entwickler',
384 'seo_title' => 'dbxapp für Entwickler: Architektur und Module',
385 'description' => 'Ein Überblick über Module, dbxDB, DD, FD, dbxForm, dbxReport, dbxTPL, Self-Hosting und die Erweiterung von dbxapp.',
386 'keywords' => 'dbxapp Entwickler, Modul, dbxDB, dbxForm, dbxReport, dbxTPL, DD, FD',
387 'content' => <<<'HTML'
388<p class="lead">dbxapp stellt wiederkehrende technische Aufgaben zentral bereit. Entwickler konzentrieren sich auf die Fachlogik eines Moduls und nutzen für Daten, Formulare, Reports und Templates ein gemeinsames Vorgehen.</p>
389
390<h2>Verbindliche Bausteine</h2>
391<dl class="row">
392 <dt class="col-sm-3">dbxDB und DD</dt><dd class="col-sm-9">Datenzugriff, Serverbindung, Tabellenbeschreibung, Rechte und automatische Systemfelder.</dd>
393 <dt class="col-sm-3">dbxForm und FD</dt><dd class="col-sm-9">Felder, Validierung, sprachabhängige Meldungen, Speichern und Ajax-Verhalten.</dd>
394 <dt class="col-sm-3">dbxReport</dt><dd class="col-sm-9">Filter, Listen, Summen, Aktionen, Pagination und Exporte auf Basis derselben Definitionen.</dd>
395 <dt class="col-sm-3">dbxTPL</dt><dd class="col-sm-9">Wiederverwendbare Darstellung ohne Datenbankzugriff und Fachmutation im Template.</dd>
396</dl>
397
398<h2>Module statt Sonderwege</h2>
399<p>Ein Modul kapselt seine Fachlogik, DDs, FDs und Templates. Es verwendet die vorhandenen Kernel-Fähigkeiten direkt und führt keinen parallelen Datenbank-, Formular-, Template- oder Sicherheitsstapel ein.</p>
400
401<h2>Gemischte Datenbankserver</h2>
402<p>Jedes DD kann an einen eigenen Server gebunden sein. Eine Installation darf SQLite- und MySQL-Tabellen kombinieren. Modulcode greift deshalb nie direkt auf eine konkrete Datenbankdatei oder PDO-Verbindung zu, sondern ausschließlich über dbxDB und das zuständige DD.</p>
403
404<h2>Self-Hosting und Updates</h2>
405<p>Lokale Konfiguration und Daten bleiben von Release-Dateien getrennt. Datenbankänderungen werden versionsbezogen über DD-Migrationen ausgeführt und müssen bestehende Serverbindungen respektieren.</p>
406
407<p><a class="btn btn-primary" href="dokumentation">Technische Dokumentation</a> <a class="btn btn-outline-secondary" href="kontakt">Entwicklungsprojekt anfragen</a></p>
408HTML,
409 ),
410 array(
411 'folder' => 3,
412 'sorter' => '0020',
413 'title' => 'Dokumentation und Tutorials',
414 'permalink' => 'dokumentation',
415 'seo_title' => 'dbxapp Dokumentation und Tutorials',
416 'description' => 'Einstieg in Benutzerhandbuch, Entwicklerdokumentation und Tutorials für dbxapp.',
417 'keywords' => 'dbxapp Dokumentation, Benutzerhandbuch, Entwicklerdokumentation, Tutorial',
418 'content' => <<<'HTML'
419<p class="lead">Marketingseiten erklären Nutzen und Angebot. Konkrete Bedienung, Klassen, Modulaufrufe und technische Abläufe gehören in die eigenständige Dokumentation.</p>
420
421<div class="row g-4 my-4">
422 <div class="col-md-4"><div class="card h-100"><div class="card-body"><h2>Benutzerhandbuch</h2><p>Schritt-für-Schritt-Anleitungen für CMS, Medien, Shop, Benutzer und tägliche Aufgaben.</p></div></div></div>
423 <div class="col-md-4"><div class="card h-100"><div class="card-body"><h2>Entwicklerdokumentation</h2><p>Architektur, Kernel-Klassen, DD, FD, Module, Templates, Sicherheit und verbindliche Vorgehensweisen.</p></div></div></div>
424 <div class="col-md-4"><div class="card h-100"><div class="card-body"><h2>Tutorials</h2><p>Zusammenhängende Beispiele für typische Verwaltungs-, Content-, Shop-, Workflow- und Designaufgaben.</p></div></div></div>
425</div>
426
427<p><a class="btn btn-primary" href="https://doku.dbxapp.de/">Dokumentation öffnen</a></p>
428
429<div class="alert alert-secondary">Die bisherigen lokalen Hilfe- und Tutorialseiten bleiben erhalten, werden aber nicht mehr als öffentliche Marketingseiten indexiert.</div>
430HTML,
431 ),
432 array(
433 'folder' => 11,
434 'sorter' => '0050',
435 'title' => 'Über uns und Kontakt',
436 'permalink' => 'kontakt',
437 'seo_title' => 'dbxapp kennenlernen und Projekt besprechen',
438 'description' => 'Beschreiben Sie Ihre Ziele, vorhandenen Systeme und gewünschten Abläufe. Wir klären gemeinsam, ob und wie dbxapp dazu passt.',
439 'keywords' => 'dbxapp Kontakt, Beratung, Projektanfrage, CMS, Shop, Fachanwendung',
440 'content' => <<<'HTML'
441<p class="lead">Eine gute Lösung beginnt nicht mit möglichst vielen Funktionen, sondern mit einem klaren Verständnis der Aufgabe. Beschreiben Sie, was heute schwierig ist und welches Ergebnis erreicht werden soll.</p>
442
443<h2>So gehen wir vor</h2>
444<ol>
445 <li><strong>Ausgangslage verstehen:</strong> Ziele, Benutzer, Daten, vorhandene Systeme und Rahmenbedingungen klären.</li>
446 <li><strong>Sinnvollen Einstieg bestimmen:</strong> Website, Shop, Portal oder Fachanwendung fachlich abgrenzen.</li>
447 <li><strong>Vorgehen transparent planen:</strong> Funktionen, Betrieb, Verantwortlichkeiten und nächste Schritte nachvollziehbar festhalten.</li>
448 <li><strong>Schrittweise umsetzen:</strong> Mit einem prüfbaren Kern beginnen und Erweiterungen kontrolliert ergänzen.</li>
449</ol>
450
451<h2>Was in eine erste Anfrage gehört</h2>
452<p>Eine kurze Beschreibung des Problems, die wichtigsten Benutzergruppen, vorhandene Systeme, gewünschte Funktionen und die bevorzugte Betriebsform. Vertrauliche Detaildaten sind für den ersten Kontakt nicht erforderlich.</p>
453
454[modul=dbxContact]dbx_run1=form[/modul]
455HTML,
456 ),
457);
458
459$home = array(
460 'title' => 'dbxapp – CMS, Shop und individuelle Anwendungen',
461 'seo_title' => 'dbxapp: CMS, Shop und individuelle Anwendungen',
462 'description' => 'dbxapp verbindet Website und CMS, Shop, Portale und individuelle Geschäftsanwendungen auf einer gemeinsamen modularen Plattform.',
463 'keywords' => 'dbxapp, CMS, Shop, Fachanwendung, Portal, Workflow, Self-Hosting',
464 'content' => <<<'HTML'
465<p class="lead">dbxapp verbindet Website und CMS, Shop, Portale und individuelle Geschäftsanwendungen auf einer gemeinsamen Plattform. Inhalte, Benutzer, Daten und Abläufe greifen ineinander, statt in getrennten Systemen gepflegt zu werden.</p>
466
467<div class="row g-4 my-4">
468 <div class="col-md-6 col-xl-3"><div class="card h-100"><div class="card-body"><h2>Website und CMS</h2><p>Seiten, Medien, Designs und mehrsprachige Inhalte professionell verwalten.</p><a href="cms-website">Mehr erfahren</a></div></div></div>
469 <div class="col-md-6 col-xl-3"><div class="card h-100"><div class="card-body"><h2>Shop und Multichannel</h2><p>Produkte, Bestellungen und Vertriebskanäle nachvollziehbar verbinden.</p><a href="shop-multichannel">Mehr erfahren</a></div></div></div>
470 <div class="col-md-6 col-xl-3"><div class="card h-100"><div class="card-body"><h2>Individuelle Anwendungen</h2><p>Formulare, Reports und Workflows passend zu den tatsächlichen Aufgaben.</p><a href="individuelle-anwendungen">Mehr erfahren</a></div></div></div>
471 <div class="col-md-6 col-xl-3"><div class="card h-100"><div class="card-body"><h2>Intranet und Portale</h2><p>Geschützte Inhalte und Funktionen für Mitarbeitende, Kunden und Partner.</p><a href="intranet-portale">Mehr erfahren</a></div></div></div>
472</div>
473
474<h2>Weniger Insellösungen, klarere Abläufe</h2>
475<p>Viele Unternehmen pflegen Inhalte, Kundendaten, Bestellungen, Formulare und interne Vorgänge in getrennten Werkzeugen. Das erzeugt doppelte Arbeit, Medienbrüche und unklare Zuständigkeiten. dbxapp stellt dafür einen gemeinsamen Kern bereit: Benutzer und Rechte, Datenzugriff, Formulare, Reports, Templates, Medien und Module folgen denselben Regeln.</p>
476
477<h2>Für wen eignet sich dbxapp?</h2>
478<p>Für Unternehmen und Organisationen, die mit einer professionellen Website starten oder bestehende digitale Abläufe zusammenführen möchten. Besonders sinnvoll ist die Plattform, wenn Standardfunktionen mit individuellen Anforderungen verbunden werden sollen.</p>
479
480<h2>Flexibel betreiben</h2>
481<p>dbxapp kann als betreuter Full Service, auf eigener Infrastruktur, im Intranet oder auf geeignetem Hosting betrieben werden. Die fachliche Anwendung bleibt dieselbe; Betrieb und Verantwortung werden passend zum Projekt gewählt.</p>
482
483<h2>Warum eine gemeinsame Plattform?</h2>
484<ul>
485 <li>Inhalte und Funktionen werden nicht mehrfach gepflegt.</li>
486 <li>Benutzer und Rechte gelten über Modulgrenzen hinweg.</li>
487 <li>Neue Anforderungen ergänzen die bestehende Lösung.</li>
488 <li>Systemstatus und Laufzeiten bleiben nachvollziehbar.</li>
489 <li>KI-Unterstützung arbeitet mit Briefing, Prüfung und Freigabe.</li>
490</ul>
491
492<div class="alert alert-primary">
493 <strong>dbxapp kennenlernen:</strong>
494 <a class="btn btn-primary ms-md-3 mt-2 mt-md-0" href="demo">Demo anfordern</a>
495 <a class="btn btn-outline-primary ms-2 mt-2 mt-md-0" href="kontakt">Projekt besprechen</a>
496</div>
497HTML,
498);
499
500$basePage = array(
501 'activ' => 1,
502 'template' => 'c-marketing-body1-footer',
503 'addmenu' => 1,
504 'class' => '',
505 'target' => '',
506 'group_read' => '*',
507 'meta_robots' => 'index,follow',
508 'seo_image_id' => 0,
509 'data' => '',
510 'modules' => '',
511 'thesar' => '',
512 'hero_template' => 'none',
513 'hero_image_id' => 'none',
514 'hero_margin_top' => '0',
515 'hero_height' => 'parent',
516 'hero_variant' => 'parent',
517 'gallery_template' => '',
518 'gallery_visible_count' => '',
519 'gallery_image_size' => '',
520 'gallery_overflow' => '',
521 'gallery_click_behavior' => '',
522 'hero_sticky' => '0',
523 'hero_scroll_layer' => 'under',
524 'gallery_lightbox_width' => 'parent',
525 'lng_sync' => 'auto',
526 'lng_rev' => 1,
527 'lng_synced_rev' => 0,
528);
529
531 2 => array('name' => 'Lösungen', 'parent_id' => 1, 'group_read' => '*', 'sorter' => '0010'),
532 3 => array('name' => 'Entwickler', 'parent_id' => 1, 'group_read' => '*', 'sorter' => '0030'),
533 11 => array('name' => 'Plattform', 'parent_id' => 1, 'group_read' => '*', 'sorter' => '0020'),
534 12 => array('name' => 'Archiv: Beispiele', 'parent_id' => $trashId, 'group_read' => 'admin'),
535 15 => array('name' => 'Dokumentation und Tutorials', 'parent_id' => 9, 'group_read' => '*'),
536 18 => array('name' => 'Archiv: Pakete', 'parent_id' => $trashId, 'group_read' => 'admin'),
537 19 => array('name' => 'trash', 'parent_id' => 0, 'group_read' => 'admin'),
538);
539
540$result = array(
541 'mode' => $apply ? 'apply' : 'dry-run',
542 'language' => 'de',
543 'backup' => '',
544 'folders_planned' => count($folderChanges),
545 'archive_pages_planned' => count($archiveIds),
546 'target_pages_planned' => count($pages) + 1,
547 'created' => 0,
548 'updated' => 0,
549 'archived' => 0,
550 'documentation_noindex' => 0,
551);
552
553if (!$apply) {
554 echo json_encode($result, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . PHP_EOL;
555 exit(0);
556}
557
558$dbFile = $base . '/dbx/modules/dbx/db/dbxContent.db3';
559if (!is_file($dbFile) || (int)filesize($dbFile) <= 0) {
560 fwrite(STDERR, "Content-Datenbank nicht gefunden: {$dbFile}\n");
561 exit(1);
562}
563$backupDir = dirname($dbFile) . '/backup';
564if (!is_dir($backupDir) && !mkdir($backupDir, 0775, true) && !is_dir($backupDir)) {
565 fwrite(STDERR, "Backup-Verzeichnis konnte nicht angelegt werden.\n");
566 exit(1);
567}
568$backupFile = $backupDir . '/dbxContent-before-marketing-de-' . date('Ymd-His') . '.db3';
569if (!copy($dbFile, $backupFile)) {
570 fwrite(STDERR, "Datenbank-Backup konnte nicht erstellt werden.\n");
571 exit(1);
572}
574
575if ($db->begin($contentDd) !== 1) {
576 fwrite(STDERR, "Die dbxDB-Transaktion konnte nicht gestartet werden.\nBackup: {$backupFile}\n");
577 exit(1);
578}
579
580try {
581 $trash = $db->select1($folderDd, $trashId, 'id,name', 0);
582 if (!is_array($trash) || (int)($trash['id'] ?? 0) !== $trashId) {
583 throw new RuntimeException('Der deutsche Ordner /trash mit ID 19 fehlt.');
584 }
585
586 foreach ($folderChanges as $id => $changes) {
587 if ($db->update($folderDd, $changes, (int)$id, 0) !== 1) {
588 throw new RuntimeException("Ordner {$id} konnte nicht aktualisiert werden.");
589 }
590 $result['updated']++;
591 }
592
593 foreach ($archiveIds as $id) {
594 $source = $db->select1($contentDd, $id, 'id,title,permalink', 0);
595 if (!is_array($source) || (int)($source['id'] ?? 0) !== $id) {
596 throw new RuntimeException("Archivquelle content_de#{$id} fehlt.");
597 }
598 if ($db->update($contentDd, array(
599 'folder' => $trashId,
600 'activ' => 0,
601 'addmenu' => 0,
602 'group_read' => 'admin',
603 'meta_robots' => 'noindex,nofollow',
604 ), $id, 0) !== 1) {
605 throw new RuntimeException("Seite content_de#{$id} konnte nicht nach /trash verschoben werden.");
606 }
607 $result['archived']++;
608 }
609
610 $homeRow = $db->select1($contentDd, 1, 'id,lng_rev', 0);
611 if (!is_array($homeRow) || (int)($homeRow['id'] ?? 0) !== 1) {
612 throw new RuntimeException('Die konfigurierte deutsche Startseite content_de#1 fehlt.');
613 }
614 $homeUpdate = array_merge($basePage, $home, array(
615 'folder' => 11,
616 'permalink' => 'home',
617 'sorter' => '0000',
618 'addmenu' => 0,
619 'lng_rev' => max(1, (int)($homeRow['lng_rev'] ?? 1)) + 1,
620 ));
621 unset($homeUpdate['lng_synced_rev']);
622 if ($db->update($contentDd, $homeUpdate, 1, 0) !== 1) {
623 throw new RuntimeException('Die deutsche Startseite konnte nicht aktualisiert werden.');
624 }
625 $result['updated']++;
626
627 foreach ($pages as $page) {
628 $permalink = (string)$page['permalink'];
629 $existing = $db->select1($contentDd, array('permalink' => $permalink), 'id,lng_uid,lng_rev', 0);
630 $record = array_merge($basePage, $page);
631 if (is_array($existing) && (int)($existing['id'] ?? 0) > 0) {
632 $id = (int)$existing['id'];
633 $record['lng_rev'] = max(1, (int)($existing['lng_rev'] ?? 1)) + 1;
634 unset($record['lng_synced_rev']);
635 if ($db->update($contentDd, $record, $id, 0) !== 1) {
636 throw new RuntimeException("Zielseite {$permalink} konnte nicht aktualisiert werden.");
637 }
638 $result['updated']++;
639 continue;
640 }
641
642 $record['lng_uid'] = dbxContentLngSync::newUid('p');
643 if ($db->insert($contentDd, $record, 0, 1, 0, 1) !== 1 || (int)$db->get_insert_id() <= 0) {
644 throw new RuntimeException("Zielseite {$permalink} konnte nicht angelegt werden.");
645 }
646 $result['created']++;
647 }
648
651 'folder IN (10,15)',
652 'id',
653 'id',
654 'ASC',
655 '',
656 0,
657 0,
658 0
659 );
660 foreach (is_array($documentationRows) ? $documentationRows : array() as $row) {
661 $id = (int)($row['id'] ?? 0);
662 if ($id <= 0) {
663 continue;
664 }
665 if ($db->update($contentDd, array(
666 'meta_robots' => 'noindex,follow',
667 'addmenu' => 0,
668 ), $id, 0) !== 1) {
669 throw new RuntimeException("Dokumentationsseite content_de#{$id} konnte nicht auf noindex gesetzt werden.");
670 }
671 $result['documentation_noindex']++;
672 }
673
674 foreach (array(
675 33 => array('title' => 'DataDic Übersicht'),
676 41 => array('title' => 'Sprachen & Übersetzung — Benutzerhandbuch'),
677 55 => array('addmenu' => 0),
678 ) as $id => $changes) {
679 if ($db->update($contentDd, $changes, $id, 0) !== 1) {
680 throw new RuntimeException("Deutsche Seite content_de#{$id} konnte nicht bereinigt werden.");
681 }
682 $result['updated']++;
683 }
684
685 if ($db->commit($contentDd) !== 1) {
686 throw new RuntimeException('Die dbxDB-Transaktion konnte nicht abgeschlossen werden.');
687 }
688} catch (Throwable $e) {
689 $db->rollback($contentDd);
690 fwrite(STDERR, $e->getMessage() . "\nBackup: {$backupFile}\n");
691 exit(1);
692}
693
694$cacheStats = dbxContentPageCache::invalidateAll();
695dbxContentSitemap::invalidate();
697
698$activeTargets = array('home');
699foreach ($pages as $page) {
700 $activeTargets[] = (string)$page['permalink'];
701}
702$targetRows = array();
703foreach ($activeTargets as $permalink) {
704 $row = $db->select1(
706 array('permalink' => $permalink),
707 'id,permalink,title,folder,activ,meta_robots',
708 0
709 );
710 if (is_array($row)
711 && (int)($row['id'] ?? 0) > 0
712 && (int)($row['activ'] ?? 0) === 1
713 && (string)($row['meta_robots'] ?? '') === 'index,follow') {
714 $targetRows[] = $row;
715 }
716}
717$result['verified_targets'] = count($targetRows);
718$result['verified_total_de'] = (int)$db->count($contentDd, '1=1');
719
720echo json_encode($result, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . PHP_EOL;
Zentrale Datenbank- und DD-Systemklasse von DBX.
$_SERVER['REQUEST_METHOD']
foreach($targets as $permalink) $archiveIds
foreach($archiveIds as $id) $trash
exit
Definition index.php:146
DBX schema administration.
if(!is_array($trash)||(int)($trash['id'] ?? 0) !==$trashId) foreach( $folderChanges as $id=> $changes) foreach($archiveIds as $id) $homeRow
foreach(is_array( $documentationRows) ? $documentationRows :array() as $row) foreach(array(33=> array('title'=> 'DataDic Übersicht'), 41=> array('title'=> 'Sprachen &Übersetzung — Benutzerhandbuch'), 55=> array('addmenu'=> 0),) as $id=> $changes) if( $db->commit( $contentDd) !==1) catch(Throwable $e $cacheStats)
if(!is_object($db)||! $db->connect_db_server('dbx|dbxContent.db3')) $trashId
if(PHP_SAPI !=='cli') $apply
if(!is_array($homeRow)||(int)($homeRow['id'] ?? 0) !==1) $homeUpdate
foreach($pages as $page) $targetRows
foreach($pages as $page) $documentationRows
if($cinematic===''||!str_contains($cinematic, 'data-dbx-cinema')) $page