TYPO3: Bildfeld im FlexForm eines Plugins
Ein Plugin soll ein Bild bekommen, das die Redaktion im Reiter Plugin auswählt. Das FlexForm dafür war jahrelang unangenehm lang: type=inline, foreign_table auf sys_file_reference, dazu overrideChildTca und eine Handvoll Optionen. Heute sind es drei Zeilen:
<settings.image>
<label>Bild</label>
<config>
<type>file</type>
<allowed>common-image-types</allowed>
<maxitems>1</maxitems>
</config>
</settings.image>Zwei Änderungen, die alten Code brechen
Der Schlüssel <TCEforms> ist weg. TYPO3 12 hat ihn aus den FlexForms entfernt; label und config stehen seitdem direkt unter dem Feldnamen. Wer ihn stehen lässt, bekommt kein Feld, sondern nichts.
type=file löst type=inline ab. Der Typ kam ebenfalls mit TYPO3 12 und nimmt allowed, disallowed und maxitems entgegen. common-image-types steht dabei für die üblichen Bildformate — eine eigene Aufzählung wie jpg,png,svg,webp geht genauso.
Beides gilt für FlexForms und für TCA gleichermaßen. Wer eine ältere Extension auf TYPO3 12 oder neuer hebt, findet die Stellen am schnellsten über eine Suche nach TCEforms in den XML-Dateien.
Auslesen im Controller
Die Referenzen landen weiterhin in sys_file_reference, und der FilesProcessor holt sie auch außerhalb eines DataProcessings ab. Eine Kleinigkeit hat sich dabei geändert:
$bilder = GeneralUtility::makeInstance(FilesProcessor::class)->process(
$this->request->getAttribute('currentContentObject'),
[],
[
'references.' => [
'fieldName' => 'image',
'table' => 'tt_content',
],
'as' => 'bilder',
],
[]
);Früher stand an der ersten Stelle $this->configurationManager->getContentObject(). Die Methode ist seit TYPO3 12.4 als veraltet markiert; den ContentObjectRenderer gibt es heute als Attribut der Anfrage. Extbase selbst holt ihn sich an derselben Stelle.
Welcher Feldname in sys_file_reference.fieldname landet, hängt am FlexForm. Ein Blick in die Tabelle nach dem ersten Speichern klärt das schneller als jede Vermutung.
Geprüft mit TYPO3 14.