TYPO3 Content Blocks und PHP 8.4 Property Hooks: Weniger Code, mehr Kontrolle

Wie YAML-Definitionen und PHP 8.4 Property Hooks zusammen bis zu 80% Boilerplate eliminieren – für bessere DX und KI-Lesbarkeit.

Auf einen Blick

  • Content Blocks generieren TCA, SQL und Backend-Formulare aus einer einzigen YAML-Datei – bis zu 80 % weniger Boilerplate.
  • PHP 8.4 Property Hooks ersetzen klassische Getter/Setter durch deklarative get/set-Blöcke direkt an der Property.
  • Content Elements für Seiteninhalte, Record Types für strukturierte Daten, Page Types und File Types für spezielle Anforderungen.
  • Beide Ansätze zusammen verbessern die KI-Lesbarkeit der Codebase erheblich.

Wer TYPO3-Extensions entwickelt, kennt das Szenario: Ein neues Datenbankfeld bedeutet Änderungen an fünf verschiedenen Stellen – ext_tables.sql, TCA-Konfiguration, Domain-Model, Repository und Fluid-Template. Das kostet Zeit, provoziert Inkonsistenzen und macht Wartung zum Geduldspiel.

Die gute Nachricht: Zwei moderne Ansätze eliminieren diesen Overhead: Content Blocks für deklarative Datenstrukturen und PHP 8.4 Property Hooks für schlanke Domain-Models. Zusammen reduzieren sie Boilerplate um bis zu 80%.

Terminologie  

Bevor wir starten, eine kurze Begriffsklärung:

BegriffBedeutung
Content BlocksDie Extension, die Code für die TYPO3 Core API generiert
Content BlockEine einzelne Konfigurationseinheit, die genau einen Content Type definiert
Content TypeEine Entität in TYPO3 mit definierten Feldern und Verhalten
Content ElementContent Type mit Frontend-Rendering (in tt_content)
Record TypeGenerischer Content Type für strukturierte Daten
Page TypeContent Type, der das Verhalten einer Webseite definiert
File TypeErweiterte Metadaten für Dateien (in sys_file_reference)

Inhaltsverzeichnis  


Was Sie sich konkret ersparen  

Zunächst ein Überblick: Was bringt Ihnen der Umstieg auf Content Blocks?

Aufwand: Klassisch vs. Content Blocks + PHP 8.4

Relativer Aufwand in Prozent – 1% steht für vollständig automatisiert (kein manueller Aufwand). Kleiner ist besser.

AufgabeKlassischContent BlocksReduktion
Neues Feld hinzufügen4-5 Dateien1 YAML-Datei~80%
TCA-KonfigurationManuell (50-100 Zeilen)Automatisch generiert100%
SQL-Schemaext_tables.sql pflegenAutomatisch generiert100%
Neues Content Element30-60 Min.< 5 Min. (CLI)~90%
Feld-Typ ändernTCA + SQL + Model1 Zeile YAML~95%
Getter/Setter (PHP 8.4)~20 Zeilen/FeldProperty Hook (3 Zeilen)~85%
Das Ergebnis

Ein typisches Content Element mit 5 Feldern reduziert sich von ~300 Zeilen Boilerplate auf ~40 Zeilen deklarative YAML-Definition. Die Wartung wird planbar, Fehlerquellen sinken drastisch.


Content Blocks installieren  

Installieren Sie in wenigen Schritten – je nach Setup über Composer oder den Extension Manager.

Sicherheitshinweis für Classic Mode

Blockieren Sie im Classic Mode unbedingt den Zugriff auf den ContentBlocks-Ordner über den Webserver. Andernfalls sind interne Konfigurationsdateien öffentlich zugänglich.


Neue Content Types per CLI erstellen  

Das make:content-block-Kommando – inspiriert von der bewährten EXT:make Extension – generiert die komplette Grundstruktur für einen neuen Content Block in Sekunden.

Interaktiver Modus  

Direkter Aufruf mit Parametern  

Verfügbare Optionen  

OptionBeschreibungBeispiel
--content-typeArt des Content Typescontent-element, page-type, record-type
--vendorVendor-Name (lowercase, kebab-case)webconsulting
--nameName des Content Blocksteam-member
--extensionHost-Extension für den Content Blockmy_sitepackage
--titleAnzeigename im BackendTeam Member
--skeleton-pathPfad zu Custom-Templatescontent-blocks-skeleton

Nach der Erstellung  

Tipp: Skeleton-Templates

Mit --skeleton-path können Sie eigene Vorlagen definieren. Ideal für Teams, die einheitliche Strukturen über alle Content Blocks hinweg durchsetzen möchten.


Das Problem: Fragmentierte Wahrheit  

In klassischen TYPO3-Extensions verteilt sich die Definition eines einzelnen Feldes über mehrere Dateien:

Traditionell: Ein Feld, fünf Anpassungen

Jede Änderung erfordert manuelle Synchronisation. Vergessen Sie eine Stelle, drohen Diskrepanzen zwischen Datenbankschema und Backend-Formular – ein klassischer Nährboden für Bugs.


Die Lösung: YAML als Single Point of Truth  

Mit der Content Blocks Extension definieren Sie Struktur, Typ und Validierung an einer einzigen Stelle. Die Extension generiert daraus automatisch:

Datenbank-Spalten

Erstellt die SQL-Struktur automatisch aus Ihren Felddefinitionen.

TCA-Konfiguration

Leitet Backend-Formulare direkt aus der YAML-Definition ab.

Frontend-Daten

Stellt Daten strukturiert für Fluid-Templates bereit – ohne manuelles Mapping.

Der zentrale Vorteil  

FeatureKlassischContent Blocks
Änderungsstellen pro Feld4-5 Dateien1 YAML-Datei
Risiko von Inkonsistenzen
Automatische TCA-Generierung
Automatische SQL-Generierung
WartungsaufwandHochMinimal

Warum Single Source of Truth in Zeiten von KI-Agents unverzichtbar ist  

In einer Ära, in der KI-gestützte Coding-Agents zunehmend Code analysieren, erweitern und refaktorieren, entscheidet die Codebase-Struktur über den Erfolg. Studien zeigen: 65% der Entwickler:innen erleben fehlenden Kontext beim Refactoring – ein Problem, das sich mit fragmentiertem Code potenziert.

Für KI-Agents

Eine zentrale YAML-Definition ermöglicht es Tools wie Cursor oder Claude, die gesamte Datenstruktur in einem Durchgang zu erfassen. Kein Springen zwischen TCA, SQL und Model-Dateien – der Agent versteht sofort, was definiert ist.

Für Entwickler:innen

Developer Experience (DX) beschreibt die Gesamtheit aller Interaktionen mit Tools, Prozessen und Code. Laut Gartner erreichen Teams mit hoher DX 33% häufiger ihre Geschäftsziele und zeigen 20% geringere Fluktuation.

"AI agents rely on the context provided by the codebase to generate relevant code. A poorly organized codebase can lead to 'context rot,' where the agent misses dependencies and produces suboptimal code."

PropelCode: Structuring Codebases for AI Tools

Kernaussage

Das DRY-Prinzip und Single Source of Truth sind keine abstrakten Best Practices mehr – sie sind die Voraussetzung dafür, dass KI-Agents Ihre Codebase produktiv erweitern können.


Code-Beispiel: Team-Mitglied als Content Element  

Definieren Sie ein Content Element für Teammitglieder – eine YAML-Datei genügt:

Deklarativ statt imperativ

Sie beschreiben was Sie brauchen, nicht wie TYPO3 es intern verarbeiten soll. Das macht Extensions sauberer, portabler und zukunftssicher.


Record Types: Eigene Datensätze definieren  

Die Content Blocks Extension beschränkt sich nicht auf Content Elements in tt_content. Mit Record Types erstellen Sie eigene Datenbanktabellen – ideal für News, Produkte, Events oder andere strukturierte Daten.

Migration zwischen klassisch und Content Blocks

Für bestehende Extensions bieten wir einen Migration Skill für KI-Coding-Agents wie Cursor oder Claude Code. Der Skill enthält bidirektionale Anleitungen: von klassischem TCA/SQL zu Content Blocks – und bei Bedarf auch zurück. Status: Alpha – Feedback willkommen.

Content Elements vs. Record Types  

FeatureContent ElementsRecord Types
Tabellett_contentNeue oder bestehende Tabelle
RenderingDirekt auf der SeiteVia Plugin oder eigenes Template
PlatzierungIm SeiteninhaltIn Ordnern (SysFolders)
AnwendungsfallVisuelle SeitenkomponentenStrukturierte Datensätze
BeispieleHero, Akkordeon, Tabs, CTANews, Produkte, Events, Standorte
OrdnerContentBlocks/ContentElements/ContentBlocks/RecordTypes/
Record Types können bestehende Tabellen erweitern

Mit typeName fügen Sie eigene Typen zu bestehenden Tabellen hinzu – z.B. einen Custom-News-Typ für tx_news_domain_model_news.

Extbase-kompatible Tabellenbenennung  

Wichtig: Für die nahtlose Integration mit Extbase-Repositories verwenden Sie die Namenskonvention tx_extensionkey_domain_model_*. Nur so funktionieren Model-Generatoren und Repositories korrekt.

Beispiel: News-Artikel als Record Type  

Ein vollständiges News-System in einer YAML-Datei:

Was Sie sich sparen

Klassisch benötigen Sie dafür ~150 Zeilen TCA, ~20 Zeilen SQL und separate Model- sowie Repository-Klassen. Mit Content Blocks: eine YAML-Datei.


Page Types: Eigene Seitentypen definieren  

Page Types erweitern die pages-Tabelle um eigene Seitentypen – ideal für Blog-Artikel, Landing Pages, News-Seiten oder andere Seitenarten mit speziellen Eigenschaften.

Wann Sie Page Types einsetzen  

Strukturierte Seiteneigenschaften

Wenn Seiten feste Felder benötigen (Autor:in, Teaser-Bild, Veröffentlichungsdatum), die auf jeder Seite dieses Typs erscheinen.

Plugin-Integration

Plugins können Page Types auslesen – ideal für News-Listen, Blog-Archive oder Event-Kalender.

Beispiel: Blog-Artikel als Page Type  

typeName als Unix-Timestamp

Verwenden Sie den aktuellen Unix-Timestamp als typeName – das CLI-Kommando make:content-block generiert diesen automatisch. Reservierte Werte: 199, 254.

Frontend-Template einbinden  

Page Types bieten kein automatisches Frontend-Rendering. Fügen Sie den ContentBlocksDataProcessor zu Ihrem TypoScript hinzu:

Danach stehen alle Felder im Template unter {data.author_name}, {data.hero_image} etc. zur Verfügung.


File Types: Erweiterte Datei-Metadaten  

Seit Content Blocks v1.2

File Types erweitern die sys_file_reference-Tabelle um eigene Felder – perfekt für Fotograf:in, Copyright-Hinweise oder zusätzliche Bildoptionen.

Verfügbare Dateitypen  

typeNameDateitypen
imageJPEG, PNG, GIF, WebP, SVG
videoMP4, WebM, OGG
audioMP3, WAV, OGG
textTXT, PDF, Markdown
applicationZIP, Office-Formate

Beispiel: Erweiterte Bild-Metadaten  

Anwendungsfall

Besonders nützlich für Agenturen und Unternehmen mit strengen Bildrechte-Anforderungen: Copyright und Quellenangaben werden direkt bei der Datei gespeichert.


PHP 8.4: Property Hooks ersetzen Getter & Setter  

Ein erheblicher Teil klassischer Extbase-Models besteht aus repetitiven Getter- und Setter-Methoden. PHP 8.4 Property Hooks ändern das fundamental.

Der Paradigmenwechsel  

Konkrete Vorteile von Property Hooks  

AspektPHP 8.3PHP 8.4
Code-Zeilen (Beispiel oben)~35 Zeilen~25 Zeilen
Logik-LokationIn separaten MethodenDirekt an der Property
Virtual PropertiesNur über GetterNative Unterstützung
LernkurveBekanntes PatternNeues Konzept
Kompatibilität beachten

Property Hooks sind ein PHP 8.4 Feature. Projekte auf PHP 8.3 oder älter benötigen weiterhin klassische Getter/Setter. Planen Sie Ihr Upgrade entsprechend.


Was Property Hooks ermöglichen  


Die Synergie: Content Blocks + Property Hooks  

Die Kombination beider Technologien führt zu einer klaren Aufgabenteilung:

Statt 300 Zeilen Boilerplate: 40 Zeilen YAML + optionale Geschäftslogik

Das Ergebnis:

  • YAML definiert die Datenstruktur (Single Point of Truth)
  • PHP Models enthalten nur noch Geschäftslogik (Property Hooks)
  • Kein Boilerplate mehr für TCA, SQL oder triviale Getter/Setter
Praxisbeispiel: 2 Dateien statt 5

butu demonstriert in seiner wp_cbexample Extension eindrucksvoll: 4 vollständige Domain Models mit nur einer einzigen manuellen TCA-Datei (für die Plugin-Registrierung). Neue Properties erfordern Änderungen an nur 2 Dateien: config.yaml und Model.php.


Weitere CLI-Befehle im Überblick  

Content Blocks bietet neben make:content-block weitere nützliche Kommandos:

BefehlFunktion
content-blocks:listListet alle registrierten Content Blocks auf
content-blocks:language:generateGeneriert Sprachdateien für alle Felder
content-blocks:assets:publishPubliziert Assets (CSS/JS) in den öffentlichen Ordner

Internationalisierung (i18n)  

Content Blocks vereinfacht die Mehrsprachigkeit erheblich. Labels und Übersetzungen verwalten Sie zentral in einer labels.xlf im Content Block-Ordner.

Ordnerstruktur  

Labels in Templates verwenden  

Record Types mehrsprachig machen  

Für Record Types aktivieren Sie languageAware in der config.yaml:

CLI-Befehl für Sprachdateien

Mit vendor/bin/typo3 content-blocks:language:generate generieren Sie automatisch labels.xlf für alle definierten Felder.


Tooling und Ressourcen  

Beispiel-Extension von butu

Die wp_cbexample Extension von butu zeigt eindrucksvoll, wie Content Blocks und PHP 8.4 Property Hooks in der Praxis zusammenspielen: 4 Models, nur 1 manuelles TCA-File. Ein ausgezeichnetes Proof of Concept für moderne TYPO3-Entwicklung.

Agent Skills

Der Content Blocks Skill für Cursor und Claude Code enthält detaillierte Prompts und Beispiele für Content Elements, Record Types und Migrationen.

wp_make Extension

Die wp_make Extension generiert Extbase-Models und Repositories passend zu Ihren Content Blocks Record Types.

Offizielle Dokumentation

Die TYPO3 Content Blocks Dokumentation bietet die vollständige YAML-Referenz und API-Beschreibung.


Fazit: Jetzt handeln, später profitieren  

Sofort umsetzbar

Content Blocks funktionieren bereits mit aktuellen TYPO3-Versionen. Starten Sie neue Extensions direkt mit dem deklarativen Ansatz.

Zukunftssicher

Wir empfehlen diesen Ansatz: PHP 8.4 Property Hooks kombiniert mit Content Blocks bieten bereits jetzt erhebliche Vorteile – und eine mögliche Core-Integration in TYPO3 v15 LTS würde diese Investition zusätzlich absichern.

Die Kombination aus TYPO3 Content Blocks und PHP 8.4 Property Hooks reduziert nicht nur den initialen Entwicklungsaufwand – sie macht Ihre Extensions deutlich wartbarer.

Lassen Sie uns über Ihr Projekt sprechen

Standorte

  • Mattersburg
    Johann Nepomuk Bergerstraße 7/2/14
    7210 Mattersburg, Austria
  • Wien
    Ungargasse 64-66/3/404
    1030 Wien, Austria

Dieser Inhalt wurde teilweise mithilfe von KI erstellt.