Alternative zu Frontend Plugins

TYPO3 bietet bereits zahlreiche Inhaltselemente um seine Webseite mit Inhalten zu sinnvoll zu füllen. Wenn man neue Inhaltselemente braucht, dann greift man entweder auf Extensions wie DCE zurück oder mach erstellt seine eigenen Frontend Plugins. Das geht sehr einfach und relativ schnell mit dem Extension Builder. Das zeige ich in meiner Tutorial Serie für Einsteiger: Kickstart eine TYPO3 Extension.

Aber was gibt es noch für Möglichkeiten um Extensions zu schreiben bzw. um dynamische Inhalte auf seiner TYPO3 Webseite zu bringen? Diese Frage kläre ich in diesem Tutorial.

Wenn man andere Inhaltselemente braucht, dann ist meiner Meinung nach die Erstellung eines neuen Frontend Plugins die beste Variante. Dennoch kann es Situationen geben, wo man eine Alternative braucht. Beispielweise um vorhandene Skripte zeitnah in TYPO3 auszuführen. Ich möchte dir Alternativen aufzeigen, wie du in TYPO3 Inhalte anzeigen lassen kannst.

Content Objects

Content Objects werden von dem sogenannten Content Object Renderer verarbeitet. Diese Verarbeitung lässt Content Objects im Frontend sichtbar werden. Der Content Object Renderer ist nichts exotisches oder neues. Dieser wird in TYPO3 ohnehin genutzt um Inhaltselemente zu rendern. Wenn man in TypoScript ein Content Object hat, dann kann man ihn in Fluid sehr schnell ausgeben lassen. Dadurch spart man sich den Overhead eines Frontend Plugins, welcher das MVC Modell vollständig implementiert haben muss.

Die Einbindung ist einfach. Man benötigt im TypoScript ein Content Object. In TYPO3 liest man sehr oft die Kurzform: cObjects. Viele TypoScript Objekte sind entweder von einem Content Object abgeleitet oder enthalten einen. Beispiele sind:

  • RECORDS
  • CONTENT
  • COA / COA_INT (Content Object Array)
  • USER / USER_INT (PHP Skript)

Alle diese Objekte lassen sich direkt im Frontend über Fluid rendern. Dafür gibt es einen ViewHelper:

<f:cObject typoscriptObjectPath="lib.someLibObject" />

Hier ein paar einfache Beispiele:

Ausgabe eines konkreten Inhaltselementes (ID: 1)

TypoScript Teil:

lib.exampleRecord = RECORDS
lib.exampleRecord {
    source = 1
    tables = tt_content
    dontCheckPid = 1
}

Fluid Teil:

<f:cObject typoscriptObjectPath="lib.exampleRecord" />

Ausgabe alle Inhaltselemente einer Inhaltsspalte (colPos: 0)

TypoScript Teil

lib.contentExample = CONTENT
lib.contentExample {
        table = tt_content
        select {
            includeRecordsWithoutDefaultTranslation = 1
            orderBy = sorting
            where = colPos=0
        }
}

Fluid Teil:

<f:cObject typoscriptObjectPath="lib.contentExample" />

Ausgabe vieler Content Objects

TypoScript Teil:

lib.coaExample = COA (Alternativ: COA_INT)
lib.coaExample {
    10 = RECORDS
    10 {
        source = 1
        tables = tt_content
        dontCheckPid = 1
    }

    20 = CONTENT
    20 {
        table = tt_content
        select {
            includeRecordsWithoutDefaultTranslation = 1
            orderBy = sorting
            where = colPos=0
        }
    }
}

Fluid Teil:

<f:cObject typoscriptObjectPath="lib.coaExample" />

Ausgabe eines PHP Skriptes

TypoScript Teil:

lib.examplePHPScript = USER (Alternativ: USER_INT)
lib.examplePHPScript {
    userFunc = Slavlee\PHPScripts\Example->index
}

Es ist wichtig, dass im Autoloader der Namespace Pfad geladen wird. Das geht entweder indem man eine ordentlichen Extension schreibt und den Autoloader nutzt oder in dem man manuell diesen Eintrag in der Autoload Datei vornimmt. Die liegt unterhalb von typo3conf/autoload ab. Wenn man keine eigene Extension schreiben möchte, dann muss man die PHP Datei mit dieser Klasse unterhalb von fileadmin Ordner ablegen.

PHP Skript:

/**
 * Echo: Hello World
 * @param  string          Empty string (no content to process)
 * @param  array           TypoScript configuration
 * @return string
 */
public function index($content, array $conf)
{
    return 'Hello World!';
}

Fluid Teil:

<f:cObject typoscriptObjectPath="lib.examplePHPScript" />

Du siehst es gibt viele Varianten Inhalte in TYPO3 anzeigen zu lassen. Alle diese Beispiele gehen davon aus, daß du die Templatedateien erweiterst und dort den FluidHelper Eintrag an der gewünschten Stelle vornimmst.

Man kann auch via TypoScript eine Ausgabe erreichen. Das geht über das PAGE Objekt und die dortigen Anzeigenummern. Jedes TYPO3 Template nutzt dieses Objekt um das Template und die Templatedateien zu rendern. In TYPO3 hat sich die Anzeigenummer 10 dafür durchgesetzt. Es ist zwar keine Pflicht, aber gängige Praxis, dass dort ein Objekt: FLUIDTEMPLATE abgelegt ist.

Wir können nun entweder diese Nummer ersetzen und die gesamte Ausgabe auf unsere Inhaltselemente oder PHP Skripte beschränken oder weitere Anzeigenummern erstellen und die Ausgabe dieser Elemente nach oder vor dem Seitentemplate erreichen. Dazu benötigen wir nur wenige Zeilen TypoScript und müssen keine Templatedatei verändern:

Ersetzen des Seitentemplates

Entfernen der Seitentemplate Ausgabe:

page.10 > 

Ersetzen durch Ausgabe eines PHP Skriptes:

page.10 = USER
page.10 {
    userFunc = Slavlee\PHPScripts\Example->index
}

Hinzufügen neuer Inhalte

page.20 = USER
page.20 { 
    userFunc = Slavlee\PHPScripts\Example->index 
}

Die Ausgabenummer 20 darf nicht vorher belegt sein. Man kann jede beliebige unbelegte Ausgabeziffer nutzen. Die Höhe der Ausgabenummer bestimmt die Sortierung. Je kleiner die Zahl desto früher wird das Objekt im HTML Dokument eingebunden.

Fazit

Du siehst es gibt viele Wege Inhalte auf einer TYPO3 Seite zu bringen. Man muss nicht immer eine vollwertige Extension mit Frontend Plugin schreiben. Es lassen sich einzelne Inhaltselemente oder andere Content Objects, wie Menüs, als auch ganze externe PHP Skripte via Fluid oder TypoScript einbinden.

Lerne ein TYPO3 V9 Template zu programmieren

Erstelle professionelle TYPO3 Templates.

Du wirst unter anderem lernen:

  • Erstellung eines TYPO3 Templates als eigenständige Extension
  • Erstellen von eigenen Inhaltselementen
  • Erstellen von Backend Modulen

Ich zeige dir ebenfalls, wie du deinen Redakteuren die Möglichkeit geben kannst, Einfluss auf das TYPO3 Template zu nehmen.

Du erhälst weltweiten Zugriff auf allen Geräten mit einer einmaligen Buchung. Es gibt keine versteckten Kosten oder Abofallen! Alles einfach und transparent dank Udemy.

Hier geht es zum Kurs