development, extension dev

FlexForms und Tabs zur Pluginkonfiguration

Frontend Plugins über FlexForms zu konfigurieren hat viele Vorteile:

  1. Man kann viele Konfigurationen nutzerfreundlich direkt im Plugin vornehmen, ohne die Tabelle und das TCA tt_content mit eigenen Feldern erweitern zu müssen. So bleibt diese Tabelle sauberer und es ist kein Problem weitere Konfigurationen hinzuzufügen.
  2. Eine Möglichkeit ein anderes Templatefile und andere Konfigurationen direkt im Plugin anzugeben stellt eine optimale Möglichkeit dar ein Plugin mehrfach mit unterschiedlichem Erscheinungsbild in einer Seite zu verwenden. Über Typo-Script ist dies im Normalfall nicht möglich.


Vorbildliche Konfigurationsmöglichkeiten im News Plugin

Flex Forms in der eigenen Erweiterung:

Im Kickstarter gibt es derzeit noch keine Vorbereitung für FlexForms in Erweiterungen, darum muß nach der Erstellung einer Erweiterung selbst Hand angelegt werden. Folgende Schritte sind möglich:

  1. Eine Datei flexform_ds.xml im Extensionverzeichniss anlegen und dort die Datenstruktur für das Flexible Formular festlegen. (Einführung und Hilfe zu dem XML Format gibt es in der Dokumentation zur Core API )
  2. In der Datei ext_tables.php mit folgenden Zeilen dafür sorgen das nur das konfigurierte Formular für die Erweiterung angezeigt wird:


    $TCA['tt_content']['types']['list']['subtypes_excludelist'][$_EXTKEY.'_pi1']=
    'layout,select_key,pages,recursive';

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

Und schon haben wird nach dem Einfügen des Plugins das in der XML Datei konfigurierte Plugin angezeigt. Ein gutes Beispiel ist im übrigen tt_news.

 

Auslesen der Konfigurationen im Plugin

Die eingestellten Werte können zum Bespiel in einer init() function in der Erweiterung ausgelesen werden. Dazu reichen folgende Befehle:

$this->pi_initPIflexForm();
$this->pi_getFFvalue($this->cObj->data['pi_flexform'], <feldname>, <sheetname>);

 

Tipps:

  1. Am flexibelsten lassen sich Erweiterungen konfigurieren wenn für die vorgesehenen FlexForm Werte TYPO-Script Entsprechungen vorhanden sind. Ist kein Wert im FlexForm der Erweiterung angegeben kann dann auf entsprechende Wert aus den TS Eigenschaften zurückgegriffen werden.
  2. Erlaubt man das direkte anhängen einer Datei (beispielsweise eines Templates) so wird die Datei direkt in der Datenbank gespeichert. Jede Änderung an einem Template erfordert das man dies auch jedesmal wieder der Erweiterung hinzufügt (Beispiel tt_news). Man könnte sich auch überlegen einfach nur den Pfad zum Template angeben zu lassen.

 Beispiel Inhalt einer flexform_ds.xml Datei:

<T3DataStructure>
  <meta>
    <langDisable>1</langDisable>
   
  </meta>
  <sheets>
    <sDEF>
      <ROOT>
        <TCEforms>
          <sheetTitle>LLL:EXT:danp_libs/locallang_db.php:flexform.generaltab</sheetTitle>
        </TCEforms>
        <type>array</type>
        <el>
          <what_to_display>
            <TCEforms>
              <label>LLL:EXT:danp_libs/locallang_db.php:flexform.what_to_display</label>
                <config>
                <type>select</type>
                <items type="array">
                  <numIndex index="0" type="array">
                    <numIndex index="0">LIST</numIndex>
                    <numIndex index="1">LIST</numIndex>
                  </numIndex>
                  <numIndex index="1" type="array">
                    <numIndex index="0">LATEST</numIndex>
                    <numIndex index="1">LATEST</numIndex>
                  </numIndex>
                  <numIndex index="2" type="array">
                    <numIndex index="0">SINGLE</numIndex>
                    <numIndex index="1">SINGLE</numIndex>
                  </numIndex>         
                </items>         
                <maxitems>100</maxitems>
                <size>6</size>
                <multiple>1</multiple>
                <selectedListStyle>width:150px</selectedListStyle>
                <itemListStyle>width:150px</itemListStyle>
                </config>
            </TCEforms>
          </what_to_display>      
          <template>
            <TCEforms>
              <exclude>1</exclude>
              <label>LLL:EXT:danp_libs/locallang_db.php:flexform.template</label>
              <config>
                <type>input</type>       
              </config>
            </TCEforms>
          </template>
          <pages>
            <TCEforms>
              <exclude>1</exclude>
              <label>LLL:EXT:lang/locallang_general.php:LGL.startingpoint</label>
              <config>
                <type>group</type>
                <internal_type>db</internal_type>
                <allowed>pages</allowed>
                <size>3</size>
                <maxitems>22</maxitems>
                <minitems>0</minitems>
                <show_thumbs>1</show_thumbs>
              </config>
            </TCEforms>
          </pages>
          <recursive>
            <TCEforms>
              <label>LLL:EXT:lang/locallang_general.php:LGL.recursive</label>
              <config>
                <type>select</type>
                <items type="array">
                  <numIndex index="0" type="array">
                    <numIndex index="0"></numIndex>
                    <numIndex index="1"></numIndex>
                  </numIndex>         
                  <numIndex index="1" type="array">
                    <numIndex index="0">LLL:EXT:cms/locallang_ttc.php:recursive.I.1</numIndex>
                    <numIndex index="1">1</numIndex>
                  </numIndex>
                  <numIndex index="2" type="array">
                    <numIndex index="0">LLL:EXT:cms/locallang_ttc.php:recursive.I.2</numIndex>
                    <numIndex index="1">2</numIndex>
                  </numIndex>
                  <numIndex index="3" type="array">
                    <numIndex index="0">LLL:EXT:cms/locallang_ttc.php:recursive.I.3</numIndex>
                    <numIndex index="1">3</numIndex>
                  </numIndex>
                  <numIndex index="4" type="array">
                    <numIndex index="0">LLL:EXT:cms/locallang_ttc.php:recursive.I.4</numIndex>
                    <numIndex index="1">4</numIndex>
                  </numIndex>
                  <numIndex index="5" type="array">
                    <numIndex index="0">LLL:EXT:cms/locallang_ttc.php:recursive.I.5</numIndex>
                    <numIndex index="1">250</numIndex>
                  </numIndex>
                </items>
                <minitems>0</minitems>
                <maxitems>1</maxitems>
                <size>1</size>
              </config>
            </TCEforms>
          </recursive>
        </el>
      </ROOT>
    </sDEF>
  </sheets>
</T3DataStructure>

blog comments powered by Disqus
  1. Webdesign Köln http://www.a-vista-studios.de 23.05.11 12:57

    @Thomas
    Du darfst dabei nicht vergessen, dass der Artikel von Januar 2006 ist und Du mit etwas Recherche neuere Alternativen finden kannst.

    Eventuell hilft Dir die Extension dynaflex von Thomas Hempel?

    Übrigens: Die Aussage "Für Typo3 gibt es nicht sehr viele gute Quellen" finde ich ein wenig irreführend. Natürlich muss man manchmal schon ein wenig suchen - aber es gibt eine Menge guter Tutorials und Snippets.

  2. Markus http://www.lake-studio.de 09.05.11 22:13

    hat bei mir super geklappt. leider werden bei mir die Flexform Tabs bei der Redakteursgruppe nicht angezeigt... an was konnte das liegen?

  3. Thomas http://www.browsermaniac.de 22.01.11 14:19

    Das Tutorial ist gut. Keine Frage. Ich hätte aber eventuell noch eine kleine Extension gebaut die man einfach in Typo3 einspielt. So können auch Anfänger alles besser nachvollziehen. Für Typo3 gibt es nicht sehr viele gute Quellen, daher ist wäre dies vielleicht noch eine Option.

  4. TYPO3 Agentur http://www.artgraphix.de 26.08.10 11:12

    Sehr hilfreicher Artikel für die Erstellung der Konfiguration über Flexform

  5. Marcin http://www.gewerbedruck.de 18.07.10 16:00

    Klasse Toturial, hat mit gut weitergeholen. Vielen Dank!

  6. Michael http://www.zedwoo.de 12.10.09 00:20

    Hoffentlich gibt es bald einen einfacheren Weg Flexforms zu erstellen. Aber danke für deine Hinweise.

  7. Alex http://www.sms-fox.com 04.08.09 10:49

    Super Tutorial. Mit diesem System können wir einiges an Arbeit sparen.

  8. Klaus http://www.militaria-sammeln.org 07.06.09 14:09

    Danke. Besonders die Kommentare machen mir Mut es anzugehen!

  9. Herzlichen Dank. Der Artikel hat mir ein wenig die Angst vor Typo 3 genommen.

  10. Aristo http://www.villacasa.de 31.01.09 09:36

    Gut erklärt. Auf dieser Basis kann man gut aufbauen und es entsprechend implementieren. Danke für dieses Tutorial

  11. Eric http://www.ticketpoint.de 22.07.08 12:28

    Wie funktioniert im Flexform die Sache mit den Tabs?

  12. Geniales Tutorial. Ich bin gerade dabei mich in Flexforms einzuarebiten. Vorher habe ich die Konfiguration in eigenen Extensions mittels TS immer vorgenommen.

blogroll