Kant CMS: Grundgerüst, visueller Editor, Mediathek

Symfony 7.4 / Twig / Doctrine DBAL auf herkömmlichem PHP-Webhosting.
Versionierte Blockdokumente (v1-v3) mit unveränderlichen Revisionen,
getrennten Entwürfen/Veröffentlichungen und optimistischer
Konflikterkennung. Visueller Editor mit Strukturbaum, Live-Vorschau,
responsiven Gerätewerten, Abschnittsvorlagen, Bildmediathek,
Galerien und Effekten. Öffentliche Ausgabe ohne Editor-JavaScript.

Geprüft: 41 PHP-Tests / 155 Assertions, 10 JavaScript-Modelltests.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
kantarciandClaude Opus 5 committed 2026-09-12 10:19:05 +02:00
commit 82b07820bc
87 files changed
+14463

No files matched your search

+21
View File
@@ -0,0 +1,21 @@
{% extends 'admin/base.html.twig' %}
{% block title %}Anmelden{% endblock %}
{% block body_class %}login-body{% endblock %}
{% block body %}
<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>
<p class="eyebrow">DEIN RAUM ZUM GESTALTEN</p>
<h1>Willkommen zurück.</h1>
<p class="muted">Melde dich an, um deine Seiten zu bearbeiten.</p>
{% if error %}<p class="notice error" role="alert">Anmeldung fehlgeschlagen. Prüfe deine Zugangsdaten und versuche es erneut. Nach mehreren Versuchen bitte eine Minute warten.</p>{% endif %}
<form method="post" action="{{ path('admin_login') }}">
<label for="username">Benutzername</label>
<input id="username" name="_username" value="{{ username }}" autocomplete="username" required maxlength="100" autofocus>
<label for="password">Passwort</label>
<input id="password" name="_password" type="password" autocomplete="current-password" required>
<input type="hidden" name="_csrf_token" value="{{ csrf_token('authenticate') }}">
<button class="primary full-width" type="submit">Anmelden <span aria-hidden="true">→</span></button>
</form>
<a class="quiet-link" href="/">Zur öffentlichen Website</a>
</main>
{% endblock %}