Startseite / Weiterführende Themen / Generierung

Generierung

Inhaltsverzeichnis
Rechte

Die Erstellung und Auslieferung von Inhalten ist in FirstSpirit durch das Prinzip der „Vorgenerierung“ gekennzeichnet. Wo immer es möglich ist, wird der Inhalt nicht erst auf dem Live-System, zum Zeitpunkt der Benutzeranfrage produziert (Live-Rendering), sondern bereits auf dem FirstSpirit-Server (also im weniger zeitkritischen Offline-Betrieb) bei der sogenannten „Generierung“.

Standardmäßig wird mit jedem Projekt jeweils ein Auftrag angelegt, mit dem eine Vollgenerierung (Auftrag „generate full“) und eine Teilgenerierung (Auftrag „generate partly“) durchgeführt werden kann. Diese Aufträge können wie jeder Auftrag über die Projekteigenschaften („Auftragsverwaltung“, siehe Auftragsverwaltung (→Dokumentation für Administratoren)) gesteuert werden. Auch aus dem SiteArchitect heraus können diese Aufträge bei entsprechender Konfiguration gestartet werden (Menü „Projekt / Projekt generieren“ bzw. „Teilprojekt generieren“, siehe Projekt (→Handbuch FirstSpirit SiteArchitect)), wenn entsprechende Rechte dazu vorhanden sind (siehe unten).

Darüber hinaus können in der Auftragsverwaltung auch individuelle Generierungsaufträge eingerichtet werden. So können für eine individuelle, projektspezifische Generierung festgelegte Startpunkte definiert werden (Teilgenerierung) oder auch ein Generierungsauftrag, der nur die freigegebenen Änderungen zum zuletzt veröffentlichten Projektstand berücksichtigt (Deltagenerierung).

Alle für ein Projekt konfigurierten Generierungsmöglichkeiten können im SiteArchitect über den Menüeintrag „Auftrag ausführen“ gestartet werden (sofern der Bearbeiter die notwendigen Rechte dazu besitzt).

Vollgenerierung

Zielsetzung einer Vollgenerierung ist die vollständige Generierung des gesamten Projekts. Abhängig vom Projektumfang kann dieser Vorgang sehr zeitintensiv sein. Für regelmäßige, kleinere Generierungsaktionen wird daher der Einsatz von Teilgenerierungen oder der Einsatz von Deltagenerierungen empfohlen.

Generierte Inhalte: Es werden

  • alle freigegebenen Seitenreferenzen aus der Struktur-Verwaltung berücksichtigt, sowie
  • alle freigegebenen Medien, die in der Ausgabe dieser Seitenreferenzen referenziert sind.

Wichtig Medien, die im Projekt nicht referenziert werden, werden bei einer Vollgenerierung nicht berücksichtigt.

Teilgenerierung

Zielsetzung einer Teilgenerierung ist eine schnelle und zielgerichtete Generierung bestimmter Teilbereiche eines Projektes. Abhängig von der Konfiguration können bspw. nur bestimmte Startknoten, nur bestimmte Medienobjekte und/oder nur geänderte Projektinhalte berücksichtigt werden.

Generierte Inhalte: Es werden:

  • alle freigegebenen Seitenreferenzen aus der Struktur-Verwaltung, ausgehend von den festgelegten Startpunkten berücksichtigt, sowie
  • alle freigegebenen Medien, die in der Ausgabe dieser Seitenreferenzen referenziert sind, sowie
  • alle freigegebenen Medien aus der Medien-Verwaltung, ausgehend von den festgelegten Startpunkten.

Mediengenerierung

Prinzipiell handelt es sich hier um eine einfache Teilgenerierung, wobei ausschließlich Startpunkte aus der Medien-Verwaltung definiert werden.

Zielsetzung der Mediengenerierung ist es, eine schnellere Veröffentlichung einzelner Teilbereiche zu ermöglichen. Das Auslagern der rechenzeitintensiven Generierung von Medien in separate Teilgenerierungs-Aufträge bietet, insbesondere beim Ausführen mehrerer kleiner Teilgenerierungen, einen hohen Performancegewinn, da für jede Generierung ausschließlich die gewünschten Medien berücksichtigt werden. Diese Option eignet sich aber auch ideal, um beispielsweise Medien in einem Remote-Projekt zu veröffentlichen („Remote-Medien“, siehe dazu Seite Remote-Zugriff).

Generierte Inhalte: Es werden alle freigegebenen Medien aus der Medien-Verwaltung, ausgehend von den festgelegten Startpunkten, berücksichtigt.

Deltagenerierung

Herkömmliche Teilgenerierungen verwenden eine einfache Strategie, um den Generierungsumfang zu reduzieren. Es wird nicht der gesamte (freigegebene) Projektinhalt generiert, sondern nur die Teilbereiche eines Projekts, die aktuell bearbeitet werden. Die Nachteile dieser Generierungsstrategien liegen auf der Hand. Es werden immer alle Inhalte unterhalb der definierten Startknoten generiert, unabhängig davon, ob diese tatsächlich verändert wurden oder nicht.

Die Deltagenerierung verwendet eine effizientere Generierungsstrategie. Dabei werden nicht mehr vollständige Projekte bzw. vollständige Teilbäume eines Projektes generiert, sondern nur noch die freigegebenen Inhalte, die sich seit einem früheren Revisionsstand tatsächlich geändert haben. Zielsetzung der Deltagenerierung ist es, die überflüssige und zeitintensive Generierung und erneute Veröffentlichung ungeänderter Inhalte zu vermeiden.

Wichtig Die Deltagenerierung unterstützt nur Generierungen des Freigabestandes.
D. h. eine Deltagenerierung ist auch nur für Projekte möglich, die Freigaben verwenden (die Option „Freigabe nutzen“ in den Projekteinstellungen muss aktiviert sein).

Funktionsweise der Deltagenerierung:

  • Auslesen der relevanten, älteren Revision und Speichern in der Property
  • Ermitteln aller geänderten Objekte im Projekt (seit der Revision gemäß der Variablen #deltaGeneration.last_execution).
  • Ermitteln aller neu zu generierenden Knoten (d.h. Strukturordner, Seitenreferenzen usw.), basierend auf diesen geänderten Objekten unter Berücksichtigung der definierten Abhängigkeitsregeln.
  • Hinzufügen dieser Knoten zum nächsten (=auf das Skript folgenden) oder explizit angegebenen Generierungstask.

Die Änderungen zum früheren Stand eines Projektes werden über die FirstSpirit Access-API ermittelt. Dazu muss vor die eigentlichen Generierung (Aktion: „generate“) ein Skript geschaltet (Aktion:„script“) werden.

Ermitteln der Revision

Die Information, ab welcher Revision Änderungen berücksichtigt werden sollen, wird in der Auftragsvariablen #deltaGeneration.last_execution persistent gespeichert - deren Name ist definiert in der Konstanten

DeltaGeneration.DELTA_GENERATION_LAST_EXECUTION

Ist die entsprechende Variable (noch) nicht vorhanden, wird automatisch eine Vollgenerierung ausgeführt.

Die Variable #deltaGeneration.last_execution wird automatisch beim Aufruf von DeploymentUtil.createDeltaGeneration(context) ausgelesen, in eine gleichnamige Property kopiert und dann (für nachfolgende Ausführungen des Auftrages) auf den Startzeitpunkt des Auftrages gesetzt. Bei Bedarf kann der Wert der Variablen auch über einen eigenen Skript-Task angepasst werden (s.u.).

Wichtig Die Variable #deltaGeneration.last_execution wird im Fall eines Fehlers nicht automatisch zurückgesetzt.

Das Zurücksetzen auf den vorherigen Wert kann notwendig sein, wenn das Deployment fehlschlägt und / oder wegen Generierungsfehlern nicht ausgeführt wird. Hier muss die Auftragsvariable über ein zusätzliches Skript wieder auf den vorherigen Wert gesetzt werden. Dazu kann auf den in der gleichnamigen Property automatisch gespeicherten, alten Wert zurückgegriffen werden:

context.setVariable(DeltaGeneration.DELTA_GENERATION_LAST_EXECUTION, context.getProperty(DeltaGeneration.DELTA_GENERATION_LAST_EXECUTION));

Andernfalls würden bei der nächsten Ausführung des Auftrages nur die Änderungen zwischen der letzten (abgebrochenen und dadurch nicht veröffentlichten) Ausführung des Auftrages und der aktuellen berücksichtigt. Die Änderungen der fehlerhaften Ausführung würden nicht berücksichtigt werden.

Wichtig Die Auftragsvariable (und damit der Wert der ermittelten Revision) ist nur innerhalb des Auftrags verfügbar. Andere Generierungsaufträge werden nicht automatisch berücksichtigt.

Falls mehrere Generierungsaufträge existieren (z. B. Voll-, Teil- und Delta-), werden im Rahmen des Deltagenerierungs-Auftrages auch Änderungen (unnötigerweise erneut) berücksichtigt, die bereits durch eine zwischenzeitliche Generierung über einen anderen Auftrag veröffentlicht wurden. Sollte dies nicht gewünscht sein, kann der Zeitpunkt, ab dem die Änderungen ermittelt werden sollen, über eine entsprechende Manipulation der Auftragsvariablen DeltaGeneration.DELTA_GENERATION_LAST_EXECUTION vor dem Aufruf von DeploymentUtil.createDeltaGeneration(context) angepasst werden.

Ermitteln der geänderten Objekte

Welche Änderungen im Projekt zu einer Generierung welcher Knoten führen sollen, kann über „Abhängigkeitsregeln“ definiert werden. Die standardmäßig aktivierten Abhängigkeitsregeln sind in der Konstanten DeltaGeneration.DEFAULT_DEPENDENCY_RULES definiert.

Wichtig Eingetragene Startknoten werden nicht als Einschränkung berücksichtigt: Falls im entsprechenden Generierungstask bereits Startknoten definiert sind, haben diese keine Auswirkung auf die Ermittlung der Änderungen (des Deltas). Insbesondere schränken sie die Ermittlung nicht auf entsprechende Teilbäume ein.

Ermitteln von Abhängigkeiten

Innerhalb eines Projektes gibt es häufig Abhängigkeiten zwischen verschiedenen Elementen. Sollen diese Abhängigkeiten auch bei einer Delta-Generierung berücksichtigt werden, dann werden hierfür Abhängigkeitsregeln benötigt.

Wichtig Bei allen Abhängigkeitsregeln werden grundsätzlich Änderungen am Freigabestand eines Elements berücksichtigt. Lediglich in Verwaltungen, die keine Freigabe unterstützen (z.B. Vorlagen-Verwaltung), bezieht sich eine Regel auf einfache Änderungen.

Die folgenden Abhängigkeitsregeln stehen zur Verfügung:

  • PROPAGATE_PAGE_CHANGES: wird eine Seite geändert, dann werden alle darauf referenzierenden Seiten ebenfalls als geändert betrachtet.
  • PROPAGATE_SECTION_CHANGES: wird ein Absatz geändert, dann werden alle Seiten als geändert betrachtet, auf denen dieser Absatz referenziert wird.
  • PROPAGATE_MEDIA_CHANGES_TO_PAGESTORE: wird ein Medium (Bild oder Datei) geändert, dann werden alle Seiten der Inhalte-Verwaltung als geändert betrachtet, auf denen dieses Medium referenziert wird.
  • PROPAGATE_MEDIA_CHANGES_TO_SITESTORE: wird ein Medium (Bild oder Datei) geändert, dann werden alle Seitenreferenzen oder Menüebenen der Struktur-Verwaltung als geändert betrachtet, auf denen dieses Medium direkt referenziert wird.
  • PROPAGETE_TEMPLATE_CHANGES: wird eine Vorlage geändert, dann werden alle Seiten der Inhalte-Verwaltung als geändert betrachtet, die auf dieser Vorlage basieren.
  • PROPAGATE_MEDIA_CHANGES_TO_CONTENTSTORE: wird ein Medium (Bild oder Datei) geändert, dann werden alle Datensätze der Datenquellen-Verwaltung als geändert betrachtet, in denen dieses Medium referenziert wird.
  • PROPAGATE_MEDIA_CHANGES_TO_TEMPLATESTORE: wird ein Medium (Bild oder Datei) geändert, dann werden alle Vorlagen der Vorlagen-Verwaltung als geändert betrachtet, in denen dieses Medium referenziert wird.
  • PROPAGATE_PAGE_CHANGES_CASCADING: wird eine Seite geändert, dann werden auch Seiten als geändert betrachtet, die diese Seite direkt oder indirekt (über deren Seitenreferenz) verlinken.
  • PROPAGATE_CONTENT_PRODUCER_MOVE: wird eine Seitenreferenz verschoben, dann schließt das alle Seiten mit ein, die auf diese Seite verweisen.
  • PROPAGATE_GCA_CHANGES: wird ein globaler Inhaltsbereich (GCA) geändert, dann werden alle Seiten als geändert betrachtet, die diesen globalen Inhalt darstellen.
  • UPDATE_PAGEREF_WHEN_ENTITY_HAS_CHANGED: steuert das Verhalten der Deltagenerierung von Detailseiten bei Content-Projektionen. (siehe folgenden Abschnitt Abhängigkeiten bei Content-Projektionen)
  • CHANGED_MEDIA: alle geänderten Medien werden über eine entsprechende Medien-Generierung erzeugt.

Abhängigkeiten bei Content-Projektionen

Über die Abhängigkeitsregel UPDATE_PAGEREF_WHEN_ENTITY_HAS_CHANGED wird das Verhalten der Deltagenerierung von Detailseiten bei Content-Projektionen gesteuert. Detailseiten sind hierbei Seitenreferenzen, die einzelne Datensätze darstellen, also für die im Register „Daten“ bei „Anzahl der Einträge pro Seite“ der Wert 1 eingetragen ist.

  • Ist diese Regel gesetzt (oder sind keine DependencyRules gesetzt), wird bei der Änderung eines Datensatzes die gesamte Seitenreferenz über die auch dieser Datensatz erzeugt wird als geändert betrachtet.
    Hierdurch werden dann bei einer Deltagenerierung alle Detailseiten der entsprechenden Seitenreferenzen neu erzeugt. Insbesondere werden auch solche Detailseiten neu erzeugt, die den geänderten Datensatz nicht enthalten, aber auf derselben Tabelle basieren.
  • Ist diese Regel explizit nicht gesetzt, werden bei einer Deltagenerierung nur diejenigen Detailseiten neu erzeugt, die einzelne geänderte Datensätze darstellen.

Hinweis: Auf die Behandlung von Übersichtsseiten hat diese Regel keinen Einfluss. Diese werden generell immer neu erzeugt, wenn in der zugrunde liegenden Tabelle ein Datensatz geändert wurde.

Beispiel für eine Deltagenerierung

Eine detaillierte Anleitung zur Konfiguration einer Deltagenerierung und ein Skriptbeispiel zur Ermittlung der Änderungen in einem Projekt sind in der Community zu finden:

Generierungsverzeichnisse

Standardmäßig werden generierte Projektinhalte vom FirstSpirit-Server in den Standard-Generierungsverzeichnissen (fs5staging, fs5preview und fs5webedit) oder in projektlokalen Generierungsverzeichnissen abgelegt, z. B.:

für Inhalte (ohne Medien): fs5staging / Projekt-ID / Auftrags-ID / Sprachkanal_Vorlagensatz / Projektstruktur

für Medien: fs5staging / Projekt-ID / Auftrags-ID / media / Sprachkanal / Projektstruktur

  • Projekt-ID: wird beim Anlegen eines Projekts automatisch vom System vergeben und kann z. B. in der Projekt-Übersicht des ServerManagers nachgeschlagen werden.
  • Auftrags-ID: wird beim Anlegen eines Auftrags automatisch vom System vergeben. Die Standard-Aufträge für Voll- oder Teilgenerierung sind dabei in jedem neu angelegten Projekt enthalten. Die Auftrags-ID kann z. B. in der Übersicht der Aufträge in den Projekteigenschaften („Auftragsverwaltung“, siehe Auftragsverwaltung (→Dokumentation für Administratoren)) oder in einem Auftrag selbst nachgeschlagen werden.
  • Sprachkanal_Vorlagensatz: Für jede Projektsprache (siehe „Projekteigenschaften / Sprachen“, siehe Sprachen (→Dokumentation für Administratoren)) wird ein eigenes Unterverzeichnis angelegt. Als Bezeichnung wird das in den Projekteigenschaften hinterlegte Kürzel verwendet. Liegen mehrere Vorlagensätze vor (siehe „Projekteigenschaften / Vorlagensätze“, siehe Vorlagensätze (→Dokumentation für Administratoren)), wird für jeden Vorlagensatz in jeder Sprache ein eigenes Verzeichnis angelegt. Dabei wird an das Sprachkürzel ein Kürzel für den jeweiligen Vorlagensatz, abgetrennt durch einen Unterstrich, angehängt, z. B. de_1.
    Dieses Vorgehen hängt allerdings stark vom ausgewählten URL-Creator ab: Default URLs (de, de_1, en, en_1), Infix URLs (abc.de.html, 1/abc.de.html, abc.en.html, 1/abc.en.html), AdvancedURLs (MeinTitel.html, MeinTitel-1.html, MyTitle.html, MyTitle-1.html). Außerdem wird zwischen sprachunabhängigen und sprachabhängigen Medien unterschieden media/de/abc.jpg, media/en/abc.jpg vs. media/bcd.jpg
    Siehe dazu auch Standard-URL-Erzeugung und AdvancedURLs.
  • Projektstruktur: Unterhalb des Sprach-/Vorlagensatz-Verzeichnisses wird die hierarchische Struktur der Struktur-Verwaltung nachgebildet: für jeden freigegebenen Ordner der Struktur-Verwaltung („Menüebene“, siehe Einstellungen auf Menüebene (→Handbuch FirstSpirit SiteArchitect)) wird ein Verzeichnis angelegt, darunter die freigegebene(n) Seitenreferenz(en). Unterhalb des „media“-Ordners wird die hierarchische Struktur der Medien-Verwaltung nachgebildet: für jeden freigegebenen Ordner der Medien-Verwaltung wird ein Verzeichnis angelegt, darunter die freigegebenen Medien. Für sprachabhängige Medien wird für jede Sprache ein eigenes Verzeichnis angelegt und die Medien jeweils darin abgelegt.

Beispiel
für Medien: .../fs5staging/11599/11640/media/de/medien_ordner/bild.jpg
für Inhalte: .../fs5staging/11599/11640/de_1/menueebene_1/seite.html

Wichtig Die Generierungsverzeichnisse können projektspezifisch angepasst werden. Die Strukturen sind damit abhängig von der individuellen Konfiguration im Projekt und können sich von den hier vorgestellten Strukturen unterscheiden.
Wichtig Der Zugriff auf diese Generierungsverzeichnisse ist geschützt, das bedeutet beim Aufrufen dieser Inhalte ist eine Benutzerauthentifizierung erforderlich, sofern dies konfiguriert ist.

Rechte

Um Vollgenerierungen durchführen zu können, werden standardmäßig Server- oder Projekt-Administrator-Rechte benötigt. Ansonsten sind die Menüeinträge „Projekt generieren“ und „Teilprojekt generieren“ im Menü „Projekt“ im SiteArchitect deaktiviert.

Soll ein Redakteur, der keine Administrationsrechte besitzt, eine Voll- und/oder Teilgenerierung starten dürfen, muss er (oder alternativ eine Gruppe) in den Auftrags-Eigenschaften im Bereich „Interaktive Ausführung“ (siehe Generierung ausführen (→Dokumentation für Administratoren)) ausgewählt werden.

© 2005 - 2024 Crownpeak Technology GmbH | Alle Rechte vorbehalten. | FirstSpirit 2024.4 | Datenschutz