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

Aggregieren von Sektionen mit und ohne sectionLevel

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
  • 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
				...
			},
			...
		}
	}
}