Weitere Artikel aus dem Foto Blog

Das System der Arbeitsumgebungen (Workspaces) in TYPO3 ist so angelegt, dass auch ältere Extensions damit ohne größere Probleme funktionieren. Allerdings heißt dies nicht, dass sie das Workspace-Konzept auch komplett unterstützen. Im Normalfall ist das Frontend OK, aber im Backend sowie bei der Preview-Funktion kommt es zu Unstimmigkeiten. Der erste Teil dieser kleinen Reihe befasst sich mit den Workspaces im Frontend.

Für den korrekten Umgang mit Workspaces sind daher bei der Extension-Entwicklung einige Besonderheiten zu beachten: Tabellen

Zunächst muss bereits beim Anlegen der Tabellen im Kickstarter die Option für die Versionierung aktiviert werden. Dies erzeugt einige zusätzliche Felder in der Tabelle, die für die Verwaltung der Versionen wichtig sind.

Frontend Preview

Um die Preview im Frontend zu unterstützen, holen Sie in der Extension zunächst den Seiteninhalt und rufen dann die Funktion $GLOBALS['TSFE']->sys_page->versionOL() auf. Diese liest die für den aktuellen Workspace bzw. die Preview zutreffenden Versionen des Datensatzes aus der Tabelle.

Ist die Preview-Version auf hidden gesetzt, wird dies von versionOL() korrekt erkannt und die Ausgabe unterbunden.

Problematischer ist es, wenn beispielsweise die aktuell aktive Variante auf hidden gesetzt ist oder allgemein wegen der enableFields()-Konfiguration nicht angezeigt wird, die Preview-Version dagegen durchaus erscheinen soll. In diesem Fall gibt es keinen Seiteninhalt, der an versionOL() übergeben werden kann.

Um dieses Problem zu lösen, darf der Check auf enableFields() oder hidden nicht bereits bei der Auswahl der Inhalte erfolgen, sondern erst in den Datensätzen, die versionOL() zurückliefert.

Insgesamt gelten für die Implementierung der Frontend-Darstellung folgende Regeln:
  • - Werden Datensätze unabhängig von enableFields() ausgewählt, muss als Mindestbedingung t3ver_state!=1 verwendet werden, damit keine Platzhalter-Datensätze selektiert werden.
  • - Es sollten nie Datensätze mit der Parent-ID (pid) -1 ausgewählt werden. Dies sind Offline-Datensätze der Versionierung.
Die folgenden Funktionen und Eigenschaften unterstützen Sie beim Umgang mit Workspaces im Frontend:

Wenn $GLOBALS['TSFE']->sys_page->versioningPreview den Wert true hat, dürfen Sie Previews anderer Datensatz-Versionen anzeigen.

Beispiel:

$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(...);
while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))      {
$GLOBALS['TSFE']->sys_page->versionOL($table,$row);
if (is_array($row))     {
...

$unsetMovePointers kann auf true gesetzt werden, wenn die Reihenfolge in der Anzeige der Datensätze nach dem Verschieben von Inhalten durcheinander geraten ist

$GLOBALS['TSFE']->sys_page->fixVersioningPid() findet die aktuelle Online-Pid für einen Offline-Datensatz (d. h. die ID, die der Datensatz beim Veröffentlichen erhalten würde). Wenn ein Datensatz offline ist, hat er immer die Pid -1. $GLOBALS['TSFE']->sys_page->versioningWorkspaceId enthält die ID der Arbeitsumgebung, in der der Backend-Benutzer sich aktuell befindet.

$GLOBALS['TSFE']->sys_page->versionOL($table, &$row, $unsetMovePointers=FALSE): Diese Funktion holt das Overlay für die Preview-Version. Sie sollte immer verwendet werden, wenn Datensätze über die uid oder pid ausgewählt werden.  Erfolgt die Auswahl aufgrund anderer Kriterien, führt der Aufruf nicht immer zum erwünschten Ergebnis. In solchen Fällen müssen Sie die Verwendbarkeit einzeln testen.

Tipp: Selbst wenn alle Regeln beachtet werden, ist eine Preview nicht immer korrekt, beispielsweise wenn die Ergebnisse von Suchanfragen dargestellt werden. Das ist aber kein Problem der Extension, sondern resultiert aus der Art der Workspace-Implementierung. Dieser Text ist dem Buch “Extensions für TYPO3” von Robert Steindl entnommen, das im Franzis-Verlag erschienen ist. Das Buch ist hier direkt bestellbar.

Kundenkommentare
Kontakt
Warenkorb: 0 Artikel
Gesamtwert: EUR 0,00
Home TYPO3 & Drupal  Workspaces in TYPO3 - Teil I