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.
Kurz gefasst
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.
TCA-Grundlagen vorab
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>.phpin 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
| Teil | Aufgabe |
|---|---|
ctrl | Tabelleneinstellungen: Titel, Label-Feld, Sortierung, Umgang mit gelöscht und versteckt |
columns | Jedes Feld und sein Verhalten |
types | Welche Felder im Formular erscheinen |
palettes | Felder 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',
],
],
],
],
],
],
],
]; Erweiterte TYPO3 overrideChildTca Konfiguration
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:
// 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',
],
],
],
],
],
]; $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,
],
],
],
],
],
]; TYPO3 Versionskompatibilität
Ü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',
],
],
],
], 'overrideChildTca' => [
'columns' => [
'legacy_datetime' => [
'config' => [
'type' => 'input',
'renderType' => 'inputDateTime',
'eval' => 'datetime',
'required' => true,
],
],
],
], Best Practices und Einschränkungen
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,
],
],
],
],
],
]; FAQs
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.
Sanjay Chauhan
Sanjay Chauhan A young technology enthusiast and entrepreneur. At 24, he co-founded NITSAN – a TYPO3 Agency in Bhavnagar, India. I love TYPO3, I would like to furnish TYPO3 people with informative content, tutorials, and experiences by composing regular TYPO3 blogs “as to give back to the community”. Today Sanjay is CTO and a TYPO3 innovator at NITSAN.
More From Author