Freitag, 25.02.2011

Eigene Formularelemente in der eigenen TYPO3 Extension im Backend

Flexforms heißt das Zauberwort!


Wenn man die eigene Extension im Backend bzw. z.B. in eigenen Content-Elementen verwenden möchte, helfen die FlexForms dabei. Hierzu muss man diese in einer XML-Dateizunächst definieren.

 

Man kann diese ebenfalls in Sheets aufteilen, die per Tab (Reiter) dargestellt werden. Unter anderem die bekannte Extension tt_news setzt auf diese Technik.

 

Ein Anwendungsfall wäre zum Beispiel eine Auswahlbox, wie in tt_news, in der man auswählen kann, ob die Darstellung der eigenen Extension als Liste oder Teaser erfolgen soll.

In meinem Fall lege ich eine XML-Datei in das root-Verzeichnis meiner Extension
die flexform_pi1.xml heißt:

 

 

 

$TCA['tt_content']['types']['list']['subtypes_addlist'][$_EXTKEY.'_pi1'] = 'pi_flexform'; # diese Zeile sollte eigentlich schon automatisch in der datei drin stehen
t3lib_extMgm::addPiFlexFormValue($_EXTKEY.'_pi1', 'FILE:EXT:'.$_EXTKEY.'/flexform_pi1.xml');

flexform_pi1.xml
  1. <T3DataStructure>
  2. <meta>
  3. <langDisable>1</langDisable>
  4. </meta>
  5. <ROOT>
  6. <TCEforms>
  7. <sheetTitle>Optionen</sheetTitle>
  8. </TCEforms>
  9. <type>array</type>
  10. <el>
  11. <what_to_display>
  12. <TCEforms>
  13. <label>Was soll angezeigt werden?</label>
  14. <config>
  15. <type>select</type>
  16. <items type="array">
  17. <numIndex index="0" type="array">
  18. <numIndex index="0">Liste</numIndex>
  19. <numIndex index="1">list</numIndex>
  20. </numIndex>
  21. <numIndex index="1" type="array">
  22. <numIndex index="0">Teaser</numIndex>
  23. <numIndex index="1">teaser</numIndex>
  24. </numIndex>
  25. </items>
  26. <maxitems>1</maxitems>
  27. <size>1</size>
  28. </config>
  29. </TCEforms>
  30. </what_to_display>
  31. </el>
  32. </ROOT>
  33. </T3DataStructure>

 

Anschließend müssen noch zwei Zeilen Code in der ext_tables.php der eigenen Extension eingefügt werden, um TYPO3 mit der XML-Datei bekannt zu machen.

ext_tables.php
  1. $TCA['tt_content']['types']['list']['subtypes_addlist'][$_EXTKEY.'_pi1'] = 'pi_flexform';
  2. t3lib_extMgm::addPiFlexFormValue($_EXTKEY.'_pi1', 'FILE:EXT:'.$_EXTKEY.'/flexform_pi1.xml');

 

Zugreifen kann man dann in der eigenen Klasse auf die Werte der FlexForms so:

myExtension_pi1.php
  1. // Die FlexForms werden initialisiert
  2. $this->pi_initPIflexForm();
  3.  
  4. // Anschließend kann auf auf die Werte folgendermaßen zugegriffen werden
  5. // in unserem Fall wurde ein Wert what_to_display in der XML definiert:
  6.  
  7. $whatToDisplay=$this->pi_getFFvalue($this->cObj->data['pi_flexform'],"what_to_display");

Kommentar schreiben

smile zwinker Big Grins Confused Cool Cry Eek Evil Frown Mad Mr. Green Neutral Razz Redface Rolleyes Sad Surprised

Bitte wiederhole zur Sicherheit diese Zeichenkette!
Wenn du den Text nicht lesen kannst, bitte hier klicken.

CAPTCHA Bild zum Spamschutz