Die Konfiguration von TeaserVariants erfolgt für gewöhnlich in der Konfigurations-Datei global.json, die sich im SiteKit unter

srv/main/webapp/WEB-INF/config/global.json

und in Kunden-Modulen unter

srv/main/webapp/WEB-INF/config/client/[anchor]/global.json

befindet. Von dort aus werden sie dann nur noch referenziert.

Das Beispiel zeigt eine gängige Teaser-Variante.

"teaserVariants": {
	"teaser": {
		"id": "teaser",
		"required": [
			["headline", "text", "image"],
			["headline", "text", "video"]
		],
		"image": {
			"enabled": true,
			"padding": "fit",
			"aspectRatio": {
				"x": 2,
				"y": 3
			},
			"sizes": [
				{
					"width": 400,
					"height": 267
				}
			]
		}
	}
}
  • id - Innerhalb der teaserVariants eindeutige ID. Diese muss aus technischen Gründen identisch mit dem JSON-Key für diese Teaser-Variante sein.
  • required - Enthält ein Array von Mindestanforderungen an einen Teaser, der nur ausgegeben wird, wenn eine von ihnen komplett erfült wird.
  • image - Enthält die Konfigurationen für die Berechnung des Bildes des Teasers.

Warnungen bei Mindestanforderungen

In speziellen Fällen ist es sinnvoll, bei erfüllen einer besonderen Mindestanforderung eine Warnung auszugeben.

Wenn es beispielsweise im CMS noch nicht möglich ist, zu bestimmen, ob der Teaser ein Bild haben wird oder nicht, sollte keine Fehlermeldung geworfen werden, dass ein Bild fehlt um die Mindestanforderungen zu erfüllen. Auch sollte dies nicht verschwiegen werden, da in dem Fall, dass für den Teaser dann doch kein Bild zustande kommt, er ohne ersichtlichen Fehler nicht angezeigt werden würde.

Das kann mit der folgenden Konfiguration erreicht werden.

	"required": [
		["headline", "text", "image"],
		["headline", "text", "video"],
		{
			"fields": ["headline", "text"],
			"notification": "Dieser Teaser wird nur ausgegeben, wenn für den Artikel ein gültiges Symbolbild konfiguriert ist"
		}
	]

Die eigentlichen Mindestanforderungen werden hier über das Feld fields und die Warnung über notification angegeben.

Spezifizierung von Varianten

Für eine Teaser-Variante können, abhängig von dem verlinkten Artikel unterschiedliche Anforderungen bestehen. Um diese Unterscheidungen treffen zu können, gibt es die Spezifizierungstypen articleType, objectType und modification.

Artikel-Typen

Eine Unterscheidung in verschiedene Artikel-Typen kann über den key articleTypes erreicht werden. Dort muss sich dann unter der Bezeichnung des Artikel-Typen die Konfiguration befinden, die die allgemeinere Konfiguration überschreiben soll, sobald ein Artikel dieses Typs verlinkt wird.

In diesem Beispiel wurde definiert, dass für Teaser, die auf Medien verweisen, kein Bild benötigt wird.

	"teaser": {
		"id": "teaser",
		"required": [
			["headline", "text", "image"],
			["headline", "text", "video"]
		],
		"image": { ... },
		"articleTypes": {
			"media": {
				"required": {
					["headline", "text"]
				},
				"image.enabled": false
			}
		}
	}

Objekt-Typen

Eine Unterscheidung in verschiedene Objekt-Typen kann über den key objectTypes erreicht werden. Dort muss sich dann unter der Bezeichnung des Objekt-Typen die Konfiguration befinden, die die allgemeinere Konfiguration überschreiben soll, sobald ein Artikel mit diesem Objekt-Typen verlinkt wird.

In diesem Beispiel wurde definiert, dass für Teaser auf CityGov-Personen keine Überschrift benötigt wird.

	"teaser": {
		"id": "teaser",
		"required": [
			["headline", "text", "image"],
			["headline", "text", "video"]
		],
		"image": { ... },
		"objectTypes": {
			"citygovPerson": {
				"required": [
					["text", "image"],
					["text", "video"]
				]
			}
		}
	}

Modifikationen

Modifikationen dienen der Unterscheidung in Artikel-unabhängige Umstände. Dazu zählt beispielsweise die Checkbox “Teaser ohne Bilder ausgeben” in einer Teaserliste. Hierfür muss unter dem key modifications die Bezeichnung der Modifikation befinden, welche dann die Konfiguration enthält, die die allgemeinere Konfiguration überschreiben soll, sobald diese Modifikation aktiv ist.

Dieses Beispiel zeigt, wie die Anforderung an Medien für alle Teaser entfernt wird, sobald die oben genannte Checkbox aktiv ist. Diese Modifikation trägt den Namen withoutImage.

	"teaser": {
		"id": "teaser",
		"required": [
			["headline", "text", "image"],
			["headline", "text", "video"]
		],
		"image": { ... },
		"modifications": {
			"withoutImage": {
				"required": [
					["headline", "text"]
				],
				"image.enabled": false
			}
		}
	}

Mehrere Modifikationen

Gibt es für eine Variante mehrere mögliche Modifikationen in die unterschieden werden muss, müssen auch alle möglichen Kombinationen dieser Modifikationen spezifiziert werden, sofern für sie ein anderes Verhalten als das allgemeinere erwartet wird.

Gibt es also in dem zuvor aufgeführten Beispiel für Modifikationen zusätzlich die Modifikation withoutText, so muss die resultierende Konfiguration so aussehen.

	"teaser": {
		"id": "teaser",
		"required": [
			["headline", "text", "image"],
			["headline", "text", "video"]
		],
		"image": { ... },
		"modifications": {
			"withoutImage": {
				"required": [
					["headline", "text"]
				],
				"image.enabled": false
			},
			"withoutText": {
				"required": [
					["headline", "image"],
					["headline", "video"]
				]
			},
			"withoutImageAndText": {
				"required": [
					["headline"]
				],
				"image.enabled": false
			}
		}
	}

Würde hier die Konfiguration withoutImageAndText fehlen, so würde in dem Fall, das beide Modifikationen aktiv sind, keine von ihnen wirken!

Verschachtelung von Spezifizierungen

Spezifizierungen der obengenannten Typen können auch verschachtelt werden.

So kann Beispielsweise bei einem Medien-Teaser ein anderes Verhalten erreicht werden, wenn die Modifikation withoutText aktiv ist, als bei anderen Teasern.

	"teaser": {
		"id": "teaser",
		"required": [
			["headline", "text", "image"],
			["headline", "text", "video"]
		],
		"image": { ... },
		"articleTypes": {
			"media": {
				"required": [
					["headline", "text"]
				],
				"image.enabled": false,
				"modifications": {
					"withoutText": {
						"required": [
							["headline"]
						]
					}
				}
			}
		},
		"modifications": {
			"withoutText": {
				"required": [
					["headline", "image"],
					["headline", "video"]
				]
			}
		}
	}

Einfluss der Spezifizierungen auf die ID der Teaser-Variante

Die id wird, anders als die restlichen, nicht-Spezifizierungs-relvanten keys direkt vererbt, sondern anhand der Bezeichnung der Spezifizierung modifiziert. Hierfür gelten die folgenden Regeln:

  • ist die Spezifizierung eine Modifikation, wird sie an die allgemeinere ID angehangen: [allgemeinere ID][Modifikation]
  • ist die Spezifizierung keine Modifikation, wird sie vor die allgemeinere ID gestellt: [Spezifizierung][allgemeinere ID]
  • die Zusammenführung von zwei IDs geschieht immer in CamelCase-Notation.

Ist eine andere ID gewünscht, als durch diesen Prozess zustande käme, so kann manuell eine definiert werden. Hat eine Spezifizierung, die eine ID selbst definiert weitere Spezifizierungen, so wird die manuelle ID so behandelt, wie sonst eine generierte.

Externe Kacheln

Externe Kacheln basieren nicht auf CMS-Artikeln und können daher auch weder articleType noch objectType klar zugeordnet werden. Da nur eine Art von externen Kacheln gibt, brauchen sie aber auch kein zweites Unterscheidungskriterium. Festgelegt ist es auf den articleType system.constants.ARTICLE und den imaginären objectType none.