1
votes

I using the Typo3 7.6.10 Extbase Builder. I have a created an extension and a have a model with one controller. In my controller i have 2 actions. list(); searchbar();

Now i want to choose in the backend when im adding the plugin which action to start! I can't manage to do this option. I heard about the FlexForm Options and switchableControllerActions.

But i can't manage to do this. The Documentation is bad https://wiki.typo3.org/Extension_Development,_using_Flexforms#Create_Your_Extension

For Example: t3lib_extMgm is deprecated

Is there a valid example how to do this?

1

1 Answers

1
votes

Create an .xml file. I know of no convention, but it's a good idea to name the file the same as your plugin, because you need separate files for each plugin type of your extension.

typo3conf/ext/extensionkey/Configuration/FlexForms/Pluginname.xml

The xml file needs to contain at least a TCEform structure with the key switchableControllerActions as a select type option, like so.

<?xml version="1.0" encoding="UTF-8"?>
<T3DataStructure>
    <sheets>
        <general>
            <ROOT>
                <TCEforms>
                    <sheetTitle>Display type</sheetTitle>
                </TCEforms>
                <type>array</type>
                <el>
                    <switchableControllerActions>
                        <TCEforms>
                            <label>Display</label>
                            <config>
                                <type>select</type>
                                <items type="array">
                                    <numIndex index="1" type="array">
                                        <numIndex index="0">List</numIndex>
                                        <numIndex index="1">Controller->list</numIndex>
                                    </numIndex>
                                    <numIndex index="2" type="array">
                                        <numIndex index="0">Search bar</numIndex>
                                        <numIndex index="1">Controller->searchbar</numIndex>
                                    </numIndex>
                                </items>
                            </config>
                        </TCEforms>
                    </switchableControllerActions>
                </el>
            </ROOT>
        </general>
    </sheets>
</T3DataStructure>

Next, make the Flexform known in the Backend by registering the file. Make note of the $pluginSignature variable. It must match the pattern of extension_pluginname. You'll have to define the plugin name accordingly.

// Register FlexForm Configuration
 $GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist']['extension_plugin'] = 'pi_flexform';
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue(
    'extension_plugin', 
    'FILE:EXT:extensionkey/Configuration/FlexForms/Pluginname.xml'
);

In the example above, replace "extension_plugin" and "extensionkey" accordingly.

Lastly, flush the system cache and you should be good to go. The configuration option should turn up in the plugins settings. The switchableControllerActions value defined should then replace your standard action for the plugin instance.

There are, however, a few more things to point out: Note, that the actions you define replaces the allowed cacheableControllerAction combination. So, if your extension has, for extample, another action show() for this plugin instance, that one needs to be appended like so:

<numIndex index="1" type="array">
    <numIndex index="0">List</numIndex>
    <numIndex index="1">Controller->list;Controller->show</numIndex>
</numIndex>