TYPO3 und FAL: Override-Felder in IRRE-Elementen ändern

Seit der Einführung von FAL in TYPO3 werden Datei- und Bildrelationen in Inhaltselementen im Backend über IRRE-Elemente abgebildet. Außerdem können Metadaten zu Dateien hinterlegt werden und seit TYPO3 6.2 können diese auch übersetzt werden. Für jede Datei existiert also eine Datensatz in der Tabelle „sys_file“ und mindestens ein Datensatz für die Standardsprache in der Tabelle „sys_file_metadata“.

Der Vorteil hierbei ist, dass Bildbeschreibungen, -titel oder -unterschriften nur einmal zentral gepflegt werden müssen und danach überall verfügbar sind.

Damit man aber im Einzelfall diese Werte doch wieder überschreiben kann, bietet das IRRE-Element Felder zum Überschreiben einzelner Werte an.

IRRE_Screenshot_01

Für jede dieser Relationen wird ein Datensatz in der Tabelle „sys_file_reference“ angelegt. Setzt man den Haken bei einem Feld, so kann man es überschreiben. Diese „Override-Werte“ werden dann auch in der Tabelle „sys_file_reference“ gespeichert.

Die Auswahl dieser Felder ist per default auf wenige beschränkt (Titel, Alternativtext, Link-Ziel, Beschreibung). Das „Caption“ hinter Description ist leicht irreführend. Description und Caption sind in sys_file_metadata tatsächlich zwei verschiedene Felder.

Möchte man allerdings andere Felder überschreiben hat man Pech gehabt. Man kann allerdings das Angebot der verfügbaren Felder erweitern. In meinem Beispiel möchte ich das „Caption“-Feld zusätzlich verfügbar machen.

Extension

Am einfachsten ist es wohl, dafür eine eigene Extension zu erstellen. Es reichen dabei schon wenige Dateien:

my_ext_key
   - Resources
      - Private
         - Language
            locallang_db.xlf
   - ext_emconf.php
   - ext_tables.php
   - ext_tables.sql

Datenbank (ex_tables.sql)

Zunächst ist wichtig zu wissen, dass jedes Feld, das überschrieben werden soll, ein Datenbankfeld in der Tabelle „sys_file_reference“ benötigt. Also muss diese Tabelle zunächst um das Feld „caption“ erweitert werden:

#
# Table structure for table 'sys_file_reference'
#
CREATE TABLE sys_file_reference (
 caption tinytext,
);

Wichtig hierbei ist, dass das Feld den Wert „NULL“ enthalten darf! Der Grund dafür ist:
Der Haken über den Feldern mit „Override“ ist nur ein Pseudofeld. Wenn im entsprechenden Feld etwas steht, dann wird überschrieben. Wenn der Wert NULL ist, dann ist der Haken nicht gesetzt und es wird der Wert aus „sys_file_metadata“ genommen.

Am besten verwendet man hier „text“ oder wie in meinem Fall „tinytext“.

TCA (ext_tables.php)

Jetzt brauchen wir den entsprechenden Eintrag im TCA:

$tempColumns = array(
   'caption' => array(
      'exclude' => 1,
      'l10n_mode' => 'mergeIfNotBlank',
      'label' => 'LLL:EXT:my_ext_key/Resources/Private/Language/locallang_db.xlf:caption',
      'config' => array(
         'default' => '',
         'eval' => 'null',
         'mode' => 'useOrOverridePlaceholder',
         'placeholder' => '__row|uid_local|metadata|caption',
         'size' => 20,
         'type' => 'input'
      )
   )
);
TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('sys_file_reference',$tempColumns,1);

Zur Erklärung:

Die Felder „exclude“, „l10n_mode“ und „label“ sind die üblichen TCA-Felder.

Im „config“-Array wird es dann interessant:

'default' => 'NULL'

Mit dieser Zeile setzen wir den Standardwert im Backend auf NULL, also leer.

'eval' => 'null'

Damit legen wir fest, dass „leer“ als „NULL“ in die Datenbank gespeichert wird.

'mode' => 'useOrOverridePlaceholder'

Diese Einstellung erzeugt die Checkbox „Override“ im Backend. Wenn Sie abgehakt ist, dann wird alles, was der Benutzer eingibt gespeichert. Wenn sie nicht abgehakt ist, wird „NULL“ in der Datenbank gespeichert und stattdessen der „placeholder“ verwendet.

'placeholder' => '__row|uid_local|metadata|caption'

Die Eigenschaft „placeholder“ legt, wie der Name schon sagt, einen Platzhalter für das Input-Feld fest. Das kann auch ein einfacher String sein. Mit „__row|field“ kann ein Feldinhalt des aktuellen Datensatzes verwendet werden. In unserem Fall zeigt „uid_local“ auf die Relation von „sys_file“ auf „sys_file_metadata“ und verwendet daraus das Feld „caption“. Damit wird also der Inhalt des Caption-Feldes geholt, der in der Dateiliste gepflegt wird.

'size' => 20,
'type' => 'input'

Diese beiden Zeilen sind wieder Standard und legen fest, dass das Feld ein Input-Feld mit der Länge 20 sein soll.

Die Zeile

TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('sys_file_reference',$tempColumns,1);

fügt unser neues Feld dann den Spalten des TCA der Tabelle „sys_file_reference“ hinzu.

Damit unser Feld auch auftaucht, müssen wir es jetzt noch einer Palette hinzufügen. In unserem Fall der Palette „imageoverlayPalette“ im TCA der „sys_file_reference“ Tabelle.
Dazu brauchen wir noch folgende Zeile im TCA:

TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addFieldsToPalette('sys_file_reference', 'imageoverlayPalette','caption');

Wie finde ich heraus, welche Palette ich verwenden muss?

Dazu muss man sich das TCA des inline Feldes anschauen, das man verändern möchte. Bei uns ist es ein Standard-Inhaltselement Bild bzw. Text mit Bild. Das dafür verwendete „image“-Feld findet man in der „tt_content“ Tabelle.

image_tca

Dort wird unter ‚config‘ mit der Eigenschaft ‚foreign_types‘ die verwendete(n) Palette(n) festgelegt.
Palette in „inline“ festlegen

In eigener Extension?

Natürlich kann man auf genau die gleiche Weise IRRE-Felder in seiner eigenen Extension konfigurieren. Das Pendant zu „sys_file_reference“ wäre dann eben die entsprechende Relationstabelle, welche die Relationen zwischen dem Inhaltselement und dem Inhalt des „inline“-Feldes herstellt.

Auf diese Weise lassen sich die IRRE-Elemente vielfältig verwenden und genau auf die eigenen Bedürfnisse konfigurieren.

Getagged mit: , ,
Veröffentlicht unter Database, TYPO3 Allgemein, TYPO3 Extensions, TYPO3 Technik
10 Kommentare auf “TYPO3 und FAL: Override-Felder in IRRE-Elementen ändern
  1. Christian Wolfram sagt:

    Hallo Sebastian,
    danke für die ausführliche Erläuterung, das eröffnet wieder neue interessante Möglichkeiten.

    Gibt es auch eine Möglichkeit, dass die Checkbox per Default nicht gesetzt ist? Bei den Meta-Daten für Bilder funktioniert es prima, nur wenn ich es in meiner eigenen Extension nutzen möchte, ist die Checkbox per Default immer aktiv.

    VG Christian

  2. Michael Sollmann sagt:

    Hallo Sebastian,

    bei mir ist es ebenso wie von Christian beschrieben. Bei eigenen Feldern ist die Checkbox nach dem Anlegen default gesetzt und muss manuell deaktiviert werden.
    Ich verwende TYPO3 6.2.19 und kann im TCA keinen Unterschied zu den Standard-Feldern erkennen.

    Viele Grüße
    Michael

  3. Sebastian sagt:

    Hallo Christian, hallo Michael,

    erstmal sorry Christian, dass ich nicht geantwortet habe. Ich habe das irgendwie nicht mitbekommen, dass ein Kommentar verfasst wurde.

    Wie sieht denn die Relationstabelle aus? Also das „CREATE TABLE“ Statement? Eventuell ist da ein Default-Wert eingestellt, der nicht „NULL“ ist. Das könnte das Problem sein.

    VG Sebastian

  4. Michael Sollmann sagt:

    Hallo zusammen,

    ich hab’s: Im TCA muss es ‚default‘ => NULL statt ‚default‘ => “ heißen, dann geht es. Im Konfigurations-Modul des BE wird dabei kein Unterschied angezeigt, deshalb fällt es beim Vergleichen nicht auf.

    Viele Grüße
    Michael

  5. Sebastian sagt:

    Hallo Michael,

    vielen Danke für die Info, ich habe es oben im Beitrag ausgebessert :-).

    VG Sebastian

  6. Kurt Knick sagt:

    Tolle Information. Ist es möglich, dass die zusätzlichen Felder nur in einem bestimmten Kontext erscheinen? Um zb. die IRRE Elemente in den Seiteneigenschaften zu erweitern und in den Content Elementen unberührt zu lassen?

  7. Sebastian sagt:

    Hallo Kurt,

    ich habe es jetzt nicht ausprobiert, aber ich vermute, dass man sowas über die Paletten regeln könnte.

    Man müsste quasi, anstatt wie oben beschrieben das Feld einer bestehenden Palette (imageoverlayPalette) hinzuzufügen, einfach eine neue Palette erstellen und sie dann an der Stelle, an der man seine eigene Konfiguration benötigt einbinden.

    Bitte informiere mich doch, ob es klappt, würde mich auch interessieren. 🙂

  8. Monti sagt:

    Hallo,

    ich versuche seit Wochen immer mal wieder herauszufinden, wie man eine eigene Image-Palette anlegt.

    Du schreibst „einfach eine neue Palette erstellen“. Mit normalen Paletten, wo ich Columns für CEs zusammenfasse ist das kein Problem, doch die ImagePalette zu klonen, um sie dann anzupassen erscheint mir sehr advanced ;).

    Wo steckt den die Original-Palette von image ? Weiss das jemand, dann kann man da ja evtl. einfach nur den Paletten-Namen ändern und die Anpassungen vornehmen!

    Beste Grüße

    Monti

    ps: Trotzdem sehr schickes Tutorial.

  9. Sebastian sagt:

    Hallo Monti,

    was genau möchtest du denn machen?

    Die imageoverlayPalette wird hier nicht geklont, sondern mit addFieldsToPalette um das Feld caption erweitert. Das ist die Originalpalette, die immer verwendet wird, wenn man ein image-Feld im TCA einer Tabelle hat. Sie ist im TCA der sys_file_reference Tabelle zu finden.

    Ausgewählt wird die entsprechende Palette über foreign_types in der config. Sieh dir mal das image-Feld der tt_content Tabelle an.

    Beste Grüße
    Sebastian

  10. Niklas sagt:

    Hallo Sebastian,
    ist es auch möglich, ein bestehendes Feld aus sys_file_metadata zu überschreiben und kein neues eigenes Feld anzulegen. Ich habe das mit ‚copyright‘ versucht. Bekomme dann aber die Fehlermeldung
    SQL error: ‚Unknown column ‚copyright‘ in ‚field list“

    Ist ja auch erstmal logisch, aber wie komme ich an die Felder aus sys_file_metadata ran?

    Grüße
    Niklas

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*