Entwickeln Sie Erweiterungen für TYPO3? Dann kennen Sie vielleicht dieses Problem. Ein neues Feld in der Datenbank braucht Änderungen an fünf Stellen. Das kostet sehr viel Zeit. Dabei passieren leicht Fehler. Und die Arbeit ist oft sehr mühsam.
Die gute Nachricht: Zwei neue Wege lösen dieses Problem. Der erste Weg sind Content Blocks für Daten. Der zweite Weg sind PHP 8.4 Property Hooks für Modelle. Beide zusammen sparen bis zu 80 Prozent vom Standard-Code.
Wichtige Begriffe
Wir erklären zuerst einige wichtige Begriffe:
| Begriff | Bedeutung |
|---|---|
| Content Blocks | Die Erweiterung macht automatisch Code für TYPO3. |
| Content Block | Das ist ein einzelner Block für Einstellungen. Er bestimmt genau einen Inhalts-Typ. |
| Content Type | Das ist ein Inhalt in TYPO3. Er hat feste Felder und Regeln. |
| Content Element | Das ist ein Inhalts-Typ für die Internetseite. Er speichert in der Tabelle tt_content. |
| Record Type | Das ist ein Inhalts-Typ für geordnete Daten. |
| Page Type | Dieser Typ bestimmt die Regeln von einer Internetseite. |
| File Type | Das sind zusätzliche Daten für Dateien. Zum Beispiel für Bilder. |
Inhaltsverzeichnis
Begriffe
Erklärung von Content Blocks
Arbeit und Zeit sparen
So viel Code sparen Sie
Fazit
Jetzt anfangen und später Zeit sparen
Was Sie sich an Arbeit sparen
Hier ist eine kurze Übersicht. Welchen Vorteil haben Sie durch Content Blocks?
Arbeit: Alt gegen Content Blocks und PHP 8.4
Das Bild zeigt die Arbeit in Prozent. 1 Prozent bedeutet: Alles passiert automatisch. Ein kleiner Wert ist besser.
| Aufgabe | Der alte Weg | Content Blocks | Gesparte Arbeit |
|---|---|---|---|
| Neues Feld machen | 4-5 Dateien | 1 YAML-Datei | etwa 80 Prozent |
| TCA-Einstellungen | Mit der Hand | Passiert automatisch | 100 Prozent |
| SQL-Datenbank | Datei pflegen | Passiert automatisch | 100 Prozent |
| Neues Content Element | 30 bis 60 Minuten | Unter 5 Minuten | etwa 90 Prozent |
| Feld-Typ ändern | Viele Dateien | 1 Zeile YAML | etwa 95 Prozent |
| Getter/Setter (PHP 8.4) | etwa 20 Zeilen | Hook (3 Zeilen) | etwa 85 Prozent |
Ein normales Inhalts-Element hat oft 5 Felder. Früher brauchten Sie dafür 300 Zeilen Code. Heute brauchen Sie nur 40 Zeilen in einer YAML-Datei. Das macht die Arbeit viel leichter. Und Sie machen weniger Fehler.
Content Blocks installieren
Sie installieren die Erweiterung in wenigen Schritten. Sie können Composer nutzen. Oder Sie nutzen den Extension Manager.
Nutzen Sie den alten Weg? Dann müssen Sie den Ordner ContentBlocks gut sperren. Niemand darf über das Internet auf den Ordner zugreifen. Sonst kann jeder Ihre wichtigen Dateien lesen.
Neue Inhalts-Typen mit der Kommando-Zeile machen
Es gibt den Befehl make:content-block. Er baut auf einer bekannten Erweiterung auf. Der Befehl macht sofort die ganze Struktur für einen neuen Content Block.
Hilfe durch das Programm
Direkter Befehl
Diese Optionen gibt es
| Option | Beschreibung | Beispiel |
|---|---|---|
| --content-type | Art von dem Inhalts-Typ | content-element, page-type, record-type |
| --vendor | Name der Firma | webconsulting |
| --name | Name von dem Content Block | team-member |
| --extension | Erweiterung für den Content Block | my_sitepackage |
| --title | Name im System | Team Member |
| --skeleton-path | Ort für eigene Vorlagen | content-blocks-skeleton |
Nach der Arbeit
Sie können mit --skeleton-path eigene Vorlagen bestimmen. Das ist sehr gut für große Teams. So arbeiten alle mit der gleichen Struktur.
Das Problem: Verstreute Daten
Früher war das bei TYPO3 so. Ein einziges Feld stand in vielen verschiedenen Dateien:
Früher: Ein Feld braucht fünf Änderungen
Sie müssen jede Änderung mit der Hand eintragen. Vergessen Sie eine Stelle? Dann passen die Datenbank und das Formular nicht mehr zusammen. Das führt zu vielen Fehlern.
Die Lösung: YAML-Dateien als einziger Ort für Daten
Mit Content Blocks schreiben Sie alles nur noch an einen Ort. Sie schreiben dort die Struktur und die Regeln auf. Die Erweiterung macht daraus automatisch diese Dinge:
Datenbank-Spalten
Das Programm macht die SQL-Struktur automatisch aus Ihren Feldern.
TCA-Einstellungen
Das Programm baut die Formulare direkt aus der YAML-Datei.
Daten für die Seite
Das Programm gibt die Daten an die Fluid-Vorlagen. Sie machen das nicht mehr mit der Hand.
Der größte Vorteil
| Feature | Der alte Weg | Content Blocks |
|---|---|---|
| Dateien pro Feld | 4 bis 5 Dateien | 1 YAML-Datei |
| Gefahr für Fehler | ✓ | ✕ |
| TCA passiert automatisch | ✕ | ✓ |
| SQL passiert automatisch | ✕ | ✓ |
| Arbeit für die Pflege | Sehr viel | Sehr wenig |
Warum ein einziger Ort für Daten heute so wichtig ist
Künstliche Intelligenz liest heute oft den Code. Sie schreibt den Code auch um. Darum muss der Code sehr gut geordnet sein. Viele Studien zeigen ein Problem. 65 Prozent der Programmierer haben oft zu wenig Informationen beim Arbeiten. Das ist bei verstreutem Code noch viel schlimmer.
Für Künstliche Intelligenz
Eine YAML-Datei hilft Programmen wie Cursor oder Claude. Sie können die ganzen Daten auf einmal lesen. Sie müssen nicht zwischen vielen Dateien suchen. Das Programm versteht alles sofort.
Für Programmierer
Developer Experience heißt auch DX. Das ist das Gefühl beim Programmieren. Teams mit guter DX erreichen ihre Ziele viel öfter. Und die Leute kündigen seltener.
"KI-Programme brauchen einen guten Überblick über den Code. Nur so schreiben sie guten Code. Ist der Code schlecht geordnet? Dann macht die KI viele Fehler."
Es gibt die Regel DRY. Sie bedeutet: Schreiben Sie Dinge nicht doppelt. Das ist heute keine Theorie mehr. Ein zentraler Ort für Daten ist Pflicht. Nur so kann die Künstliche Intelligenz gut helfen.
Code-Beispiel: Team-Mitglied als Inhalts-Element
Hier ist ein Beispiel für ein Team-Mitglied. Sie brauchen nur eine YAML-Datei:
Sie sagen, was Sie brauchen. Sie sagen nicht, wie TYPO3 es machen soll. Das macht die Arbeit sauberer und besser für die Zukunft.
Record Types: Eigene Daten machen
Content Blocks machen nicht nur Elemente in tt_content. Mit Record Types machen Sie eigene Tabellen in der Datenbank. Das ist perfekt für Nachrichten, Produkte oder Termine.
Wir bieten eine Hilfe für alte Erweiterungen an. Es ist ein Werkzeug für KI-Programme wie Cursor oder Claude Code. Es ändert alten Code zu Content Blocks. Es ändert Content Blocks auch wieder zu altem Code. Das Werkzeug ist neu. Wir freuen uns über Rückmeldungen.
Content Elements und Record Types im Vergleich
| Feature | Content Elements | Record Types |
|---|---|---|
| Tabelle | tt_content | Neue oder alte Tabelle |
| Anzeige | Direkt auf der Seite | Mit Plugin oder Vorlage |
| Ort | Im Inhalt der Seite | In Ordnern |
| Nutzen | Sichtbare Teile der Seite | Geordnete Daten |
| Beispiele | Knopf, Bild, Text | Nachrichten, Produkte, Termine |
| Ordner | ContentBlocks/ContentElements/ | ContentBlocks/RecordTypes/ |
Sie können mit typeName neue Typen zu alten Tabellen geben. Zum Beispiel einen neuen Nachrichten-Typ für tx_news_domain_model_news.
Richtige Namen für Tabellen
Wichtig: Sie müssen die Namen richtig wählen. Nutzen Sie die Regel tx_extensionkey_domain_model_*. Nur dann funktionieren die Extbase-Programme richtig.
Beispiel: Nachrichten als Record Type
Hier ist ein Beispiel für Nachrichten in einer YAML-Datei:
Früher brauchten Sie etwa 170 Zeilen Code und viele Dateien. Mit Content Blocks brauchen Sie nur eine YAML-Datei.
Page Types: Eigene Seiten-Typen machen
Page Types geben der Tabelle für Seiten neue Typen. Das ist sehr gut für Blog-Texte, Startseiten oder Nachrichten-Seiten.
Wann Sie Page Types nutzen
Feste Felder für Seiten
Manche Seiten brauchen immer die gleichen Felder. Zum Beispiel den Autor oder ein Bild. Dann nutzen Sie Page Types.
Arbeit mit Plugins
Plugins können Page Types gut lesen. Das hilft bei Listen für Nachrichten oder Termine.
Beispiel: Blog-Artikel als Page Type
Nutzen Sie eine genaue Nummer für die aktuelle Zeit als typeName. Der Befehl make:content-block macht das automatisch. Die Nummern 199 und 254 sind verboten.
Anzeige auf der Internetseite
Page Types zeigen den Inhalt nicht von alleine. Sie müssen diesen Code nutzen:
Danach können Sie alle Felder in der Vorlage nutzen. Zum Beispiel {data.author_name} oder {data.hero_image}.
File Types: Mehr Daten für Dateien
Seit Content Blocks Version 1.2File Types geben der Tabelle für Dateien neue Felder. Das ist perfekt für den Namen vom Fotografen oder für Bildrechte.
Diese Datei-Typen gibt es
| typeName | Datei-Typen |
|---|---|
image | JPEG, PNG, GIF, WebP, SVG |
video | MP4, WebM, OGG |
audio | MP3, WAV, OGG |
text | TXT, PDF, Markdown |
application | ZIP, Office-Formate |
Beispiel: Mehr Daten für Bilder
Das ist sehr gut für Firmen mit strengen Regeln für Bilder. Sie speichern die Rechte direkt bei dem Bild.
PHP 8.4: Property Hooks machen den Code kürzer
Früher gab es im Code sehr viele Getter-Methoden und Setter-Methoden. Das sind bestimmte Funktionen zum Lesen und Schreiben. PHP 8.4 Property Hooks ändern das komplett.
Der Wechsel
Die Vorteile von Property Hooks
| Bereich | PHP 8.3 | PHP 8.4 |
|---|---|---|
| Zeilen von Code | Etwa 35 Zeilen | Etwa 25 Zeilen |
| Ort der Regeln | In extra Methoden | Direkt bei der Eigenschaft |
| Virtuelle Eigenschaften | Nur über Getter | Direkte Unterstützung |
| Lernen | Bekanntes System | Neues System |
Sie brauchen dafür PHP 8.4. Haben Sie eine ältere Version? Dann müssen Sie den alten Weg nutzen. Bitte planen Sie Ihr Update genau.
Das können Sie mit Property Hooks machen
Das perfekte Team: Content Blocks und Property Hooks
Beide Techniken zusammen teilen die Arbeit klar auf:
Statt 300 Zeilen Code: 40 Zeilen YAML und etwas Logik
Das Ergebnis:
- YAML bestimmt die Datenstruktur an einem Ort.
- PHP Modelle enthalten nur noch die Logik der Anwendung.
- Kein Standard-Code mehr für TCA, SQL oder Getter.
Der Programmierer butu zeigt das in einem guten Beispiel. Er nutzt 4 Modelle und nur eine einzige TCA-Datei. Sie müssen bei Änderungen nur 2 Dateien anpassen. Das sind die config.yaml und die Model.php.
Weitere Befehle für die Kommando-Zeile
Content Blocks hat noch weitere nützliche Befehle:
| Befehl | Aufgabe |
|---|---|
| content-blocks:list | Zeigt alle fertigen Content Blocks |
| content-blocks:language:generate | Macht Sprach-Dateien für alle Felder |
| content-blocks:assets:publish | Kopiert Dateien in den öffentlichen Ordner |
Mehrere Sprachen nutzen
Content Blocks macht Mehrsprachigkeit sehr einfach. Sie verwalten alle Übersetzungen zentral. Das passiert in einer labels.xlf Datei.
Struktur der Ordner
Texte in Vorlagen nutzen
Mehrere Sprachen für Record Types
Sie müssen languageAware in der config.yaml einschalten:
Nutzen Sie den Befehl vendor/bin/typo3 content-blocks:language:generate. Er macht automatisch labels.xlf Dateien für alle Felder.
Werkzeuge und Hilfen
Beispiel von butu
Die wp_cbexample Erweiterung zeigt das perfekte Zusammenspiel sehr gut. Sie hat 4 Modelle und nur eine TCA-Datei. Das ist ein sehr gutes Beispiel für moderne Programmierung in TYPO3.
Hilfe für KI-Programme
Das Content Blocks Werkzeug hilft Programmen wie Cursor und Claude Code. Es enthält viele gute Vorlagen und Beispiele.
wp_make Erweiterung
Die wp_make Erweiterung macht automatisch Extbase-Modelle passend zu Ihren Daten.
Offizielle Texte
Die TYPO3 Content Blocks Dokumentation zeigt Ihnen alle Regeln für YAML und das System.
Fazit: Jetzt anfangen und später Zeit sparen
Sofort nutzbar
Content Blocks funktionieren schon heute mit TYPO3. Fangen Sie neue Projekte direkt mit dem neuen Weg an.
Gut für die Zukunft
Wir empfehlen diesen Weg. PHP 8.4 Property Hooks und Content Blocks haben viele Vorteile. Eine feste Übernahme in TYPO3 Version 14 macht diesen Weg sehr sicher.
Das Team aus TYPO3 Content Blocks und PHP 8.4 Property Hooks ist sehr stark. Es spart Ihnen viel Zeit beim Programmieren. Und Sie können Ihre Systeme später viel leichter pflegen.