05.02.2010
10:15

Extbase: Verwendeter Controller & Action per Flexform konfigurierbar machen

Momentan beschäftige ich mich eingehender mit der in Typo3 4.3 gestarteten MVC Erweiterung ExtBase. Gerade weil der neue Weg Extensions in Typo3 zu schreiben noch so frisch ist, sind die Dokumentationen und Beispiele im Internet noch ziemlich dünn gesät.

Beispielsweise habe ich kein vollständiges Tutorial gefunden wie man die verwendete Standard-ExtBase–Action im Backend per FlexForms konfigurierbar macht. Genau darum soll es hier nun gehen.

1. Schritt XML-Datei anlegen und einbinden

Die FelexForm XML Datei wird im Verzeichnis Configuration -> Flexform im Extension Verzeichnis angelegt.

 


Eingebunden wird die Konfiguration in der ext_tables.php:

  1. $extensionName = t3lib_div::underscoredToUpperCamelCase($_EXTKEY);
  2. $pluginSignature = strtolower($extensionName) . '_pi1';  
  3.  
  4. $TCA['tt_content']['types']['list']['subtypes_addlist'][$pluginSignature] = 'pi_flexform';
  5.  t3lib_extMgm::addPiFlexFormValue($pluginSignature, 'FILE:EXT:'.$_EXTKEY.'/Configuration/FlexForms/ControllerActions.xml');    

2. Schritt FlexForm Konfiguration

  1.  <T3DataStructure>
  2.   <sheets>
  3.   <sDEF>
  4.      <ROOT>
  5.       <TCEforms>
  6.       <sheetTitle>Verhalten</sheetTitle>
  7.       </TCEforms>
  8.       <type>array</type>
  9.       <el>
  10.       <switchableControllerActions>
  11.          <TCEforms>
  12.           <label>Standardaktion des Plugins</label>
  13.           <config>
  14.           <type>select</type>
  15.           <items>
  16.             <numIndex index="0">
  17.                <numIndex index="0">Listenansicht</numIndex>
  18.                <numIndex index="1">MyController->list</numIndex>
  19.             </numIndex>
  20.             <numIndex index="1">
  21.                <numIndex index="0">Einzelansicht</numIndex>
  22.                <numIndex index="1">MyController->show;MyController->edit;MyController->update</numIndex>
  23.             </numIndex>
  24.             </items>
  25.           </config>
  26.          </TCEforms>
  27.       </switchableControllerActions>
  28.       </el>
  29.      </ROOT>
  30.   </sDEF>
  31.   </sheets>
  32. </T3DataStructure>

Das Ergebnis ist eine Dropdownbox zur Einfachen Auswahl der Controller-Action Kombination.

Die Definition der Kombinationen (Zeile 18,19) lassen sich beliebig nach dem Schema erweitern.

Achtung: Es können nur Actions aufgerufen werden, die in der Felxform konfiguriert sind. Um alle Actions eines Controllers aufrufen zu können, müssen diese mit Semikolon separiert aufgeführt werden:

Beispiel:

  1. MyController->show;MyController->update;MyController->edit

Die erste Action der Liste wird jeweils per default ausgeführt.

Daniel Lienert (daniel@lienert.cc)PermalinkTrackback-Link
Tags: typo3, extbase
Views: 2305
  •  
  • 11 Kommentare
  •  
Gravatar: Klaus
Klaus
08.03.2010
12:04

Vielen Dank für das Snippet. Mit ExtBase und Fluid macht Extensions entwickeln noch mehr Spass.

Gravatar: natalia
natalia
02.06.2010
11:49

Vielen Dank, funktioniert. Kleiner Hinweis: anstatt MyController muss man natürlich den Namen des Controller eintragen, allerdings ohne Suffix-Controller. Also, wenn z.B. Blog (für BlogController)

Gravatar: Mimi
Mimi
29.06.2010
14:13

Korrigiertes Snippet

Hier zum Kopieren nochmal korrekt und ohne die b-Tags:
<T3DataStructure>
<sheets>
<sDEF>
<ROOT>
<TCEforms>
<sheetTitle>Verhalten</sheetTitle>
</TCEforms>
<type>array</type>
<el>
<switchableControllerActions>
<TCEforms> Standardaktion des Plugins <config>
<type>select</type>
<items>
<numIndex index="0">
<numIndex index="0">Listenansicht</numIndex>
<numIndex index="1">MyController->list</numIndex>
</numIndex>
<numIndex index="1">
<numIndex index="0">Einzelansicht</numIndex>
<numIndex index="1">MyController->show;MyController->edit;MyController->update</numIndex>
</numIndex>
</items>
</config>
</TCEforms>
</switchableControllerActions>
</el>
</ROOT>
</sDEF>
</sheets>
</T3DataStructure>

Viel Spaß und danke für den Beitrag!

Mimi

Gravatar: Daniel
Daniel
10.07.2010
12:22

Die b-Tags sind raus - was auch immer die da verloren hatten :)

Gravatar: Felix Eggbert
Felix Eggbert
20.12.2010
17:22

In wie fern überschneiden sich denn die erlaubten Actions mit den Angaben in Tx_Extbase_Utility_Extension::configurePlugin in ext_localconf.php? Müssen die an beiden Stellen definiert werden?

Gravatar: Christoph
Christoph
22.07.2011
08:36

aufzurufende Actions

Nur weil ich da ein bisschen rumgesucht habe: Wenn man nachträglich die flexform.xml ändert (sprich Actions hinzufügt), muss man den Wert im Record im BE im Flexform erneut auswählen. Tut man das nicht, dann bleibt dort ein ungültiger Wert stehen.

Gravatar: Daniel
Daniel
12.03.2011
18:15

Hallo Felix,
Die verwendeten Controller/Action in der Flexform sind immer eine Teilmenge der in der localconf definierten Controller und Actions. Das heist, ja die müssen auf alle Fälle auch in der localconf definiert werden.

Gravatar: F.Mey
F.Mey
05.04.2011
16:17

2 Bemerkugnen

Hi,

zwei kurze Hinweise:
v.a. FE-Plugins, die über den neuen Extbase Kickstarter erstellt werden, enden nicht mehr auf _pi1, damit muss sich auch die $pluginSignature anders aufbauen, sonst wird das Flexform nicht im tt_content-Feld eingetragen.

2. Wie übergibst du der show-Action ein entsprechendes (standardmäßig gefordertes) Domain-Objekt ?

Gravatar: Daniel
Daniel
05.04.2011
17:03

2 Bemerkungen

Das Plugin _pi1 zu nennen hat natürlich nur noch historische Gründe. Dem Plugin kann ein beliebiger Identifier gegeben werden und muss nur zu den anderen Angaben in ext_localconf und ext_tables passen. Ich weiss gerade nicht, welchen Code der aktuelle Kickstarter für die Controller generiert, aber welches Objekt in welcher Action gefordert wird, bestimmst du mit den Angaben in der MethodenDefinition und dem Kommentar der Methode selbst. Das heisst eine show-Action kommt auch ganz ohne (übergebenes) Domain-Objekt aus.

Gravatar: F.Mey
F.Mey
05.04.2011
17:28

2 Bemerkugnen

Hi,

bleibt man mit den Action-Bezeichnungen innerhalb der ExtBase - Konventionen, wird die showAction zur Darstellung eines einzelnen Domänenobjekts verwendet. Dieses muss natürlich als Parameter übergeben werden und hier hakt es anscheinend noch. Abhilfe schafft hier eine eigene Methode, die wie du schon sagtest, ohne DO auskommt. Trotzdem: remember - "Convention over configuration" ;)...

Gravatar: Daniel
Daniel
05.04.2011
17:38

showAction

Dass es dafür eine Konvention gibt war mir unbekannt. Kannst du mir sagen wo das definiert ist?

Mein Kommentar

Notify me when someone adds another comment to this post

Zurück

Design © by Daniel Lienert / 2009