TYPO3 overrideChildTca: Erweiterte IRRE- & Inline-Konfiguration

TYPO3 overrideChildTca: Erweiterte IRRE- & Inline-Konfiguration

Bei der Entwicklung von TYPO3-Erweiterungen und benutzerdefinierten Inhaltstypen müssen Sie häufig anpassen, wie Inline-Datensätze innerhalb von Eltern-Kind-Beziehungen funktionieren. Die overrideChildTca-Eigenschaft ist Ihr leistungsstarkes Werkzeug zur Feinabstimmung jeder Inline-Datensatzkonfiguration, ohne die Kern-TCA-Definitionen zu ändern. Dieser Beitrag zeigt fortgeschrittene TYPO3 TCA Konfiguration mit overrideChildTca.

Mit der TCA-Einstellung overrideChildTca konfigurieren Sie Inline-Kindelemente (IRRE) vom übergeordneten Datensatz aus im TYPO3-Backend. Dieses Tutorial zeigt die Konfiguration Schritt für Schritt mit praktischen Beispielen.

Aktualisiert am 7. November 2026 | T3Planet-Redaktion

Dieses Tutorial nutzt overrideChildTca und Inline-Datensätze (IRRE). Wenn TCA neu für Sie ist, lesen Sie zuerst diese kurze Einführung.

Wo TCA-Dateien liegen

  • Neue Tabelle: Configuration/TCA/<tabellenname>.php in Ihrer Extension.
  • Änderung an einer bestehenden Tabelle (zum Beispiel tt_content): Configuration/TCA/Overrides/<tabellenname>.php.

Jede Datei gibt ein Array zurück. TYPO3 führt alle Dateien beim Aufbau des Caches zusammen.

Die vier Hauptteile

TeilAufgabe
ctrlTabelleneinstellungen: Titel, Label-Feld, Sortierung, Umgang mit gelöscht und versteckt
columnsJedes Feld und sein Verhalten
typesWelche Felder im Formular erscheinen
palettesFelder in einer Zeile gruppiert

Eine vollständige Beispieltabelle und über 45 Tipps finden Sie im TYPO3 TCA Leitfaden.

Hier geht es um die erweiterte IRRE- und Inline-Konfiguration in TYPO3.

TYPO3 Inline Datensatztypen und Anwendungsfälle

1. Datei-Referenzen (sys_file_reference)

Der häufigste Anwendungsfall für die Anpassung der Medienverwaltung:

$GLOBALS['TCA']['tt_content']['types']['boilerplate_textimagegallery'] = [
    'showitem' => $GLOBALS['TCA']['tt_content']['types']['boilerplate_textimagegallery']['showitem'],
    'columnsOverrides' => [
        'image' => [
            'config' => [
                'maxitems' => 1,
                'overrideChildTca' => [
                    'columns' => [
                        'uid_local' => [
                            'config' => [
                                'appearance' => [
                                    'elementBrowserType' => 'file',
                                    'elementBrowserAllowed' => 'png, jpeg, svg, jpg, youtube, mp4, vimeo'
                                ],
                            ],
                        ],
                    ],
                ],
            ]
        ]
    ]
];

2. Benutzerdefinierte Datenbanktabellen

Überschreiben Sie das Verhalten von untergeordneten Datensätzen für Ihre benutzerdefinierten Erweiterungstabellen:

$GLOBALS['TCA']['tx_myext_parent']['columns']['child_items'] = [
    'config' => [
        'type' => 'inline',
        'foreign_table' => 'tx_myext_child',
        'foreign_field' => 'parent_uid',
        'overrideChildTca' => [
            'columns' => [
                'title' => [
                    'config' => [
                        'required' => true,
                        'max' => 100,
                        'placeholder' => 'Enter item title (max 100 chars)',
                    ],
                ],
                'description' => [
                    'config' => [
                        'type' => 'text',
                        'rows' => 3,
                        'cols' => 40,
                        'default' => 'Default description text',
                    ],
                ],
                'category' => [
                    'config' => [
                        'items' => [
                            ['Premium', 'premium'],
                            ['Standard', 'standard'],
                            ['Basic', 'basic'],
                        ],
                        'default' => 'standard',
                    ],
                ],
            ],
        ],
    ],
];
$GLOBALS['TCA']['tt_content']['types']['myext_container'] = [
    'showitem' => 'header, content_elements',
    'columnsOverrides' => [
        'content_elements' => [
            'config' => [
                'type' => 'inline',
                'foreign_table' => 'tt_content',
                'foreign_field' => 'tx_myext_parent',
                'overrideChildTca' => [
                    'types' => [
                        'text' => [
                            'showitem' => 'header, bodytext',
                        ],
                        'image' => [
                            'showitem' => 'header, image, imagewidth, imageheight',
                        ],
                    ],
                    'columns' => [
                        'header' => [
                            'config' => [
                                'required' => true,
                                'placeholder' => 'Section header is required',
                            ],
                        ],
                        'bodytext' => [
                            'config' => [
                                'enableRichtext' => true,
                                'richtextConfiguration' => 'minimal',
                            ],
                        ],
                    ],
                ],
            ],
        ],
    ],
];

4. Viele-zu-Viele Beziehungen

Konfigurieren Sie das Verhalten der Zwischentabelle:

Dynamische Feldsichtbarkeit

Steuern Sie die Sichtbarkeit des Feldes basierend auf dem Zustand des übergeordneten Datensatzes:

Einstellungen für individuelles Aussehen

Ändern Sie das Aussehen und Verhalten von Inline-Datensätzen:

'overrideChildTca' => [
    'ctrl' => [
        'title' => 'Custom Child Record',
        'iconfile' => 'EXT:my_extension/Resources/Public/Icons/custom_icon.svg',
    ],
    'columns' => [
        'status' => [
            'config' => [
                'type' => 'select',
                'items' => [
                    ['Draft', 'draft'],
                    ['Published', 'published'],
                    ['Archived', 'archived'],
                ],
                'default' => 'draft',
            ],
        ],
    ],
],

Validierung und Verarbeitung

Fügen Sie benutzerdefinierte Validierungsregeln zu untergeordneten Datensätzen hinzu:

1:n Beziehungen

Häufigstes Muster für Inline-Beziehungen:

// Parent table configuration
$GLOBALS['TCA']['tx_myext_article']['columns']['comments'] = [
    'config' => [
        'type' => 'inline',
        'foreign_table' => 'tx_myext_comment',
        'foreign_field' => 'article_uid',
        'foreign_sortby' => 'sorting',
        'maxitems' => 50,
        'appearance' => [
            'collapseAll' => 1,
            'expandSingle' => 1,
            'levelLinksPosition' => 'top',
        ],
        'overrideChildTca' => [
            'columns' => [
                'comment_text' => [
                    'config' => [
                        'type' => 'text',
                        'rows' => 5,
                        'cols' => 48,
                        'required' => true,
                    ],
                ],
                'author_name' => [
                    'config' => [
                        'type' => 'input',
                        'size' => 30,
                        'required' => true,
                        'eval' => 'trim',
                    ],
                ],
                'moderation_status' => [
                    'config' => [
                        'type' => 'select',
                        'items' => [
                            ['Pending', 'pending'],
                            ['Approved', 'approved'],
                            ['Rejected', 'rejected'],
                        ],
                        'default' => 'pending',
                    ],
                ],
            ],
        ],
    ],
];

m:n Beziehungen mit benutzerdefinierter MM-Tabelle

Komplexe viele-zu-viele Beziehungen:

$GLOBALS['TCA']['tx_myext_event']['columns']['speakers'] = [
    'config' => [
        'type' => 'inline',
        'foreign_table' => 'tx_myext_event_speaker_mm',
        'foreign_field' => 'uid_local',
        'foreign_sortby' => 'sorting',
        'foreign_label' => 'uid_foreign',
        'foreign_selector' => 'uid_foreign',
        'foreign_unique' => 'uid_foreign',
        'maxitems' => 10,
        'overrideChildTca' => [
            'columns' => [
                'uid_foreign' => [
                    'config' => [
                        'type' => 'group',
                        'internal_type' => 'db',
                        'allowed' => 'tx_myext_speaker',
                        'size' => 1,
                        'maxitems' => 1,
                        'minitems' => 1,
                    ],
                ],
                'speaker_role' => [
                    'config' => [
                        'type' => 'select',
                        'items' => [
                            ['Keynote Speaker', 'keynote'],
                            ['Workshop Leader', 'workshop'],
                            ['Panel Member', 'panel'],
                        ],
                        'default' => 'panel',
                    ],
                ],
                'presentation_duration' => [
                    'config' => [
                        'type' => 'input',
                        'size' => 5,
                        'eval' => 'int',
                        'range' => [
                            'lower' => 15,
                            'upper' => 180,
                        ],
                        'default' => 30,
                    ],
                ],
            ],
        ],
    ],
];

Überlegungen zu TYPO3 v12+

Moderne TYPO3-Versionen führen neue TCA-Typen und Funktionen ein:

'overrideChildTca' => [
    'columns' => [
        'modern_field' => [
            'config' => [
                'type' => 'datetime',
                'format' => 'datetime',
                'required' => true,
            ],
        ],
        'color_field' => [
            'config' => [
                'type' => 'color',
                'size' => 10,
                'default' => '#000000',
            ],
        ],
    ],
],

Legacy TYPO3 Unterstützung

Für ältere TYPO3-Versionen verwenden Sie kompatible Konfigurationen:

'overrideChildTca' => [
    'columns' => [
        'legacy_datetime' => [
            'config' => [
                'type' => 'input',
                'renderType' => 'inputDateTime',
                'eval' => 'datetime',
                'required' => true,
            ],
        ],
    ],
],

Was Sie überschreiben können

  • Anzeigebezogene Eigenschaften (Aussehen, Beschriftungen, Platzhalter)
  • Validierungsregeln (eval, erforderlich, Bereich)
  • Feldtypen und Darstellungstypen
  • Standardwerte und Elemente
  • Anzeigebedingungen

Was Sie nicht überschreiben können

  • Änderungen am Datenbankschema
  • Verarbeitungsbezogene Kernfunktionen
  • Grundlegende Tabellenbeziehungen
  • Kernsicherheitsmechanismen

Leistungsüberlegungen

  • Minimale Überschreibungen: Überschreiben Sie nur notwendige Eigenschaften
  • Gecachte Konfiguration: TYPO3 cacht TCA, daher erfordern Änderungen das Leeren des Caches
  • Verschachtelte Komplexität: Vermeiden Sie tief verschachtelte Inline-Beziehungen

Datenbankabfragen: Komplexe Inline-Setups können die Abfrageleistung beeinträchtigen

Fehlerbehebung TYPO3 overrideChildTCA

Allgemeine Probleme

  • Konfiguration nicht angewendet: Löschen Sie alle Caches nach TCA-Änderungen
  • Feld nicht sichtbar: Überprüfen Sie die showitem Konfiguration und Zugriffsrechte
  • Validierungsfehler: Überprüfen Sie die eval-Regeln und ob die Feldtypen übereinstimmen
  • Leistungsprobleme: Überwachen Sie Datenbankabfragen mit komplexen Inline-Setups

Debugging der TCA-Konfiguration

// Debug current TCA configuration
\TYPO3\CMS\Core\Utility\DebugUtility::debug(
    $GLOBALS['TCA']['your_table']['columns']['your_field']
);

// Check effective child TCA
\TYPO3\CMS\Core\Utility\DebugUtility::debug(
    $GLOBALS['TCA']['your_child_table']
);

Beispiel für die Umsetzung in der Praxis

Hier ist ein vollständiges Beispiel für ein Nachrichtensystem mit eingebetteten Kommentaren:

// News article with customized inline comments
$GLOBALS['TCA']['tx_news_domain_model_news']['columns']['custom_comments'] = [
    'exclude' => true,
    'label' => 'Article Comments',
    'config' => [
        'type' => 'inline',
        'foreign_table' => 'tx_news_domain_model_comment',
        'foreign_field' => 'news_uid',
        'foreign_sortby' => 'crdate',
        'maxitems' => 100,
        'appearance' => [
            'collapseAll' => 1,
            'expandSingle' => 1,
            'levelLinksPosition' => 'top',
            'showSynchronizationLink' => 1,
            'showPossibleLocalizationRecords' => 1,
            'showAllLocalizationLink' => 1,
        ],
        'overrideChildTca' => [
            'columns' => [
                'comment' => [
                    'config' => [
                        'type' => 'text',
                        'rows' => 4,
                        'cols' => 48,
                        'required' => true,
                        'max' => 500,
                        'placeholder' => 'Share your thoughts... (max 500 characters)',
                    ],
                ],
                'author_name' => [
                    'config' => [
                        'type' => 'input',
                        'size' => 25,
                        'required' => true,
                        'eval' => 'trim',
                        'placeholder' => 'Your name',
                    ],
                ],
                'author_email' => [
                    'config' => [
                        'type' => 'input',
                        'size' => 30,
                        'required' => true,
                        'eval' => 'trim,email',
                        'placeholder' => 'your@email.com',
                    ],
                ],
                'status' => [
                    'config' => [
                        'type' => 'select',
                        'items' => [
                            ['Pending Review', 0],
                            ['Approved', 1],
                            ['Rejected', 2],
                            ['Spam', 3],
                        ],
                        'default' => 0,
                    ],
                ],
                'rating' => [
                    'config' => [
                        'type' => 'select',
                        'items' => [
                            ['⭐ 1 Star', 1],
                            ['⭐⭐ 2 Stars', 2],
                            ['⭐⭐⭐ 3 Stars', 3],
                            ['⭐⭐⭐⭐ 4 Stars', 4],
                            ['⭐⭐⭐⭐⭐ 5 Stars', 5],
                        ],
                        'default' => 3,
                    ],
                ],
            ],
        ],
    ],
];

Eine TCA-Einstellung, mit der Sie Inline-Kindelemente vom übergeordneten Datensatz aus konfigurieren.

Kindelemente, die Sie im TYPO3-Backend direkt im übergeordneten Datensatz bearbeiten.

Eine neue Tabelle gehört nach Configuration/TCA, eine Änderung an einer bestehenden Tabelle nach Configuration/TCA/Overrides.

Der Abschnitt TCA-Grundlagen vorab bietet eine kurze Einführung.

Lesen Sie den TYPO3 TCA Leitfaden mit über 45 Tipps auf dieser Website.