imperia CMS logo   +   mongoDB logo

 

Die Weiterentwicklung

Im vorangegangenen Artikel imperia CMS und MongoDB – ein starkes Team! habe ich beschrieben, wie man über imperia CMS JSON-Datensätze in eine MongoDB speichern kann. Ich unterschied dabei zwischen 2 Datensatz-Typen:

1. Page

Die Page beschreibt eine einzelne Seite und aus welchen Seitenelementen sie besteht:

{
    "id":3,
    "type":"newspage",
    "language":"en",
    "parentId":2,
    "url":"/news/imperia-cms-and-mongo-db",
    "references": {
        "header": {"type":"ref", "id":100},
        "searchBox": {"type":"ref", "id":101},
        "contact": {"type":"ref", "id":102},
        "map": {"type":"ref", "id":103}
    }
}

2. Element

Ein Element beschreibt ein Baustein einer Webseite, das über eine Page referenziert wird:

{
    "id":102,
    "type":"contact",
    "language":"en",
    "model": {
        "title": "Contact",
        "gender": "male",
        "firstname":"John",
        "name":"Doe",
        "street":"Some Street",
        "number":1,
        "location":"Somewhere",
        "zip":123
    }
}

 

Aber wo bleibt die Seitenstruktur?

Wer genau aufgepasst hat, der erkennt, dass die Page zwar einzelne Elemente einer Seite referenziert, eine Anordnung aber gänzlich fehlt. Mit den Informationen der Page kann man also nicht festlegen, in welcher Reihenfolge die Seitenbausteine angeordnet werden sollen.

Man könnte nun in Versuchung geraten, die „references“ als Array zu speichern:

{
    "id":3,
    "type":"newspage",
    "language":"en",
    "parentId":2,
    "url":"/news/imperia-cms-and-mongo-db",
    "references": [
        { "header": {"type":"ref", "id":100} },
        { "searchBox": {"type":"ref", "id":101} },
        { "contact": {"type":"ref", "id":102} },
        { "map": {"type":"ref", "id":103} }
    ]
}

Und schon hätte man eine Reihenfolge festgelegt.

Das hat aber einen entscheidenden Nachteil –  will man die Anordnung zentral für ganze Seitentypen steuern (wie hier für News-Pages), dann müsste man alle Newsseiten neu generieren, wenn man beispielsweise die Kontaktbox unterhalb der Map anordnen möchte!

Besser wäre, man hätte pro Seitentyp eine Strukturbeschreibung.

 

Hello Template

Das ist die Geburtsstunde eines neuen JSON Datensatz Typs – das Template.
Es beschreibt die Anordnung von Seitenelementen einer Seite eines bestimmten Seitentyps:

{
    "id":1000,
    "type":"template",
    "pageType":"newspage",
    "model": [
        {
            "element":"header",
            "children": [
            	{
            		"element":"logo", 
            		"children":[]
            	}
            	{
            		"element":"breadcrumb", 
            		"children":[]
            	}
            ]
        },
        {
            "element":"searchbox",
            "children": []
        },
        {
            "element":"contact",
            "children": []
        },
        {
            "element":"map",
            "children": []
        }
    ]
}

Die Verschachtelung über das children-Array kann dabei in beliebiger Tiefe erfolgen. Will man nun globale Strukturänderungen vornehmen, werden diese über das Template vorgenommen.

Der imperia CMS Template Editor

Das Template selbst wird über einen Template-Editor im imperia CMS generiert und ausgespielt. Es ist ein eigenständiges imperia-Dokument und kann somit von Redakteuren bei Bedarf geändert werden. Pro Seitentyp existiert ein Template, das mit eigenständigen Rechten, Workflows, etc. versehen werden kann. Der strukturelle Aufbau erfolgt über imperia-Slots, -Flexmodule und -Blöcke. Der Redakteur benötigt somit keine Programmierkenntnisse und kann sich sein Template nach belieben zusammenklicken.

 

tl;dr

  • Die Struktur einer Seite wird über den neuen JSON-Datensatztyp Template festgelegt
  • Ein Template-Editor erlaubt das Erzeugen und Ändern eines Templates über die imperia CMS Oberfläche

Das imperia CMS MongoDB Framework spielt folgende Datensätze aus:

  • pages
  • elements
  • templates

 

Bitte bewerten Sie meinen Beitrag:
grauenhafteinfach nur schlechtich habe es geschafft ohne einzuschlafengut ist gut genugsehr gut, bitte mehr davon (2 Bewertungen, Ø: 4,50 von 5)
Loading...