Nachdem ich euch letztes Mal etwas über Sitecore Publishing und dazugehörige Fallstricke erzählt habe, möchte ich euch heute etwas mehr zu Sprachen und Versionierung in Sitecore erzählen.
Wie üblich ist der Artikel in deutsch und englisch verfügbar.
Los geht’s!
Versionierung in Sitecore
Bevor wir in Sitecores Versionierung einsteigen, sollten wir kurz die Grundlagen wiederholen. Sitecore verwendet Items und Templates, wobei Templates eine Art Baupläne für Items sind. Jedes Template enthält eine Liste von Fields, die sich in jedem Item dieses Typs wiederfinden. Fügt man ein neues Feld zum Template hinzu, erscheint es automatisch auch in allen Items mit diesem Template. Sitecore bietet viele verschiedener Feldtypen, aber nur drei verschiedene Feld-“Verhalten”: Versioned, Unversioned and Shared. Beachtet, dass diese sich gegenseitig ausschliessen.
- Versioned
Dies ist das Standardverhalten. Jedes Feld kann mehrere Sprachen und Versionen haben. Es kann beliebig viele Werte für jedes Feld geben, denn die englische Version 1 ist anders als Version 2 und die deutsche Version 1 ist anders als die englische Version 1. - Unversioned
Ein solches Feld hat zwar verschiedene Werte pro Sprache, aber keine weiteren Versionen innerhalb einer Sprache. Die Anzahl der Werte ist damit limitiert durch die Anzahl der verfügbaren Sprachen. - Shared
Der Feldwert ist über alle Sprachen identisch.
Um das Konzept etwas klarer zu machen, habe ich ein Template mit jeweils einem Textfeld pro Verhalten angelegt.
Anschliessend habe ich ein solches Item direkt unter dem Habitat Item angelegt.
Einige Eigenheiten von Sitecore sind bereits ersichtlich:
- Sitecore zeigt einen Hinweis, um was für ein Feldverhalten es sich bei den Feldern handelt. Kein Hinweis bedeutet, es handelt sich um ein versioniertes Feld.
- Sitecore erzeugt automatisch eine Version in der Sprache, in der das Item erzeugt wird.
Wir können die automatisch erzeugte Version löschen, indem wir die Funktion Remove im Versions Ribbon nutzen.
Beachtet, dass das Item immer noch existiert. Wir haben also eine weiteres interessantes Verhalten von Sitecore entdeckt:
- Ein Item kann auch ohne Versionen existieren.
Für den weiteren Verlauf erzeugen wir zwei neue englische Versionen mittels Add im Versions Ribbon.
Anschliessend befüllen wir alle Felder der Version 2, um das Verhalten zu untersuchen.
Wenn wir nun auf Version 1 wechseln, können wir sehen wie Sitecore mit den Feldern umgeht.
Gleich mehrere Dinge sind hier auffällig, wir gehen sie Schritt für Schritt durch:
- Das versionierte Feld ist leer, es wurde nicht verändert, als wir Version 2 bearbeitet haben.
- Sowohl das versionierte als auch das shared Field wurden verändert, als wir Version 2 verändert haben.
- Wir sehen eine Warnung, dass unsere Version nicht auf der Website erscheinen wird, sowohl als Hinweis im Contentbereich als auch in der quick action bar. Dies ist ein Hinweis auf folgendes Verhalten:
- Es kann immer nur eine Version publiziert sein
- Es wird immer die letzte Version publiziert
Nun erzeugen wir eine deutsche Version von unserem Item um zu bestätigen, wie die Felder reagieren. Der einfachste Weg ist, zu deutsch zu wechseln und dem Vorschlag im Contentbereich zu folgen.
Wie ihr sicherlich schon vermutet habt, ist lediglich das shared Field bereits gefüllt, während das versionierte und das unversionierte Feld leer sind.
Versionen vergleichen
Wir wechseln zurück zur englischen Version, um uns ein sehr hilfreiches Tool anzuschauen: den Versionsvergleich (Versions -> Compare).
In diesem Dialog könnt ihr schnell sehen, was sich zwischen Versionen verändert hat. Besonders bei vielen Feldern könnt ihr euch somit schnell einen überblick verschaffen, insbesondere bei Änderungen in Rich-Text-Feldern.
Übersetzen
Es gibt eine ähnliche Funktion für Sprachen, die besonders für Übersetzer hilfreich ist. Diese Funktion ist eher ein Modus und ihr aktiviert ihn, indem ihr Translate im Version Ribbon anschaltet.
Die Eingabefelder teilen sich nun in zwei Spalten auf. Um diese sinnvoll zu nutzen, müssen wir die Sprache zu deutsch wechseln.
Plötzlich macht der Modus eine Menge Sinn! Der Content Author sieht nun die englischen Versionen der Felder und kann gleichzeitig den deutschen Inhalt für die Felder pflegen – Perfekt für Übersetzer.
Um dieses Feature optimal zu nutzen, sollte ihr die folgende Regel beachten: Sprachversionen eines Items sollten immer Übersetzungen sein! Falls ihr logisch anderen Inhalt habt, legt lieber ein neues Item an.
Exkursion: Standard Values
Bevor ich euch die Reset Fields Funktion zeige, sollten wir und kurz das Konzept der Standard values anschauen. Standard values sind ein cleveres Sitecore Feature welches euch das arbeiten mit leeren Feldern erleichtert. Sie erlauben es, einen Fallback-Wert zu definieren, der immer dann zum Tragen kommt, wenn ein Feld keinen Inhalt hat. Um solche Werte zu definieren, gehen wir zum Template, wählen den Options Ribbon und klicken Standard values.
Sitecore erzeugt nun ein Item mit dem Namen __Standard Values unter dem Template selbst. Wir füllen einige Felder mit Testwerten ab und speichern.
Reset Fields
Felder zurückzusetzen bedeutet, dass der Inhalt dieser Felder entfernt wird. Wenn wir zur Version 2 unseres englischen Items navigieren, sehen wir keinen Unterschied zu vorher. Das liget daran, dass wir alle Felder mit Inhalt abgefüllt haben. Setzen wir die Felder nun zurück und schauen was passiert. Dazu startet ihr den Reset Field Values Dialog über Reset im Versions Ribbon.
Der Dialog gibt euch eine Vorschau des Items nach dem Zurücksetzen. Wir markieren all 3 Felder und klicken Reset.
Alle drei Felder enthalten nun den Inhalt des __Standard Values Items. Sitecore gibt euch ausserdem einen Hinweis, dass es sich beim Inhalt des Feldes um den Standard Value dieses Feldes handelt. Was dieses Konzept so mächtig macht, ist dass eine Änderung in den Standard Values sofort in allen Items dieses Typs reflektiert wird.
Zum Unterschied zwischen nichts und nichts
Ihr fragt euch vielleicht warum wir umständlich den Dialog zum Zurücksetzen der Felder verwenden, anstatt einfach deren Inhalt zu löschen. Wenn wir das tun würden, würden die Standardwerte allerdings nicht übernommen. Stattdessen wären die Felder leer.
Der Grund ist, dass Sitecore zwischen einem leerem Feld (null) und einem Feld mit leerem Text unterscheidet. Würde es das nicht tun, könnte man einen Text von einem Standardwert nicht durch einen leeren Text überschreiben. Hier also die Kurzanleitung für leere Feldwerte:
- Möchtet ihr einen leeren Text im Feld, löscht einfach den Text im Feld. Der Wert dieses Feldes wird nicht von den Standardwerte beeinflusst.
- Möchtet ihr ein leeres Feld, nutzt den Reset Fields Dialog. Der Wert des Feldes wir auf den Standardwert zurückfallen und sich automatisch anpassen, wenn dieser sich ändert.
Versionierte Medien
Media Items können in Sitecore auch versioniert werden. Die Funktionalität zum anlegen von versionierten Media Items ist etwas versteckt, aber jeder Editor sollte solche Items anlegen können. Um euch die unterschiedliche Verwendung zu zeigen, fügen wir ein versioniertes und ein unversioniertes Bild zu unserem Beispielitem hinzu.
Damit wir Medien zum Testen haben, fügen wir ein paar Testbilder für später in die Media Library hinzu. Das erste Bild laden wir regulär hoch, via Upload file.
Sitecore lädt Dateien standardmässig unversionert hoch, so dass alle Datei-relevanten Felder shared sind. Ihr könnt ausserdem sehen, dass das Template sich in einem Ordner namens Unversioned befindet.
Wenn wir ein versioniertes Media Item anlegen wollen, müssen wir den Upload files (advanced) Dialog verwenden und die Option Make uploaded media items versionable anwählen.
Dieses Media Item ist nun versioniert.
Ich habe beide Items nun umbenannt, damit wir sie unterscheiden können. Wenn ich auf deutsch wechsle und für jedes Item eine neue Version anlege, schient das unversionierte item okay zu sein, währen das versionierte Item kaputt aussieht.
Der Grund ist, dass unser versioniertes Item keinen Inhalt in den Datei-relevanten Feldern hat. Wir können diese aber hinzufügen, indem wir die Attach-Funktionaliät des Media Fields benutzen. Beachtet, dass alle Datei-relevanten Felder automatisch befüllt werden. Ich habe dieses Mal ein Bild meines Kollegen Iulian ausgewählt, damit die Versionen unterscheidbar sind. Normalerweise würde man hier ein Bild hochladen, das beispielsweise einen deutschen Text enthält.
Das sieht schon besser aus! Wir haben zwei funktionale Media Items mit jeweils einer deutschen und einer englischen Version. Um zu sehen, wie wir damit arbeiten können, navigieren wir zurück zu unserem Beispiel-Item. Hier wählen wir das unversionerte Bild im Versioned Image Field und das versionierte Item im Shared Image Field.
Das Ergebnis ist wie erwartet. Wenn wir jedoch zu deutsch wechseln, sehen wir den Unterschied zwischen beiden Ansätzen.
Währen das versionierte Feld leer ist (in der deutschen Version haben wir keinen Inhalt eingepflegt), zeigt das shared Field die deutsche Variante unseres Bildes. Ihr müsst entscheiden, welcher Ansatz im jeweiligen Fall derbessere ist.
Option 1: Versioniertes Image Field
Falls ihr unterschiedliche Bilder in unterschiedlichen Sprachen verwenden wollt, benutzt ein versioniertes Image Feld. Für jede Version des Items könnt ihr unabhängig ein Bild auswählen.
Option 2: Shared Image Field
Die zweite option ist komfortabler für Content Autoren. Mit einem shared Image Field verwendet ihr am besten ein versioniertes Media Item. Sitecore wird die zu zeigende Version des Bildes anhand der gewählten Sprache ermitteln. Ein nachteil ist, dass das Auswählen eines anderen Bildes alle Versionen des Items gleichzeitig betrifft.
Dieses Konzept trifft überigens für alle Referenztypen (oder Linktypen, wie sie in Sitecore heissen) zu. Manchmal möchte man verschiedene Items mit einem versionierten Feld verlinken, und manchmal verwendet man lieber ein shared Feld, welches auf ein versioniertes Item zeigt.
Das war’s
So viel zu Sprachen und Versionen. Bis zum nächsten Mal!