Blog-Kategorien
Hat Ihnen dieser Beitrag gefallen?

t3n Social News ist ein offenes News- und Link-Portal rund um die Themenbereiche Open Source, Web 2.0, Webentwicklung, Apple, Linux und TYPO3.

Gefällt Ihnen diese Seite? Dann teilen Sie das doch gleich ihren Facebook-Freunden mit.
Flexform in Extension integrieren
Um Flexform in einer eigenen Extension zu verwenden, sind nur wenige Schritte von nöte. Hier ein kurzes, einfaches Tutorial:
Flexform aktivieren
In der Datei ext_tables.php folgende Zeilen implementieren:
$TCA['tt_content']['types']['list']['subtypes_addlist'][$_EXTKEY.'_pi1'] ='pi_flexform';
t3lib_extMgm::addPiFlexFormValue($_EXTKEY.'_pi1', 'FILE:EXT:'.$_EXTKEY . '/flexform_ds_pi1.xml');
Flexform aktivieren in einer Extension mit 'extbase'
$extensionName = t3lib_div::underscoredToUpperCamelCase($_EXTKEY);
$pluginSignature = strtolower($extensionName) . '_pi1';
$TCA['tt_content']['types']['list']['subtypes_addlist'][$pluginSignature] = 'pi_flexform';
t3lib_extMgm::addPiFlexFormValue($pluginSignature, 'FILE:EXT:'.$_EXTKEY.'/Configuration/Flexforms/flexform_list.xml');
XML erstellen
Im Rootverzeichnis der Extension das File flexform_ds_pi1.xml erfassen mit folgendem Inhalt:
<T3DataStructure>
<sheets>
<sheet1>
<ROOT>
<TCEforms>
<sheetTitle>Code</sheetTitle>
</TCEforms>
<type>array</type>
<el>
*** Elemente ***
</el>
</ROOT>
</sheet1>
<sheet2>
<ROOT>
<TCEforms>
<sheetTitle>Settings</sheetTitle>
</TCEforms>
<type>array</type>
<el>
*** Elemente ***
</el>
</ROOT>
</sheet2>
</sheets>
</T3DataStructure>
Elemente
input
<codesnipet>
<TCEforms>
<label>Code Snipet</label>
<config>
<type>text</type>
<cols>30</cols>
<rows>20</rows>
</config>
</TCEforms>
</codesnipet>
select (statisch)
<language>
<TCEforms>
<label>Language</label>
<config>
<type>select</type>
<items type="array">
<numIndex index="0" type="array">
<numIndex index="0">Plain</numIndex>
<numIndex index="1">plain</numIndex>
</numIndex>
<numIndex index="1" type="array">
<numIndex index="0">Bash</numIndex>
<numIndex index="1">bash</numIndex>
</numIndex>
<numIndex index="2" type="array">
<numIndex index="0">Cpp</numIndex>
<numIndex index="1">cpp</numIndex>
</numIndex>
<numIndex index="3" type="array">
<numIndex index="0">C-Sharp</numIndex>
<numIndex index="1">csharp</numIndex>
</numIndex>
</items>
</config>
</TCEforms>
</language>
select (aus foreign_table)
<language>
<TCEforms>
<label>Language</label>
<config>
<type>select</type>
<foreign_table>my_table</foreign_table>
<minitems>1</minitems>
<maxitems>10</maxitems>
<multiple>1</multiple>
<size>5</size>
<autoSizeMax>10</autoSizeMax>
<itemListStyle>Width:250px</itemListStyle>
</config>
</TCEforms>
</language>
Werte im Frontend verwenden
Variante mit $this->lConf[]
Durch das Einbinden der init()-Funktion kann über $this->lConf[] direkt auf die Werte in der Flexform zugegriffen werden. In diesem Beispiel wird auf die "codesnipet" zugegriffen.
Alternative Methode
Durch den Aufruf der vererbten Methode "pi_getFFvalue" lassen sich Flexform-Parameter auch ohne "init()"-Methode aufrufen. Eine Anleitung finden Sie [hier]
/**
* initializes the flexform and all config options ;-)
*/
function init(){
$this->pi_initPIflexForm(); // Init and get the flexform data of the plugin
$this->lConf = array(); // Setup our storage array...
// Assign the flexform data to a local variable for easier access
$piFlexForm = $this->cObj->data['pi_flexform'];
// Traverse the entire array based on the language...
// and assign each configuration option to $this->lConf array...
foreach ( $piFlexForm['data'] as $sheet => $data ) {
foreach ( $data as $lang => $value ) {
foreach ( $value as $key => $val ) {
$this->lConf[$key] = $this->pi_getFFvalue($piFlexForm, $key, $sheet);
}
}
}
}
/**
* The main method of the PlugIn
*
* @param string $content: The PlugIn content
* @param array $conf: The PlugIn configuration
* @return The content that is displayed on the website
*/
function main($content, $conf) {
$this->conf = $conf;
$this->pi_setPiVarDefaults();
$this->pi_loadLL();
$this->init();
$content = $this->lConf['codesnipet'];
return $this->pi_wrapInBaseClass($content);
}
Achtung: Ohne die Initialisierung der Methode init() in der Zeile 33 wird die FlexForm nicht ausgelesen.
Kommentare
Blog Netiquette
Dieses Blog ist eine offene Dialog-Plattform, auf der Mitarbeiter von GreenBanana Beiträge veröffentlichen.
Umgangston im Blog vom GreenBanana
- Behandeln Sie andere hier im Blog immer so, wie Sie selbst behandelt werden möchten.
- Jeder hat eine eigene Meinung und das Recht seine Meinung hier kundzutun. Sachliche Diskussionen, auch eine gesunde Streitkultur ist bei kritischen Themen wünschenswert. «Hart, aber fair», lautet die Devise hier im Blog.
- In diesem Blog haben persönliche Angriffe, übertriebener Sarkasmus, Beleidigungen oder Beschimpfungen nichts zu suchen.
- Die Blog-Kommentarfunktion soll somit eine sachliche Diskussion ermöglichen. Um dies zu gewährleisten, behalten wir uns auch vor, Kommentare zu löschen, die einer Diskussion nicht dienlich sind und die sich nicht auf die Beiträge beziehen. Es besteht kein Anspruch auf Veröffentlichung.
Wir löschen bzw. sperren Kommentare bei:
- Aufforderungen zu Gewalt gegen Personen, Institutionen oder Unternehmen
- Pornografie
- Missbrauch als Werbefläche für Webseiten oder Dienste
- Rassismus und Hasspropaganda
- Beleidigungen, Verletzungen, persönliche Angriffe oder Entwürdigungen von Personen oder Firmen in jeglicher Form.
- Aufruf zu Demonstrationen und Kundgebungen jeglicher politischer Richtung
- Kommentare, die sich nicht auf den kommentierten Beitrag beziehen
Ausschlussklausel für Haftung
Die Kommentare zu unseren Beiträgen spiegeln allein die Meinung einzelner Leser wider. Für die Richtigkeit und Vollständigkeit der Inhalte übernimmt GreenBanana keinerlei Gewähr.


Super, ohne diese Anleitung hätte ich das nie geschaft.
DANKE
Torsten.E
Super! Klappt soweit gut! Danke schön!
Aber wie muss ich es anstellen, damit das Flexform in meiner eigenen Tabelle abspeichert und nicht in tt_content?
Wirklich sehr hilfreich.
Ich habe nur ewig dran gesessen herauszufinden, dass ich den Konfigurationscache leeren muss, damit eine Änderung sichtbar wird...
Hallo allerseits,
erstmal vielen Dank für die elegante Kurzfassung des Tutorials unter wiki.typo3.org/index.php/Extension_Development%2C_using_Flexforms - soweit, so verständlich.
Ich komme bisher auf diesem Wege soweit, dass ich im Backend, wo ich das Modul konfigurieren kann, das entsprechende Flexform mit einem Reiter "Options" und dem Feld "Bereich" sehen kann, wo ich mich dann zwischen Autos und Motorrad entscheiden kann. Allerdings hätte ich genau diese Entscheidungsmöglichkeit gerne im Frontend auf einem "normalen" html-Formular. Dafür möchte ich einfach nur aus dem Flexform die entsprechenden Optionenn und Werte auslesen und einen Marker mit den nötigen html füllen.
Allerdings ist bei mir, nachdem ich
$this->pi_initPIflexForm();
einbinde, $this->cObj->data['pi_flexform'] zwar vorhanden, aber eindeutig leer, wenn ich es mit print_r ausgeben lasse.
Der Vollständigkeit halber sollte ich dabei die entsprechenden Teile aus meiner ext_tables.php zitieren:
$TCA['tt_content']['types']['list']['subtypes_addlist'][$_EXTKEY.'_pi2']='pi_flexform';
t3lib_extMgm::addPiFlexFormValue($_EXTKEY.'_pi2', 'FILE:'.t3lib_extMgm::extPath($_EXTKEY).'flexform_amo.xml');
$TCA['tt_content']['types'][$_EXTKEY.'_pi2']['showitem']='CType;;4;button;1-1-1,header;;3;;2-2-2,pi_flexform;;;;1-1-1';
Schöner bekomm ich das jetzt hier nicht dargestellt. Evtl. hat ja jemand eine Idee dazu? Mein Dank würde ihn auf ewig riechenden Socken verfolgen.
Ich bin fast verrückt geworden, es hat bei mir nicht funktioniert. Ich hab vorher noch nie mit Flexforms gearbeitet ...
Anmerkungen:
In PHP5 funktioniert der XML-Parser anders als in PHP4. Dort werden Kommentare in XML mit '<-- -->' (wie in html)gekennzeichnet. Ich bekam für die PHP-Kommentare '//'(2 Backslashes) ständig illegal charakters angezeigt.
Fürs Nutzen und Auslesen der Werte muss man in der Datei ext_tables.php lediglich die Zeilen "$this->pi_initPIflexForm();" und "$aktuellerWert = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'bereich', 'sDEF');" eintragen.
Vielen Dank für dieses mini Tutorial, es ist exakt das, wonach ich mir einen halben tag die Finger blutig gesucht habe.
Sehr verständlich & dank den beispielen auch sehr gut für die eigenen Bedürfnisse anzupassen.
Also abschließend nochmals Vielen Dank, das hat mir heute echt meinen Feierabend gerettet
Cuule sache! Gratulation zur einfachen beschreibung für t3 extensions!
habe noch ein kleines verständnisproblem... und zwar sind die schritte oben alle einleuchtend. nur... wie sieht es mit den schritten davor aus? wie komme ich zu diesem resultat? der kickstarter ist natürlich installiert...und extensions habe ich mittels kickstarter auch schon erstellt... aber die konfiguration in den einzelnen sites scheint für mich noch ein Rätsel... be-plugin?fe-plugin? oder was ist das? vielen dank für allfällige hilfestellung/inputs.
freundliche Grüsse
Manuel Thaler