Mit TypoScript Konstanten in TYPO3 definieren

Bei der Einbindung von Extensions, vor allem beim Überschreiben von Templates mit eigenen Layouts ist es oft notwendig, Konstanten in TYPO3 zu setzen. Da gibt es z. B. die Möglichkeit, Speicherorte für bestimmte Daten zu definieren. Ein oft angewendeter Fall ist jedoch, dass man Standardvorlagen in einer Extension hat und einige von diesen bearbeitet, um eigene Designs zu erzielen.

Hier nun ein paar Vorlage, wie man Constants in TypoScipt setzt.

StoragePID: Speicherort als Konstante definieren

Settings für eine Extension wie z. B. der Speicherort für Daten oder die PageUIDs für bestimmte Seiten können in der Setup Datei des TypoScript der Webseite oder einer Extension abgefragt werden. Als Beispiel dient hier der Blog auf unserer Agenturwebseite.

In den Constants, die wir auch in einer Datei abspeichern und einbinden können, haben wir die Möglichkeit, die Speicherorte für Daten und Seiten IDs für Links festzulegen. Diese Daten können Sie für jede Installation unterschiedlich speichern - denn je nachdem, ob Sie auf der lokalen Version, dem Staging oder Live Server arbeiten, haben Sie unterschiedliche UIDs der Seiten. Und genau mit dieser Option lassen sich diese dem System mitteilen:

plugin.tx_ibkblog {
  persistence {
    # cat=plugin.tx_ibkblog//a; type=string; label=Default storage PID Blog Data:Speicherort für die Daten des Blog
    storagePid = 49
  }
  pages {
    # PageUID for login; label=Default UID Login Page:UID der Seite für das Login zum Blog
    pageLoginUID = 75
    # PageUID for Start page Blog; label=Default UID Start Page for Blog:UID der Startseite für den Blog
    pageStartUID = 75
  }
}

Im Setup werden diese Daten dann ausgelesen:

plugin.tx_ibkblog {
  settings {
    storagePid = {$plugin.tx_ibkblog.persistence.storagePid}
    pageLoginUID = {$plugin.tx_ibkblog.pages.pageLoginUID}
    pageStartUID = {$plugin.tx_ibkblog.pages.pageStartUID}
  }
}

Dieser Code Block ist bei allen Installationen identisch. Damit haben Sie eine einfache Möglichkeit geschaffen, an zentraler Stelle Werte für die gesamte Webseite zu setzen.

Suchpfade für eigene Layouts in TypoScript setzen

Eine weitere Möglichkeit, um eine Webseite mit eigenen Layouts zu versehen, ist das Einbinden eigener Suchpfade für Extensions. Wenn man beliebte Erweiterungen wie die News Extension einbindet, so hat eine solche Extension oft schon eine Reihe von Vorlagen für Ansichten. In diesem Fall handelt es sich z. B. um die Listen- und die Artikelansicht von Nachrichten. Oft hat man den Auftrag, diese Ansichten anzupassen. Dabei ist es meist nicht notwendig, alle Ansichten anzupassen. Man zieht sich also eine Kopie der zu bearbeitenden Templates und Partials ab in einem eigenen Verzeichnis ab. Dieses bietet man TYPO3 dann mit einem Suchpfad an.

Der Vorteil bei diesem Verhalten: Man kann die Extension (fast) jederzeit updaten und behält die eigenen Vorlagen bei. Fast, weil man natürlich überprüfen muss, ob es in der Original Extension neue Templates gibt.

Der Trick dabei: Man vergibt für den eigenen Suchpfad eine höhere ID als die ID aus der Extension. Damit bewegt man TYPO3 bei der Generierung einer Ansicht, erst im eigenen Verzeichnis nachzusehen, ob es dort eine Vorlage gibt. Existiert z. B. die Listenansicht, so wird diese genommen. Gibt es keine eigene Datei für die Vorlage, wird die Ansicht aus der Extension genommen.

Im Original finden sich dann Suchpfade wie diese hier (Beispiel):

plugin.tx_news {
  view {
    # cat=plugin.tx_news/file; type=string; label=Path to template root (FE)
    templateRootPath = EXT:news/Resources/Private/Templates/
    # cat=plugin.tx_news/file; type=string; label=Path to template partials (FE)
    partialRootPath = EXT:news/Resources/Private/Partials/
    # cat=plugin.tx_news/file; type=string; label=Path to template layouts (FE)
    layoutRootPath = EXT:news/Resources/Private/Layouts/
  }
}

Diese Vorlage kann man nun mit eigenen Suchpfaden überschreiben, die eine hörere ID beinhalten:

plugin.tx_news {
  view {
    # cat=plugin.tx_news/file; type=string; label=Path to template root (FE)
    templateRootPaths {
      10 = EXT:ibkprovider/Resources/Private/News/Templates/
    }
    # cat=plugin.tx_news/file; type=string; label=Path to template partials (FE)
    partialRootPaths {
      10 = EXT:ibkprovider/Resources/Private/News/Partials/
    }
    # cat=plugin.tx_news/file; type=string; label=Path to template layouts (FE)
    layoutRootPaths {
      10 = EXT:ibkprovider/Resources/Private/News/Layouts/
    }
  }
}

Somit verfügt man über einen Speicherort für eigene Templates, Partials und Layouts. Hier kann man nun die Kopien der Originale einbinden und überarbeiten.

Thomas Berscheid ⧉ 07.08.2020