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 derteaserVariants
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
.