Startseite
Extension Builder und TYPO3 CMS 6.2 empfohlenes TCA-Setup

Extension Builder und TYPO3 CMS 6.2 – empfohlenes TCA-Setup

Click Hier wenn du die Social-Plugins aktivieren willst.

Aus gegebenem Anlass: ich habe gestern eine Extension mit dem Extension Builder gekickstarted und lief dann beim Aufräumen in zwei böse Fallen, die mich einiges an Zeit gekostet haben. Worum genau es sich handelt und wie ich die Fehler behoben habe, will ich Euch nicht vorenthalten.

Zunächst: Mein Setup besteht aus der aktuellen TYPO3 CMS version 6.2.2 und dem Extension Builder in der Git-Version, stand master letzter commit.

Hintergrund: Seit TYPO3 CMS 6.1 ist es möglich und auch empfehlenswert, die TCA Definiton nicht mehr zweigeteilt in ext_tables.php und einer beliebigen konfigurierbaren Datei zu haben, sondern alles in einer Datei und dabei auch den Vorgaben von Aufbau und Benennung zu folgen. Das sind die Regeln:

  • Die Datei liegt in Configuration/TCA
  • Die Datei ist benannt wie die Datenbank-Tabelle, die sie beschreibt
  • Die Datei enthält keinen Code ausser der vollstaendigen TCA Definition, die direkt als array zurueckgegeben wird

Der Extension Builder hält sich (noch?) nicht an diese Empfehlung, sondern generiert TCA in der alten Variante. Um das aufzuräumen, nimmt man den ctrl-Teil mit allen Klammern aus der ext_tables.php und fügt es zusammen mit einem ‚return array (‚ an Stelle der ersten beiden Zeilen in die TCA-Datei ein. Dann muss nur noch die Zeile mit dem Aufruf der TCA-Datei entfernt werden, denn die braucht man ja nun nicht mehr. Fertig? Denkste.

Erstens hat man sich jetzt einen Aufruf von $_EXTKEY mitkopiert, der leider an dieser Stelle leer ist, so dass man beim Installieren der Extension im Backend die Exception ‚extension key „“ is not loaded“ erhält. Dann ist Feierabend, nicht einmal das Install Tool ist noch zu erreichen. Da hilft nur in der typo3conf/PackageStates.php die Extension auf ‚state‘ => inactive zu setzen und typo3temp/Cache zu leeren, um wieder ins Backend zu kommen. Das Problem wird gelöst, indem $_EXTKEY mit dem ausgeschriebenen Extension Key ersetzt wird.

Der zweite böse Fallstrick: Extension Builder benennt die TCA-Datei wie das Model, also zum Beispiel Book.php. Bei der Verwendung von nur einer Stelle für TCA Definition liest das System aber den Namen der Tabelle aus dem Namen der Datei. Eine Tabelle namens Book gibt es (wahrscheinlich) nicht in der DB, damit hat man dann ein Problem. Ich hab es nur daran gemerkt, dass beim Anlegen eines neuen Datensatzes im List Module meine neuen Models mit unter System Records eingeordnet wurden, statt eine eigene Rubrik zu bekommen. Das Speichern hätte ziemlich wahrscheinlich dann auch nicht funktioniert.

Fazit: Der Extension Builder liefert gültigen und lauffähigen Code. Das möchte ich an dieser Stelle ausdrücklich betonen. Wenn man mit dem arbeitet, was da herausfällt, macht man nichts falsch und wird auch in absehbarer Zeit keine Probleme zu erwarten haben. Wenn man aber von den verbesserten Caching-Mechanismen profitieren möchte, die die Änderung im Core mit sich brachte (und die tatsächlich der Grund für die Änderung war), dann sollte man auf die neue Art umbauen. Ausserdem benutzt man ja nicht 6.2, um dann doch wieder auf die alten Hüte zurückzugreifen, nicht wahr? Aber wenn man umbaut, dann bitte richtig, unter Beachtung der oben genannten Regeln, damit man sich nicht mit der Fehlersuche erschöpfen muss.

Zusammenfassung der Schritte beim Umbauen der Vorgaben vom Extension Builder TCA auf die für TYPO3 6.2 empfohlene Vorgehensweise (für jede Tabelle wiederholen):

  1. Datei Configuration/TCA/<Model>.php umbenennen in Configuration/TCA/<tabellenname>.php
  2. Den crtl-Teil der Tabelle aus ext_tables ausschneiden und in <tabellenname>.php einfügen
  3. Aufruf der TCA-Datei entfernen
  4. $_EXTKEY durch extensionkey ersetzen
  5. Überreste aus ext_tables.php entfernen

 

Das Ganze auch noch in Bildern:

Ausgangslage mit 'falsch' benannter TCA Datei und ext_tables.php mit ctrl-Block

Ausgangslage mit ‚falsch‘ benannter TCA Datei und ext_tables.php mit ctrl-Block

 

TCA Datei wie die Tabelle benannt, ctrl-Block grade in der Zwischenablage, Reste aufgeräumt

TCA Datei wie die Tabelle benannt, ctrl-Block grade in der Zwischenablage, Reste aufgeräumt

 

TCA Datei vor dem Umbau

TCA Datei vor dem Umbau, ctrl ist ein array Zugriff

 

eingefuegter ctrl Block, TCA key entfernt und durch 'return array (' ersetzt, Problemstellen in rot

Eingefügter ctrl Block, TCA key entfernt und durch ‚return array (‚ ersetzt, Problemstellen in rot

 

TCA Umbau abgeschlossen

Zeile ‚dynamicConfigFile‘ entfernt, $_EXTKEY durch extension key ersetzt.

Das war auch schon alles. Ganz einfach, wenn man weiß wo die Probleme liegen. Wenn nicht, sucht man eine Weile.

In der Hoffnung, vielleicht dem einen oder anderen einen Stolperstein aus dem Weg geräumt zu haben, freue ich mich über Kommentare und Verbreitung des Blogbeitrages.

3 Gedanken zu “Extension Builder und TYPO3 CMS 6.2 – empfohlenes TCA-Setup

  1. Super Artikel, vielen Dank! Mit der Anleitung hat die Umstellung hervorragend funktioniert! Wäre gut, wenn das in die Doku einfliesst.

    Kommentar
  2. Find ich ebenfalls super! Bin gerade durch Zufall hier gelandet, bei einer aktuellen Extension durchgeführt und läuft. danke!

    Kommentar
  3. Danke für die Anleitung! Inzwischen generiert der ExtensionBuilder (aktueller master) übrigens gleich die richtige (neue) TCA Struktur für TYPO3 > 6.2

    Kommentar

Hinterlasse eine Antwort

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

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>