Flexform und switchableControllerActions

  • infastra infastra
    Padawan
    0 x
    46 Beiträge
    0 Hilfreiche Beiträge
    16. 07. 2013, 22:32

    Guten Abend,

    ich bin gerade dabei eine Erweiterung in fluid und extbase umzusetzen. Dabei habe ich diverse Ansichten, die ich auch in der ext_localconf.php via

    1. Tx_Extbase_Utility_Extension::configurePlugin($_EXTKEY,'PluginName', array(), array());
    bekanntgebe. (Die Arrays sind natürlich entsprechend gefüllt). Für die Konfiguration des Plugins habe ich mich für ein FlexForm entschieden. Im Backend funktioniert das Ganze wunderbar, aber im Frontend habe ich ständig die Fehlermeldung
    1. #1316104317: The default controller for extension "ExtensionName" and plugin "PluginName" can not be determined. Please check for Tx_Extbase_Utility_Extension::configurePlugin() in your ext_localconf.php
    erhalten. Nach mehrstündigen googeln und probieren, habe ich die Option mit den switchableControllerActions zum FlexForm hinzugefügt. Das Ergebnis war eine korrekte Ausgabe.

    Mir stellt sich nun allerdings die Frage, muss ich die Option mit den switchableControllerActions immer angeben auch wenn ich nur eine einzige Action im Plugin habe, die ja sogar in der Methode configurePlugin angegeben wurde? #paralyzed#

    Ich verwende die Typo3-Version 4.7.12.

    Viele Grüße
    Mathias


  • froemken froemken
    Jedi-Ratsmitglied
    0 x
    811 Beiträge
    1 Hilfreiche Beiträge
    22. 07. 2013, 21:58

    Hallo Mathias,

    etwas verwirrend, was Du da schreibst. configurePlugin hat nichts mit dem Backend zu tun. Wenn überhaupt dann allerhöchstens registerModule().
    SwitchableControllerActions brauchst Du nur, wenn Du in ein und demselben Plugin verschiedene Startansichten konfigurieren willst. Diese Variante ist also nicht zwingend erforderlich. Aber alle dort konfigurierten Ansichten müssen auch in der ext_localconf.php vorhanden sein.

    Stefan

  • infastra infastra
    Padawan
    0 x
    46 Beiträge
    0 Hilfreiche Beiträge
    25. 07. 2013, 08:05

    Hallo Stefan,

    danke für Deine Antwort! Sorry, mit Backend meinte ich, dass ich das Plugin im Backend anlegen und bearbeiten kann.

    Die Sache mit den SwitchableControllerActions habe ich eigentlich auch so verstanden wie Du. Nun kommt leider ein aber. Wenn ich die Tags mit dem switchableControllerActions wieder aus der FlexForm-Definition entferne, erhalte ich den oben geposteten Fehler. Das Plugin enthält auch nur einen Eintrag. Dieses Verhalten hatte ich bereits bei einer anderen Erweiterung und habe daraus geschlossen, dass die Angabe mit den SwitchableControllerActions zwingend notwendig ist bei der Verwendung von FlexForm.

    Könntest Du mir eventuell ein Beispiel geben für den Eintrag in der ext_localconf?

    Viele Grüße
    Mathias

  • kitsunet kitsunet
    Flash Gordon
    0 x
    2559 Beiträge
    27 Hilfreiche Beiträge
    25. 07. 2013, 09:07

    Kannst Du bitte mal (von mir aus mit geänderten Bezeichnern) deine Pluginkonfiguration vollständig posten?

    config.baseURL = http://www.kitsunet.com/
    TYPO3 Flow und Neos Community Contact
    Release Manager TYPO3 Neos 1.1
    Ich habe Probleme mit den PMs hier, also schreibt mir bitte eine Mail oder über Twitter!

  • infastra infastra
    Padawan
    0 x
    46 Beiträge
    0 Hilfreiche Beiträge
    27. 07. 2013, 19:04

    Moin,

    das Plugin habe ich wie folgt eingerichtet.

    In der ext_localconf.php steht folgendes:

    1. Tx_Extbase_Utility_Extension::configurePlugin(
    2. $_EXTKEY,
    3. 'PluginNameView',
    4. array('Plugin' => 'displayFormPanel'),
    5. );

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

    1. Tx_Extbase_Utility_Extension::registerPlugin($_EXTKEY,'PluginNameView','Beschriftung');
    2.  
    3. $extensionName = t3lib_div::underscoredToUpperCamelCase($_EXTKEY);
    4. $pluginNameViewSignature = strtolower($extensionName) . '_pluginnameview';
    5.  
    6. $GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist'][$pluginNameViewSignature] = 'pi_flexform';
    7.  
    8. t3lib_extMgm::addPiFlexFormValue($pluginNameViewSignature, 'FILE:EXT:' . $_EXTKEY . '/Configuration/FlexForms/Flexform.xml');

    Die Controllerklasse sieht dann wie folgt aus:

    1. class Tx_ExtensionName_Controller_PluginController extends Tx_Extbase_MVC_Controller_ActionController {
    2. public function displayFormPanelAction() {
    3. //do something
    4. }
    5. }

    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

  • kitsunet kitsunet
    Flash Gordon
    0 x
    2559 Beiträge
    27 Hilfreiche Beiträge
    29. 07. 2013, 08:21

    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.

    config.baseURL = http://www.kitsunet.com/
    TYPO3 Flow und Neos Community Contact
    Release Manager TYPO3 Neos 1.1
    Ich habe Probleme mit den PMs hier, also schreibt mir bitte eine Mail oder über Twitter!

  • infastra infastra
    Padawan
    0 x
    46 Beiträge
    0 Hilfreiche Beiträge
    30. 07. 2013, 09:56

    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 jank
    Sternenflotten-Admiral
    0 x
    158 Beiträge
    0 Hilfreiche Beiträge
    30. 07. 2013, 13:44

    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 infastra
    Padawan
    0 x
    46 Beiträge
    0 Hilfreiche Beiträge
    30. 07. 2013, 18:11

    Die Flexform sieht wie folgt aus:

    1. <T3DataStructure>
    2. <meta>
    3. <langDisable>1</langDisable>
    4. </meta>
    5. <sheets>
    6.  
    7. <sDefault>
    8. <ROOT>
    9. <TCEforms>
    10. <sheetTitle>Type Choice</sheetTitle>
    11. </TCEforms>
    12. <type>array</type>
    13. <el>
    14. <switchableControllerActions>
    15. <TCEforms>
    16. <label>Aktion</label>
    17. <config>
    18. <type>select</type>
    19. <items>
    20. <numIndex index="0">
    21. <numIndex index="0">Eigentlich nur ein Platzhalter</numIndex>
    22. <numIndex index="1">Plugin->displayFormPanel</numIndex>
    23. </numIndex>
    24. </items>
    25. </config>
    26. </TCEforms>
    27. </switchableControllerActions>
    28. 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 jank
    Sternenflotten-Admiral
    0 x
    158 Beiträge
    0 Hilfreiche Beiträge
    31. 07. 2013, 15:18

    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

    1. Tx_Extbase_Utility_Extension::configurePlugin(
    2. $_EXTKEY,
    3. 'Pi1', // Key des Plugins. Muss mit dem in ext_tables->registerPlugin übereinstimmen
    4. // Controller => Erlaubte Actions
    5. 'News' => 'list,detail,dateMenu,searchForm,searchResult',
    6. 'Category' => 'list',
    7. 'Tag' => 'list',
    8. ),
    9. 'News' => 'searchForm,searchResult',
    10. )
    11. );

    Auszug ext_tables.php

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