<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://mediawiki.wissen-ahrensburg.de/index.php?action=history&amp;feed=atom&amp;title=CMS%2FErstes-Wiki</id>
	<title>CMS/Erstes-Wiki - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.wissen-ahrensburg.de/index.php?action=history&amp;feed=atom&amp;title=CMS%2FErstes-Wiki"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.wissen-ahrensburg.de/index.php?title=CMS/Erstes-Wiki&amp;action=history"/>
	<updated>2026-08-19T16:54:34Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Dokument</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://mediawiki.wissen-ahrensburg.de/index.php?title=CMS/Erstes-Wiki&amp;diff=212&amp;oldid=prev</id>
		<title>imported&gt;Import: Version 137</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.wissen-ahrensburg.de/index.php?title=CMS/Erstes-Wiki&amp;diff=212&amp;oldid=prev"/>
		<updated>2026-01-13T12:11:33Z</updated>

		<summary type="html">&lt;p&gt;Version 137&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).&amp;#039;&amp;#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Das Vorhaben, ein eigenes CMS auf Basis von ASP.NET Core MVC zu entwickeln, das sich an etablierten Systemen wie MediaWiki, TYPO3, Drupal, XWiki, wiki.js oder Bookstack orientiert, ist anspruchsvoll, aber ein hervorragendes Projekt. ASP.NET Core eignet sich aufgrund seiner Performance und modularen Architektur ideal dafür.&lt;br /&gt;
&lt;br /&gt;
== Das Kernkonzept: Trennung von Inhalten und Darstellung ==&lt;br /&gt;
&lt;br /&gt;
Das System trennt – wie auch andere bekannte Content-Management-Systeme (CMS) – die Inhalte (Texte) von der Darstellung (Layout, Design, Templates). Dadurch können Inhalte unabhängig vom Aussehen gepflegt und wiederverwendet werden.&lt;br /&gt;
&lt;br /&gt;
Datenspeicherung: Markdown-Inhalte sollen in der Datenbank gespeichert und in einem anderen Feld sofort als HTML gerendert werden (EF Core).&lt;br /&gt;
&lt;br /&gt;
Verarbeitung: Ein Service, der Markdown in HTML umwandelt (z. B. mit der Bibliothek Markdig).&lt;br /&gt;
&lt;br /&gt;
Rendering: ASP.NET Core MVC-Views, die das generierte HTML in ein Layout einbetten.&lt;br /&gt;
&lt;br /&gt;
== Die technische Architektur (Schritt für Schritt) ==&lt;br /&gt;
&lt;br /&gt;
=== Routing &amp;amp;amp; Dynamische Seiten ===&lt;br /&gt;
&lt;br /&gt;
Dein CMS kennt die URLs nicht im Voraus. Du brauchst einen Catch-all Route Handler, der alle Anfragen außer statischen Dateien abfängt.&lt;br /&gt;
&lt;br /&gt;
==== Catch-all Route ====&lt;br /&gt;
&lt;br /&gt;
In ASP.NET Core MVC bezeichnet eine “Catch-all Route” eine Routing-Regel, die alle Anfragen abfängt, die nicht explizit durch andere Routen definiert sind. Sie wird häufig verwendet, um dynamische Seiten oder ein CMS zu realisieren, bei dem die URLs nicht im Voraus bekannt sind.&lt;br /&gt;
&lt;br /&gt;
Beispiel in C#:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;app.MapControllerRoute(&lt;br /&gt;
    name: &amp;amp;quot;cms&amp;amp;quot;,&lt;br /&gt;
    pattern: &amp;amp;quot;{*slug}&amp;amp;quot;,&lt;br /&gt;
    defaults: new { controller = &amp;amp;quot;Page&amp;amp;quot;, action = &amp;amp;quot;Index&amp;amp;quot; });&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hierbei fängt die Route alle Pfade ab (“{*slug}”) und leitet sie an den Controller “Page” und die Action “Index” weiter. So können beliebige URLs verarbeitet werden, z.B. für Wiki- oder CMS-Seiten.&lt;br /&gt;
&lt;br /&gt;
=== Controller ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;using Microsoft.AspNetCore.Mvc;&lt;br /&gt;
&lt;br /&gt;
public class PageController : Controller&lt;br /&gt;
{&lt;br /&gt;
    public IActionResult Index(string slug)&lt;br /&gt;
    {&lt;br /&gt;
        if (string.IsNullOrEmpty(slug))&lt;br /&gt;
        {&lt;br /&gt;
            ViewBag.Title = &amp;amp;quot;Startseite&amp;amp;quot;;&lt;br /&gt;
            ViewBag.Content = &amp;amp;quot;Willkommen auf der Startseite!&amp;amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            // Slug in Segmente (Unterseiten) aufteilen&lt;br /&gt;
            var segmente = slug.Split(&amp;#039;/&amp;#039;, StringSplitOptions.RemoveEmptyEntries);&lt;br /&gt;
&lt;br /&gt;
            // Beispiel: Titel aus letztem Segment, Pfad anzeigen&lt;br /&gt;
            ViewBag.Title = segmente.Last();&lt;br /&gt;
            ViewBag.Path = string.Join(&amp;amp;quot; → &amp;amp;quot;, segmente);&lt;br /&gt;
            ViewBag.Content = $&amp;amp;quot;Inhalt für die Seite: {slug}&amp;amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return View();&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>imported&gt;Import</name></author>
	</entry>
</feed>