Typo3 7 Extbase操作FlexForm

时间:2016-08-09 20:08:34

标签: typo3 extbase typo3-7.6.x

我使用的是Typo3 7.6.10 Extbase Builder。 我有一个创建扩展和一个模型与一个控制器。 在我的控制器中我有2个动作。 list(); searchbar();

现在我想在后端添加插件时选择哪个动作开始!我无法做到这一点。 我听说过FlexForm选项和 switchableControllerActions

但我无法做到这一点。文档很糟糕https://wiki.typo3.org/Extension_Development,_using_Flexforms#Create_Your_Extension

例如:不推荐使用t3lib_extMgm

有一个有效的例子如何做到这一点?

1 个答案:

答案 0 :(得分:1)

创建.xml文件。我知道没有惯例,但最好将文件命名为与插件相同,因为扩展的每个插件类型都需要单独的文件。

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

xml文件至少需要包含一个TCEform结构,并将键switchableControllerActions作为选择类型选项,如下所示。

<?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>

接下来,通过注册文件使后端知道Flexform。记下$pluginSignature变量。它必须与extension_pluginname的模式匹配。您必须相应地定义插件名称。

$extensionName = strtolower(\TYPO3\CMS\Core\Utility\GeneralUtility::underscoredToUpperCamelCase($_EXTKEY));
$pluginSignature = $extensionName.'_'.$pluginName;

//...

// Register FlexForm Configuration
 $TCA['tt_content']['types']['list']['subtypes_addlist'][$pluginSignature] = 'pi_flexform';
ExtensionManagementUtility::addPiFlexFormValue(
    $pluginSignature, 
    'FILE:EXT:'.$_EXTKEY.'/Configuration/FlexForms/Pluginname.xml'
);

最后,刷新系统缓存,你应该好好去。配置选项应该在插件设置中出现。然后,定义的switchableControllerActions值应替换插件实例的标准操作。

然而,还有一些事情需要指出:注意,您定义的操作会替换允许的cacheableControllerAction组合。因此,如果您的扩展程序为此插件实例提供了另一个操作show(),则需要添加一个,如下所示:

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