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>
    <!--  <langChildren>1</langChildren>!-->
  </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>

Anzeige: 1 - 2 von 2.
 

Eric

22. 07. 08 12:28

Wie funktioniert im Flexform die Sache mit den Tabs?

 

Andre

15. 07. 08 12:41

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

 
 

Ins Gästebuch eintragen
CAPTCHA Bild zum Spamschutz