Brandauer: eigenes CMS - Datenstruktur

Beitrag lesen

Hallo,

wie der Titel schon verrät, dreht sich die Frage um ein selbstgeschmiedetes CMS, welches sich in der ersten Entwicklungsphase befindet. Im Prinzip eine Art Webbaukasten. Warum das ganze? Weil der Kunde eine _sehr_ einfache Lösung für die Bearbeitung relativ simplen Contents haben will und ihm die gängigen Lösungen nicht gefallen haben, da zu kompliziert. Er will also mal einen Absatz verändern oder mal einen Listenpunkt hinzufügen, ohne Gefahr zu laufen, das Layout zu zerschiessen. Man kann davon halten, was man will.

Ich dachte mir, ich bau das gleich ein wenig aus und bastel mir ein System, welches Daten und Datenstruktur komplett trennt. An dieser Stelle möchte ich kurz meine Herangehensweise erläutern.

Oberste Prämisse ist die Datenreinheit. Es dürfen also in den Daten selbst (bis auf wenige Ausnahmen wie span, oder br im Fliesstext keine HTML-Elemente oder Attribute in den Daten vorliegen. Diese Daten werden als serialisierte Arrays oder als JSON in der DB gespeichert.

Es gibt ausserdem verschiedene Datenstrukturelemente, die die HTML-Struktur beschreiben und auf die die Daten später gemappt werden.

Ein kurzes Beispiel:

ein Datencontainer für ein p-Element _vor_ der Serialisierung:

  
$obje  
   'element_type' => "p",  
   'html_id' => "",  
   'html_class' => "standardAbsatz",  
   'html_style' => "color:red;",  
   'content' => "ein schöner Absatztext.",  
)  

gemappt werden diese Daten auf die folgende Struktur:

  
<p ID CLASS STYLE >  
{{content}}  
</p>  

Als HTML-Output würde dann, wie erwartet, folgendes zu sehen sein:

">  
<p class="standardAbsatz" style="color:red;">  
ein schöner Absatztext.</p>  

Konkret heisst das, jedes Datenelement wird serialisiert in einer DB gespeichert. Ein Absatz, eine Liste, ein Absatz mit Bild, etc.

Auf Backend-Seite sieht der Kunde für jedes Datenelement eine Formularentsprechung:
für obigen Absatz z.B. 3 Textfelder und eine Textarea (ip, class, style, content). Für eine  Liste ebenso 3 Textfelder und eine Textarea (ip, class, style, Listenpunkt pro Zeile). Wobei bei der Liste ganz nebenbei anzumerken ist, dass in der HTML-Struktur vermerkt wurde, dass jede Zeile aus der Textarea in einem Array-Element gespeichert werden soll. Nur falls sich jemand fragen sollte, was das soll.

Jetzt endlich die Frage:
Wie würdet ihr das machen im Falle einer Tabelle? Auf Kundenseite wäre eine Eingabemaske für eine Tabelle ebenfalls in einer Textarea denkbar, etwa so:

Filiale|Ort|Adresse
Maxfiliale|München|Musterstrasse
Testfiliale|München|Teststrasse
Musterfiliale|Frankfurt|Wurststrasse

(diese Daten werden in einen mehrdimensionalen Array gepackt und serialisiert, später beim Betrachten der Website wie oben beschrieben auf die entsprechenden Datenstrukturen gemappt)

Ist das sinnvoll? Ist sowas einem DAU zumutbar? (Über den Separator kann man streiten, ist nur ein Beispiel.) Oder wäre es besser, auch tabellarische Daten in einzelnen Inputfeldern auszuliefern? Oder ist die ganze Serialisierung Quatsch und ich sollte _ALLES_ in einzelnen DB-Feldern ablegen (das heisst für einen Absatz(!) hätte ich dann u.U. 4 Einträge in einer DB )?