Das System heißt KantSites
Umut hat den Namen festgelegt: aus dem Arbeitstitel "Kant CMS" wird KantSites. Geändert in allen Seitentiteln der Verwaltung, im Wortmarken-Schriftzug von Anmeldung und Seitenleiste, in den Fußzeilen, in den Demoinhalten für eine frische Installation, in package.json, .claude/launch.json und der Dokumentation. Die Bezeichnung der Website in der Datenbank heißt jetzt ebenfalls KantSites. Nicht angefasst: die bereits gespeicherten Demoinhalte der lokalen Installation. Titel wie "Die Grundlage · Kant CMS" und der Text im Kopfbereich sind Inhalt, nicht Systemname - die gehören in den Editor, nicht in ein Skript, das Revisionen umschreibt. 219 PHP-Tests / 881 Assertions grün, Playwright-Editortest grün. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
68380c6295
commit
84d471acd9
25 files changed
+35
-35
No files matched your search
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"configurations": [
|
"configurations": [
|
||||||
{
|
{
|
||||||
"name": "kant-cms",
|
"name": "kantsites",
|
||||||
"runtimeExecutable": "php",
|
"runtimeExecutable": "php",
|
||||||
"runtimeArgs": [
|
"runtimeArgs": [
|
||||||
"-d",
|
"-d",
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
# Eigenes CMS – Entwicklungsplan
|
# Eigenes CMS – Entwicklungsplan
|
||||||
|
|
||||||
Stand: 11.09.2026. Status: Planung; noch keine CMS-Implementierung und kein Repository eingerichtet.
|
Stand: 11.09.2026. Status: Planung; noch keine CMS-Implementierung und kein Repository eingerichtet.
|
||||||
Arbeitstitel: Kant CMS. Der Produktname ist noch offen.
|
Arbeitstitel: KantSites. Der Produktname ist noch offen.
|
||||||
|
|
||||||
## Ziel
|
## Ziel
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Kant CMS
|
# KantSites
|
||||||
|
|
||||||
Lokaler CMS-Prototyp für PHP-Webhosting mit erstem visuellen Editor. Symfony 7.4, Twig, Doctrine DBAL/Migrations; SQLite lokal, MySQL/MariaDB als Hostingziel. Drei gespeicherte Beispielseiten werden ohne JavaScript als HTML ausgeliefert. Anmeldung, geschützte Bearbeitung und getrennte Veröffentlichung sind implementiert; weitere Layoutwerkzeuge folgen.
|
Lokaler CMS-Prototyp für PHP-Webhosting mit erstem visuellen Editor. Symfony 7.4, Twig, Doctrine DBAL/Migrations; SQLite lokal, MySQL/MariaDB als Hostingziel. Drei gespeicherte Beispielseiten werden ohne JavaScript als HTML ausgeliefert. Anmeldung, geschützte Bearbeitung und getrennte Veröffentlichung sind implementiert; weitere Layoutwerkzeuge folgen.
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Architekturentscheidungen
|
# Architekturentscheidungen
|
||||||
|
|
||||||
Stand: 12.09.2026. Arbeitstitel Kant CMS; Produktname offen.
|
Stand: 12.09.2026. Arbeitstitel KantSites; Produktname offen.
|
||||||
|
|
||||||
## ADR 001 – PHP-Webhosting, Symfony 7.4
|
## ADR 001 – PHP-Webhosting, Symfony 7.4
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -235,7 +235,7 @@ Der lokale Benutzer `umut` wurde getrennt von den Tests auf ausdrücklichen Nutz
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Datum: 12.09.2026. Ziel: `http://127.0.0.1:8080/`. Diese Messung betrifft ausschließlich die lokale Kant-CMS-Demoseite, keine bestehende Kundenwebsite und nicht `kant-it.de`.
|
Datum: 12.09.2026. Ziel: `http://127.0.0.1:8080/`. Diese Messung betrifft ausschließlich die lokale KantSites-Demoseite, keine bestehende Kundenwebsite und nicht `kant-it.de`.
|
||||||
|
|
||||||
## Tatsächlich ausgeführte Prüfungen
|
## Tatsächlich ausgeführte Prüfungen
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
# Projektstatus
|
# Projektstatus
|
||||||
|
|
||||||
Stand: 12.09.2026. Arbeitstitel Kant CMS. **Benutzerverwaltung in der Oberfläche, Mediathek als eigene Seite mit Blättern. Die Verwaltung hat einen gemeinsamen Rahmen mit einer Navigation, die zeigt, wo man ist. Eigenes CSS je Element für alle, eigenes Skript nur für Administratoren und nur als eigene Datei. Formatierter Text mit Werkzeugleiste und HTML-Ansicht, serverseitig gegen eine Positivliste gefiltert. Kopf- und Fußbereich sind frei gestaltbare Blockdokumente, dazu verknüpfte wiederverwendbare Sektionen (Arbeitspaket G, Teil 1). Frei wählbare Startseite; `/sitemap.xml` und Geschwister waren lokal nie erreichbar und sind es jetzt. Seiten verschieben mit automatischen Weiterleitungen, Papierkorb, Fassungsverlauf und geplante Veröffentlichung (Arbeitspaket F). Browsertests wiederhergestellt und erweitert; dabei drei echte Fehler gefunden und behoben, darunter die in der Vorschau wirkungslose Gestaltung. Direktbearbeitung in der Vorschau, Kontrastwarnung, Gestaltungsvorlagen und Bildauswahl für Hintergrundbilder. Der Editor gestaltet frei statt über feste Auswahllisten: eigene Farbpalette, Schriften, und jede Eigenschaft je Block, je Gerät und für den Hover-Zustand frei einstellbar (Dokumentschema v10). SEO-Grundlage mit Sitemap, robots.txt, Weiterleitungen und strukturierten Daten (Arbeitspaket E). Formulare mit serverseitiger Validierung, Einwilligung, E-Mail-Versand und Spamschutz (Arbeitspaket D). Tabs als fortschreitende Verbesserung mit JavaScript (Dokumentschema v7). Zehn neue Blöcke für die Abschnitte der Pilotstartseite (Arbeitspaket C). Beiträge mit Datum, Autor, Auszug, Beitragsbild, Kategorien, Schlagwörtern, Archiven, einbettbarer Beitragsliste und RSS (Arbeitspaket B). Menüs mit Seiten-, Anker- und externen Zielen ersetzen die fest verdrahtete Navigation (Arbeitspaket A). Seiten und Beiträge lassen sich im Browser anlegen und löschen, mit Adresshierarchie bis vier Ebenen.** Die vollständige Phase-1-Abnahme bleibt wegen des fehlenden UX-Builder-Referenzabgleichs offen.
|
Stand: 12.09.2026. Das System heißt **KantSites** (vorher Arbeitstitel „Kant CMS“). **Benutzerverwaltung in der Oberfläche, Mediathek als eigene Seite mit Blättern. Die Verwaltung hat einen gemeinsamen Rahmen mit einer Navigation, die zeigt, wo man ist. Eigenes CSS je Element für alle, eigenes Skript nur für Administratoren und nur als eigene Datei. Formatierter Text mit Werkzeugleiste und HTML-Ansicht, serverseitig gegen eine Positivliste gefiltert. Kopf- und Fußbereich sind frei gestaltbare Blockdokumente, dazu verknüpfte wiederverwendbare Sektionen (Arbeitspaket G, Teil 1). Frei wählbare Startseite; `/sitemap.xml` und Geschwister waren lokal nie erreichbar und sind es jetzt. Seiten verschieben mit automatischen Weiterleitungen, Papierkorb, Fassungsverlauf und geplante Veröffentlichung (Arbeitspaket F). Browsertests wiederhergestellt und erweitert; dabei drei echte Fehler gefunden und behoben, darunter die in der Vorschau wirkungslose Gestaltung. Direktbearbeitung in der Vorschau, Kontrastwarnung, Gestaltungsvorlagen und Bildauswahl für Hintergrundbilder. Der Editor gestaltet frei statt über feste Auswahllisten: eigene Farbpalette, Schriften, und jede Eigenschaft je Block, je Gerät und für den Hover-Zustand frei einstellbar (Dokumentschema v10). SEO-Grundlage mit Sitemap, robots.txt, Weiterleitungen und strukturierten Daten (Arbeitspaket E). Formulare mit serverseitiger Validierung, Einwilligung, E-Mail-Versand und Spamschutz (Arbeitspaket D). Tabs als fortschreitende Verbesserung mit JavaScript (Dokumentschema v7). Zehn neue Blöcke für die Abschnitte der Pilotstartseite (Arbeitspaket C). Beiträge mit Datum, Autor, Auszug, Beitragsbild, Kategorien, Schlagwörtern, Archiven, einbettbarer Beitragsliste und RSS (Arbeitspaket B). Menüs mit Seiten-, Anker- und externen Zielen ersetzen die fest verdrahtete Navigation (Arbeitspaket A). Seiten und Beiträge lassen sich im Browser anlegen und löschen, mit Adresshierarchie bis vier Ebenen.** Die vollständige Phase-1-Abnahme bleibt wegen des fehlenden UX-Builder-Referenzabgleichs offen.
|
||||||
|
|
||||||
Erster Commit angelegt (`82b0782`); das Projekt hat damit einen Rückfallpunkt. Noch kein Remote und kein Push.
|
Erster Commit angelegt (`82b0782`); das Projekt hat damit einen Rückfallpunkt. Noch kein Remote und kein Push.
|
||||||
|
|
||||||
|
|||||||
Generated
+2
-2
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"name": "kant-cms-quality",
|
"name": "kantsites-quality",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "kant-cms-quality",
|
"name": "kantsites-quality",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@axe-core/playwright": "^4.10.0",
|
"@axe-core/playwright": "^4.10.0",
|
||||||
"lighthouse": "^13.0.0",
|
"lighthouse": "^13.0.0",
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "kant-cms-quality",
|
"name": "kantsites-quality",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ final class SeedDemoCommand extends Command
|
|||||||
{
|
{
|
||||||
$this->db->transactional(function () use ($output): void {
|
$this->db->transactional(function () use ($output): void {
|
||||||
if (!$this->db->fetchOne('SELECT id FROM website WHERE id = ?', ['default'])) {
|
if (!$this->db->fetchOne('SELECT id FROM website WHERE id = ?', ['default'])) {
|
||||||
$this->db->insert('website', ['id' => 'default', 'name' => 'Kant CMS', 'default_locale' => 'de', 'theme' => json_encode(['template' => 'kant-starter', 'version' => 1])]);
|
$this->db->insert('website', ['id' => 'default', 'name' => 'KantSites', 'default_locale' => 'de', 'theme' => json_encode(['template' => 'kant-starter', 'version' => 1])]);
|
||||||
}
|
}
|
||||||
foreach (DemoContent::pages() as $slug => $document) {
|
foreach (DemoContent::pages() as $slug => $document) {
|
||||||
if ($this->db->fetchOne('SELECT id FROM page WHERE website_id = ? AND locale = ? AND slug = ?', ['default', 'de', $slug])) {
|
if ($this->db->fetchOne('SELECT id FROM page WHERE website_id = ? AND locale = ? AND slug = ?', ['default', 'de', $slug])) {
|
||||||
|
|||||||
@@ -9,11 +9,11 @@ final class DemoContent
|
|||||||
return [
|
return [
|
||||||
'home' => [
|
'home' => [
|
||||||
'schemaVersion' => 1,
|
'schemaVersion' => 1,
|
||||||
'title' => 'Kant CMS · Raum für deine Website',
|
'title' => 'KantSites · Raum für deine Website',
|
||||||
'description' => 'Ein eigenes CMS für individuelle Kundenwebsites. Entdecke die technische Grundlage für strukturierte Inhalte, schnelle Seiten und einen visuellen Editor.',
|
'description' => 'Ein eigenes CMS für individuelle Kundenwebsites. Entdecke die technische Grundlage für strukturierte Inhalte, schnelle Seiten und einen visuellen Editor.',
|
||||||
'blocks' => [
|
'blocks' => [
|
||||||
self::section('hero', [
|
self::section('hero', [
|
||||||
self::text('eyebrow', 'KANT CMS / DER ANFANG IST GEMACHT'),
|
self::text('eyebrow', 'KANTSITES / DER ANFANG IST GEMACHT'),
|
||||||
self::heading('headline', 'Deine Inhalte.\nDein Gestaltungsspielraum.', 1),
|
self::heading('headline', 'Deine Inhalte.\nDein Gestaltungsspielraum.', 1),
|
||||||
self::text('intro', 'Eine Website sollte zu dir passen. Wir entwickeln die Grundlage dafür: klar strukturierte Inhalte, unabhängiges Hosting und einen Editor, der Gestaltung einfach macht.'),
|
self::text('intro', 'Eine Website sollte zu dir passen. Wir entwickeln die Grundlage dafür: klar strukturierte Inhalte, unabhängiges Hosting und einen Editor, der Gestaltung einfach macht.'),
|
||||||
self::button('discover', 'Die Grundlage entdecken', '/grundlagen'),
|
self::button('discover', 'Die Grundlage entdecken', '/grundlagen'),
|
||||||
@@ -30,18 +30,18 @@ final class DemoContent
|
|||||||
self::section('next', [
|
self::section('next', [
|
||||||
self::text('next-label', '02 / VON DER GRUNDLAGE ZUM WERKZEUG'),
|
self::text('next-label', '02 / VON DER GRUNDLAGE ZUM WERKZEUG'),
|
||||||
self::heading('next-heading', 'Schritt für Schritt.\nMit einem klaren Ziel.', 2),
|
self::heading('next-heading', 'Schritt für Schritt.\nMit einem klaren Ziel.', 2),
|
||||||
self::text('next-text', 'Diese Seite ist der erste technische Prototyp von Kant CMS. Als Nächstes entsteht der visuelle Editor mit Strukturbaum, Vorschau und Eigenschaften. Das fertige CMS wächst an einer echten Pilotwebsite.'),
|
self::text('next-text', 'Diese Seite ist der erste technische Prototyp von KantSites. Als Nächstes entsteht der visuelle Editor mit Strukturbaum, Vorschau und Eigenschaften. Das fertige CMS wächst an einer echten Pilotwebsite.'),
|
||||||
self::button('progress', 'Den Projektstand ansehen', '/projektstand'),
|
self::button('progress', 'Den Projektstand ansehen', '/projektstand'),
|
||||||
], 'ink'),
|
], 'ink'),
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
'grundlagen' => self::article('Die Grundlage · Kant CMS', 'Wie Kant CMS Inhalte als Blöcke speichert und Seiten als HTML ausliefert.', 'Ein Fundament für\nveränderbare Websites.', [
|
'grundlagen' => self::article('Die Grundlage · KantSites', 'Wie KantSites Inhalte als Blöcke speichert und Seiten als HTML ausliefert.', 'Ein Fundament für\nveränderbare Websites.', [
|
||||||
['Inhalte mit Struktur', 'Eine Seite besteht aus einem versionierten Dokument. Sektionen, Zeilen und Spalten ordnen Überschriften, Texte, Bilder und Links. Jeder Block hat eine stabile Kennung. Text wird bei der Ausgabe automatisch maskiert; frei ausführbares HTML ist kein Inhaltsformat.'],
|
['Inhalte mit Struktur', 'Eine Seite besteht aus einem versionierten Dokument. Sektionen, Zeilen und Spalten ordnen Überschriften, Texte, Bilder und Links. Jeder Block hat eine stabile Kennung. Text wird bei der Ausgabe automatisch maskiert; frei ausführbares HTML ist kein Inhaltsformat.'],
|
||||||
['Ein Entwurf bleibt ein Entwurf', 'Speichern erzeugt einen eigenen Stand. Die öffentliche Route liest ausschließlich die veröffentlichte Revision. Veraltete Schreibstände werden abgewiesen, damit eine ältere Bearbeitung neue Inhalte nicht unbemerkt überschreibt.'],
|
['Ein Entwurf bleibt ein Entwurf', 'Speichern erzeugt einen eigenen Stand. Die öffentliche Route liest ausschließlich die veröffentlichte Revision. Veraltete Schreibstände werden abgewiesen, damit eine ältere Bearbeitung neue Inhalte nicht unbemerkt überschreibt.'],
|
||||||
['PHP-Webhosting als Ziel', 'Der Prototyp nutzt Symfony, Twig und Doctrine. Die lokale Installation verwendet SQLite. Für den späteren Hostingbetrieb ist MySQL oder MariaDB vorgesehen. Der öffentlich erreichbare Dokumentenstamm ist ausschließlich das Verzeichnis public.'],
|
['PHP-Webhosting als Ziel', 'Der Prototyp nutzt Symfony, Twig und Doctrine. Die lokale Installation verwendet SQLite. Für den späteren Hostingbetrieb ist MySQL oder MariaDB vorgesehen. Der öffentlich erreichbare Dokumentenstamm ist ausschließlich das Verzeichnis public.'],
|
||||||
['Qualität von Anfang an', 'Semantische Elemente, sichtbarer Tastaturfokus und ein Sprunglink sind bereits Teil der Ausgabe. Automatische Prüfungen begleiten die Entwicklung. Belastbare Qualitätswerte für Kundenwebsites benötigen repräsentative Inhalte und Messungen auf dem tatsächlichen Hosting.'],
|
['Qualität von Anfang an', 'Semantische Elemente, sichtbarer Tastaturfokus und ein Sprunglink sind bereits Teil der Ausgabe. Automatische Prüfungen begleiten die Entwicklung. Belastbare Qualitätswerte für Kundenwebsites benötigen repräsentative Inhalte und Messungen auf dem tatsächlichen Hosting.'],
|
||||||
]),
|
]),
|
||||||
'projektstand' => self::article('Projektstand · Kant CMS', 'Der aktuelle Entwicklungsstand von Kant CMS und die nächsten Schritte zum visuellen Editor.', 'Der erste Schritt\nist eine solide Basis.', [
|
'projektstand' => self::article('Projektstand · KantSites', 'Der aktuelle Entwicklungsstand von KantSites und die nächsten Schritte zum visuellen Editor.', 'Der erste Schritt\nist eine solide Basis.', [
|
||||||
['Jetzt: technische Grundlage', 'Projektregeln und Entwicklungsplan sind abgelegt. Das Grundgerüst speichert Seiten in einer Datenbank und liefert veröffentlichte Blockdokumente als HTML aus. Diese Demonstrationsinhalte gehören zum Prototyp; sie sind keine Kundenwebsite.'],
|
['Jetzt: technische Grundlage', 'Projektregeln und Entwicklungsplan sind abgelegt. Das Grundgerüst speichert Seiten in einer Datenbank und liefert veröffentlichte Blockdokumente als HTML aus. Diese Demonstrationsinhalte gehören zum Prototyp; sie sind keine Kundenwebsite.'],
|
||||||
['Als Nächstes: visuell bearbeiten', 'Geplant sind eine Elementbibliothek, ein synchronisierter Strukturbaum, Live-Vorschau und ein Eigenschaftenpanel. Verschieben, Duplizieren, Löschen und Undo/Redo werden zusammen mit dem Speichern und Laden geprüft.'],
|
['Als Nächstes: visuell bearbeiten', 'Geplant sind eine Elementbibliothek, ein synchronisierter Strukturbaum, Live-Vorschau und ein Eigenschaftenpanel. Verschieben, Duplizieren, Löschen und Undo/Redo werden zusammen mit dem Speichern und Laden geprüft.'],
|
||||||
['Noch zu konkretisieren', 'Die Pilotwebsite, konkrete UX-Builder-Referenzen und die Ausstattung des PHP-Webhostings stehen noch aus. Anmeldung, Medienverwaltung, Formulare, Templates und Plugins folgen in den dafür vorgesehenen Ausbauschritten.'],
|
['Noch zu konkretisieren', 'Die Pilotwebsite, konkrete UX-Builder-Referenzen und die Ausstattung des PHP-Webhostings stehen noch aus. Anmeldung, Medienverwaltung, Formulare, Templates und Plugins folgen in den dafür vorgesehenen Ausbauschritten.'],
|
||||||
@@ -95,7 +95,7 @@ final class DemoContent
|
|||||||
'blocks' => [
|
'blocks' => [
|
||||||
self::section('area-header', [
|
self::section('area-header', [
|
||||||
$row('area-header-row', [
|
$row('area-header-row', [
|
||||||
$column('area-header-brand', [self::text('area-header-name', 'kant cms')]),
|
$column('area-header-brand', [self::text('area-header-name', 'kantsites')]),
|
||||||
$column('area-header-nav', [['id' => 'area-header-menu', 'type' => 'menu', 'props' => ['slot' => 'header']]]),
|
$column('area-header-nav', [['id' => 'area-header-menu', 'type' => 'menu', 'props' => ['slot' => 'header']]]),
|
||||||
]),
|
]),
|
||||||
]),
|
]),
|
||||||
@@ -119,7 +119,7 @@ final class DemoContent
|
|||||||
|
|
||||||
private static function article(string $title, string $description, string $heading, array $sections): array
|
private static function article(string $title, string $description, string $heading, array $sections): array
|
||||||
{
|
{
|
||||||
$blocks = [self::section('article-hero', [self::text('article-label', 'KANT CMS / ENTWICKLUNG'), self::heading('article-heading', $heading, 1)], 'mint')];
|
$blocks = [self::section('article-hero', [self::text('article-label', 'KANTSITES / ENTWICKLUNG'), self::heading('article-heading', $heading, 1)], 'mint')];
|
||||||
$children = [];
|
$children = [];
|
||||||
foreach ($sections as $i => [$label, $text]) {
|
foreach ($sections as $i => [$label, $text]) {
|
||||||
$children[] = self::heading('heading-'.$i, $label, 2);
|
$children[] = self::heading('heading-'.$i, $label, 2);
|
||||||
|
|||||||
@@ -39,5 +39,5 @@
|
|||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p class="footnote">Kant CMS · Arbeitsstand</p>
|
<p class="footnote">KantSites · Arbeitsstand</p>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<meta name="robots" content="noindex, nofollow">
|
<meta name="robots" content="noindex, nofollow">
|
||||||
<title>{% block title %}Verwaltung{% endblock %} · Kant CMS</title>
|
<title>{% block title %}Verwaltung{% endblock %} · KantSites</title>
|
||||||
<link rel="icon" href="/favicon.svg" type="image/svg+xml">
|
<link rel="icon" href="/favicon.svg" type="image/svg+xml">
|
||||||
<link rel="stylesheet" href="/assets/admin.css">
|
<link rel="stylesheet" href="/assets/admin.css">
|
||||||
{% block styles %}{% endblock %}
|
{% block styles %}{% endblock %}
|
||||||
|
|||||||
@@ -90,5 +90,5 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<p class="footnote">Kant CMS · Arbeitsstand</p>
|
<p class="footnote">KantSites · Arbeitsstand</p>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
{% block body_class %}login-body{% endblock %}
|
{% block body_class %}login-body{% endblock %}
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<main id="admin-main" class="login-card" tabindex="-1">
|
<main id="admin-main" class="login-card" tabindex="-1">
|
||||||
<a class="brand" href="/" aria-label="Kant CMS – öffentliche Website"><span class="brand-icon" aria-hidden="true">k.</span>kant<span>cms</span></a>
|
<a class="brand" href="/" aria-label="KantSites – öffentliche Website"><span class="brand-icon" aria-hidden="true">k.</span>kant<span>sites</span></a>
|
||||||
<p class="eyebrow">DEIN RAUM ZUM GESTALTEN</p>
|
<p class="eyebrow">DEIN RAUM ZUM GESTALTEN</p>
|
||||||
<h1>Willkommen zurück.</h1>
|
<h1>Willkommen zurück.</h1>
|
||||||
<p class="muted">Melde dich an, um deine Seiten zu bearbeiten.</p>
|
<p class="muted">Melde dich an, um deine Seiten zu bearbeiten.</p>
|
||||||
|
|||||||
@@ -91,5 +91,5 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<p class="footnote">Kant CMS · Arbeitsstand</p>
|
<p class="footnote">KantSites · Arbeitsstand</p>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@@ -52,5 +52,5 @@
|
|||||||
</form>
|
</form>
|
||||||
</section>
|
</section>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<p class="footnote">Kant CMS · Arbeitsstand</p>
|
<p class="footnote">KantSites · Arbeitsstand</p>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@@ -228,5 +228,5 @@
|
|||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<p class="footnote">Kant CMS · Arbeitsstand</p>
|
<p class="footnote">KantSites · Arbeitsstand</p>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@@ -70,5 +70,5 @@
|
|||||||
<div class="empty"><h3>Noch keine Bereiche.</h3><p>Ein frisches Setup legt Kopf- und Fußbereich automatisch an.</p></div>
|
<div class="empty"><h3>Noch keine Bereiche.</h3><p>Ein frisches Setup legt Kopf- und Fußbereich automatisch an.</p></div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
<p class="footnote">Kant CMS · Arbeitsstand</p>
|
<p class="footnote">KantSites · Arbeitsstand</p>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@@ -28,5 +28,5 @@
|
|||||||
<div class="empty"><h3>Noch keine Fassungen.</h3></div>
|
<div class="empty"><h3>Noch keine Fassungen.</h3></div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
<p class="footnote">Kant CMS · Arbeitsstand</p>
|
<p class="footnote">KantSites · Arbeitsstand</p>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@@ -108,5 +108,5 @@
|
|||||||
</table>
|
</table>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</section>
|
</section>
|
||||||
<p class="footnote">Kant CMS · Arbeitsstand</p>
|
<p class="footnote">KantSites · Arbeitsstand</p>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
{% block body_class %}admin-shell{% endblock %}
|
{% block body_class %}admin-shell{% endblock %}
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<header class="shell-nav">
|
<header class="shell-nav">
|
||||||
<a class="brand" href="{{ path('admin_pages') }}"><span class="brand-icon" aria-hidden="true">k.</span>kant<span>cms</span></a>
|
<a class="brand" href="{{ path('admin_pages') }}"><span class="brand-icon" aria-hidden="true">k.</span>kant<span>sites</span></a>
|
||||||
<nav aria-label="Verwaltung">
|
<nav aria-label="Verwaltung">
|
||||||
<p class="nav-label" id="nav-content">INHALT</p>
|
<p class="nav-label" id="nav-content">INHALT</p>
|
||||||
<ul class="nav-list" aria-labelledby="nav-content">
|
<ul class="nav-list" aria-labelledby="nav-content">
|
||||||
|
|||||||
@@ -105,5 +105,5 @@
|
|||||||
<p class="field-help">Farben entweder als <code>@schlüssel</code> aus der Palette oder als Wert wie <code>#1a2b3c</code>.</p>
|
<p class="field-help">Farben entweder als <code>@schlüssel</code> aus der Palette oder als Wert wie <code>#1a2b3c</code>.</p>
|
||||||
<button class="primary" type="submit">Design speichern</button>
|
<button class="primary" type="submit">Design speichern</button>
|
||||||
</form>
|
</form>
|
||||||
<p class="footnote">Kant CMS · Arbeitsstand</p>
|
<p class="footnote">KantSites · Arbeitsstand</p>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@@ -106,5 +106,5 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p class="footnote">Kant CMS · Arbeitsstand</p>
|
<p class="footnote">KantSites · Arbeitsstand</p>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html lang="de"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="robots" content="noindex"><title>Seite nicht gefunden · Kant CMS</title><link rel="stylesheet" href="/assets/site.css"><link rel="icon" href="/favicon.svg" type="image/svg+xml"></head>
|
<html lang="de"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="robots" content="noindex"><title>Seite nicht gefunden · KantSites</title><link rel="stylesheet" href="/assets/site.css"><link rel="icon" href="/favicon.svg" type="image/svg+xml"></head>
|
||||||
<body><main class="shell error-page"><p>404 · Kant CMS</p><h1>Hier ist noch keine Seite.</h1><p>Die Adresse existiert nicht oder die Seite ist noch nicht veröffentlicht.</p><a class="button" href="/">Zur Startseite</a></main></body></html>
|
<body><main class="shell error-page"><p>404 · KantSites</p><h1>Hier ist noch keine Seite.</h1><p>Die Adresse existiert nicht oder die Seite ist noch nicht veröffentlicht.</p><a class="button" href="/">Zur Startseite</a></main></body></html>
|
||||||
+3
-3
@@ -43,7 +43,7 @@ final class CmsTest extends TestCase
|
|||||||
$this->path = tempnam(sys_get_temp_dir(), 'kant-test-');
|
$this->path = tempnam(sys_get_temp_dir(), 'kant-test-');
|
||||||
$this->db = ConnectionFactory::create('sqlite:///'.str_replace('\\', '/', $this->path));
|
$this->db = ConnectionFactory::create('sqlite:///'.str_replace('\\', '/', $this->path));
|
||||||
TestSchema::build($this->db);
|
TestSchema::build($this->db);
|
||||||
$this->db->insert('website', ['id' => 'default', 'name' => 'Kant CMS', 'default_locale' => 'de', 'theme' => '{}']);
|
$this->db->insert('website', ['id' => 'default', 'name' => 'KantSites', 'default_locale' => 'de', 'theme' => '{}']);
|
||||||
foreach (['page-1' => 'home', 'page-2' => 'private'] as $id => $slug) {
|
foreach (['page-1' => 'home', 'page-2' => 'private'] as $id => $slug) {
|
||||||
$this->db->insert('page', ['id' => $id, 'slug' => $slug, 'path' => $slug, 'type' => 'page', 'locale' => 'de', 'website_id' => 'default', 'version' => 0, 'created_at' => gmdate('Y-m-d H:i:s')]);
|
$this->db->insert('page', ['id' => $id, 'slug' => $slug, 'path' => $slug, 'type' => 'page', 'locale' => 'de', 'website_id' => 'default', 'version' => 0, 'created_at' => gmdate('Y-m-d H:i:s')]);
|
||||||
}
|
}
|
||||||
@@ -1416,7 +1416,7 @@ final class CmsTest extends TestCase
|
|||||||
], 0);
|
], 0);
|
||||||
$html = $this->request('/')->getContent();
|
$html = $this->request('/')->getContent();
|
||||||
self::assertStringContainsString('<header class="site-header">', $html);
|
self::assertStringContainsString('<header class="site-header">', $html);
|
||||||
self::assertStringContainsString('<p id="area-header-name" class="block-text">kant cms</p>', $html);
|
self::assertStringContainsString('<p id="area-header-name" class="block-text">kantsites</p>', $html);
|
||||||
self::assertStringContainsString('aria-label="Hauptnavigation"', $html);
|
self::assertStringContainsString('aria-label="Hauptnavigation"', $html);
|
||||||
self::assertStringContainsString('>Start</a>', $html);
|
self::assertStringContainsString('>Start</a>', $html);
|
||||||
|
|
||||||
@@ -1427,7 +1427,7 @@ final class CmsTest extends TestCase
|
|||||||
$this->partials->save($header['id'], $document, $header['version']);
|
$this->partials->save($header['id'], $document, $header['version']);
|
||||||
foreach (['/', '/zweite'] as $path) {
|
foreach (['/', '/zweite'] as $path) {
|
||||||
self::assertStringContainsString('Neue Wortmarke', $this->request($path)->getContent(), $path);
|
self::assertStringContainsString('Neue Wortmarke', $this->request($path)->getContent(), $path);
|
||||||
self::assertStringNotContainsString('kant cms', $this->request($path)->getContent(), $path);
|
self::assertStringNotContainsString('kantsites', $this->request($path)->getContent(), $path);
|
||||||
}
|
}
|
||||||
|
|
||||||
// An emptied area renders nothing rather than leaving a broken shell behind.
|
// An emptied area renders nothing rather than leaving a broken shell behind.
|
||||||
|
|||||||
Reference in new issue
Block a user