Zum Inhalt springen

Flexform und switchableControllerActions

Erstellt am 16. Juli 2013 · 14 Antworten · letzte Antwort am 22. Oktober 2013

Tags: Frage

infastra ·

Moin,

das Plugin habe ich wie folgt eingerichtet.

In der ext_localconf.php steht folgendes:

Tx_Extbase_Utility_Extension::configurePlugin(
  $_EXTKEY,
  'PluginNameView',
  array('Plugin' => 'displayFormPanel'),
  array()
);

In der Datei ext_tables.php habe ich folgende Codezeilen zum Plugin:

Tx_Extbase_Utility_Extension::registerPlugin($_EXTKEY,'PluginNameView','Beschriftung');

$extensionName = t3lib_div::underscoredToUpperCamelCase($_EXTKEY);
$pluginNameViewSignature = strtolower($extensionName) . '_pluginnameview';

$GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist'][$pluginNameViewSignature] = 'pi_flexform';

t3lib_extMgm::addPiFlexFormValue($pluginNameViewSignature, 'FILE:EXT:' . $_EXTKEY . '/Configuration/FlexForms/Flexform.xml');

Die Controllerklasse sieht dann wie folgt aus:

class Tx_ExtensionName_Controller_PluginController extends Tx_Extbase_MVC_Controller_ActionController {
	public function displayFormPanelAction() {
		//do something
	}
}

Die Bezeichner habe ich angepasst und aus den jeweiligen Dateien nur die Zeilen herauskopiert, die das Plugin betrafen.

Hast Du eine Idee, was ich falsch gemacht oder vielleicht vergessen habe?

Viele Grüße
Mathias

Unbekannter Benutzer ·

Weiter oben schreibst du "die Arrays sind entsprechend gefüllt", das sieht mir hier aber nicht so aus:

array('Plugin' => 'displayFormPanel'),

Demnach ist nur die displayFormPanelAction() in deinem PluginController erlaubt.

infastra ·

Eigentlich hat dieser Controller auch nur eine Action. Daher dachte ich, dass das erste Array auch nur mit diesem Paar gefüllt werden müsste.

jank ·

Das zweite array ist nur für Controller Action Kombinationen, welche nicht gecached werden sollen.
Ansonsten sieht es eigentlich gut aus.
Denn Cache hast Du vermutlich schon geleert haben, da in diesem auch die erlaubten Kombinationen für das Plugin gespeichert sind.
Du kannst ja mal dein flexform posten wenn das funktioniert, dann steht da ja wie die Konfiguration sein muss.

infastra ·

Die Flexform sieht wie folgt aus:

<T3DataStructure>
  <meta>
    <langDisable>1</langDisable>
  </meta>
  <sheets>

    <sDefault>
      <ROOT>
        <TCEforms>
          <sheetTitle>Type Choice</sheetTitle>
        </TCEforms>
        <type>array</type>
        <el>
          <switchableControllerActions>
            <TCEforms>
              <label>Aktion</label>
              <config>
                <type>select</type>
                <items>
                  <numIndex index="0">
                    <numIndex index="0">Eigentlich nur ein Platzhalter</numIndex>
                    <numIndex index="1">Plugin->displayFormPanel</numIndex>
                  </numIndex>
                </items>
              </config>
            </TCEforms>
          </switchableControllerActions>
usw.

Wenn ich nun den gesamten Tag switchableControllerActions entferne, kommt es zum oben beschriebenen Fehler. Daraus schließe ich, dass das Tag bei jedem Plugin (bei der Verwendung von Flexform) vorkommen muss, damit es fehlerfrei funktioniert. Ist das richtig und wirklich Sinn und Zweck??

jank ·

Nein. Auch ohne switchableControllerActions im Flexform muss es funktionieren wenn die Plugin/Controller/Action Kombination richtig registriert und konfiguriert ist.
Vielleicht liegt es am Plugin Key!
Ein Beispiel aus der News Extension mit ein paar ergänzenden Kommentaren:

Audzug ext_localconf.php

Tx_Extbase_Utility_Extension::configurePlugin(
	$_EXTKEY,
	'Pi1', // Key des Plugins. Muss mit dem in ext_tables->registerPlugin übereinstimmen
	array(
		// Controller => Erlaubte Actions
		'News' => 'list,detail,dateMenu,searchForm,searchResult',
		'Category' => 'list',
		'Tag' => 'list',
	),
	array(
		'News' => 'searchForm,searchResult',
	)
);

Auszug ext_tables.php

Tx_Extbase_Utility_Extension::registerPlugin(
	$_EXTKEY,
	'Pi1', // Key des Plugins, so wird es in die tt_content Tabelle geschieben
		'LLL:EXT:' . $_EXTKEY . '/Resources/Private/Language/locallang_be.xml:pi1_title'
);
infastra ·

Das war es auch nicht, habe gerade noch mal kontrollieren lassen mithilfe von Suchen und Finden. Vielen Dank für die Hilfe, ich werde dort noch einmal in Ruhe am Wochenende drüber brüten 😉

jank ·

Wenn die Extension nicht geheim ist: Auf github ablegen und link posten.
Dann kann man da mal drüber schauen...

infastra ·

Hallo,

danke für die Antwort. Leider ist es eine Auftragsarbeit, aber ich werde die Erweiterung in abgewandelter Form ins github stellen und mich dann noch mal melden.

Viele Grüße

simonschneider ·

Hatte das gleiche Problem.

Lösche mal dein Seiteninhaltselement, setzte den Part wo du die Flexform registrierst unter Tx_Extbase_Utility_Extension::configurePlugin in der localconf und lösche den Cache.

Wenn du jetzt das Inhaltselement wieder erzeugst dürfte es funktionieren.

infastra ·

Stimmt, das scheint ein Bug von Typo3 zu sein, dass es beim Flexform alte Einstellungen behält und dann beim Laden Inhaltselemente ein falscher "Controllerbaum" entsteht.