Content-Container
Im CMS werden Inhalte über einzelne Abschnitte eingepflegt. Im Normalfall liegen Abschnitte flach untereinander. Es ist aber auch möglich Abschnitte in tiefere Ebenen zu verschachteln). Dies kann z.B. über eine mehrfach verschachtelte und wiederholbare Abschnitts-Auswahl erzeugt werden.
Der Content-Container aggregiert immer eine Liste von Abschnitten innerhalb einer Ebene. Es gibt aber Abschnitte, die dafür sorgen, dass redaktionell flach eingepflegten Daten hierarchisch aggregiert werden sollen. Ein Beispiel hierfür ist der “Neue Sektion”-Abschnitt. Wenn dieser Abschnitt angelegt wird, werden alle nachfolgenden Abschnitte innerhalb dieser neuen Sektion aggregiert.
Aggregieren von Sektionen
Enthält ein Abschnitt die Konfiguration
"newSection" : {
"aggregator" : {
"newSection" : true
}
}
werden alle nachfolgenden Abschnitte innerhalb der Sektion aggregiert. Folgt nach dem “Neue Sektion”-Abschnitt beispielsweise ein Text-Abschnitt, wird folgendes PHP-Array aggregiert:
[
"type" => "section",
"id" => "section-1",
"items" => [[
"type" => "text",
"id" => "text-2",
"model" => [
...
]
]],
"model" => [
...
]
]
Aggregieren von verschachtelten Sektionen
Sektionen können auch verschachtelt aggregiert werden. Hierfür muss für den Sektions-Abschnitt die Ebene angegeben werden.
"newSectionLevel1" : {
"aggregator" : {
"newSection" : true,
"sectionLevel" : 1
}
}
und
"newSectionLevel2" : {
"aggregator" : {
"newSection" : true,
"sectionLevel" : 2
}
}
Bei folgender Abschnitts-Reihenfolge
- newSectionLevel1
- text
- newSectionLevel1
- text
- newSectionLevel2
- text
- newSectionLevel1
- text
würde folgende Hierarchie ergeben
- newSectionLevel1
- text
- newSectionLevel1
- text
- newSectionLevel2
- text
- newSectionLevel1
- text
sectionLevel
Aggregieren von Sektionen mit und ohne Bei Sektionen mit und ohne definiertem sectionLevel
gilt die Regeln, dass Sektionen ohne sectionLevel
immer in der aktuellen Ebene bleiben.
Bei folgender Abschnitts-Reihenfolge
- newSection
- text
- newSectionLevel1
- newSection
- text
- newSectionLevel2
- newSection
- text
- newSectionLevel1
- text
würde folgende Hierarchie ergeben
- newSection
- text
- newSectionLevel1
- newSection
- text
- newSectionLevel2
- newSection
- text
- newSection
- newSection
- newSectionLevel1
- text
Abschnitt die eine Sektion beenden
Abschnitte könnne eine bestehende Sektion beenden. Alle nachfolgenden Abschnitte werden in einer neuen impliziten Sektion aufgenommen. Sollte der nächste Abschnitt selber eine Sektion sein, hat die Option keine Wirkung.
Zu erreichen ist dies mit der Option newSectionAfter
. Bei verschaltelten Sektionen kann auch hier die Ebene angegeben werden in der
die neue Sektion erstellt werden soll. Die erfolgt mit der Option newSectionAfterLevel
.
"lastSectionTypeInSection" : {
"aggregator" : {
"newSectionAfter" : true,
"newSectionAfterLevel" : 1,
...
}
}
Abschnitte in eigener Sektion
Abschnitte die immer alleine in einer neuen Sektion liegen sollen müssen selber eine neue Sektion anlegen und auch dafür sorgen, dass die nachfolgenden Abschnitte in einer nachfolgenden Sektion eingeordnet werden.
Normalerweise wird mit type
der Sektions-Typ angegeben. Dieser ist aber von den Abschnitten belegt, die selber keine Sektionen sind.
Daher kann der Sektions-Type in diesem Fall mit newSectionType
angegeben werden.
Die Konfiguration sieht in diesem Fall so aus:
"sectionTypeWithOwnNewSection" : {
"aggregator" : {
"newSection": true,
"newSectionType" : "implicitSection",
"sectionLevel": 1,
"newSectionAfter" : true,
"newSectionAfterLevel" : 1,
"module": "${module.id}",
"uri": "/aggregator/sectionTypes/sectionTypeWithOwnNewSection.spml",
"type": "namespace-sectionTypeWithOwnNewSection"
}
}
Implizite Sektion
Über implizite Sektionen kann sichergestellt werden, dass Abschnitte immer in einer Sektion aggregiert werden.
Hierfür muss an einem Container-Abschnitt (z.B. iterableSectionTypeSelector
) folgende Konfiguration gesetzt werden:
"iterableSectionTypeSelector" : {
"aggregator" : {
"implicitSection" : true
}
}
Sinnvoller ist aber, dies nur für die gewünschten Fälle zu konfigurieren. Im SiteKit ist dies für den Inhalts-Step
wie folgt konfiguriert (step.json
).
"content": {
...
"sectionTypes": {
"iterableSectionTypeSelector" : {
...
"aggregator": {
"implicitSection" : true
...
},
...
}
}
}