typo3 - 扩展中的多个控制器
问题描述
是否真的可以编写一个具有多个控制器的扩展程序,该扩展程序将在所有站点上自动运行?我想要的是一个扩展,它会在站点 A 打开时调用控制器 A,在站点 B 打开时调用控制器 B 等等。
我在这里看到https://docs.typo3.org/typo3cms/extensions/news/使用FlexForms和switchableControllerActions可以实现多个控制器。问题是,当我将插件添加到站点时,我必须指定哪个控制器应该适用于该站点。我希望直接在扩展中进行配置,而不是从typo3后端。
我知道我可以使用页面 id 并基于它调用函数,但我试图避免它并寻找更好的解决方案。
解决方案
当然这是可能的。您需要在这里使用 FlexForms,它基本上是 tt_content 记录中基于 XML 的字段。因此,您可以直接配置您的插件您的内容记录。通常用于设置记录限制、排序等。但也用于设置任何允许的控制器->动作组合,其中第一个是默认值。看看他们如何使用它的一些众所周知的扩展。下面是 FlexForm 相关部分的一点抽象:
<switchableControllerActions>
<TCEforms>
<label>LLL:EXT:ra_registration/Resources/Private/Language/locallang_be.xml:flexforms_general.mode</label>
<config>
<type>select</type>
<items>
<numIndex index="0">
<numIndex index="0">LLL:EXT:ra_registration/Resources/Private/Language/locallang_be.xml:flexforms_general.mode.registration_index</numIndex>
<numIndex index="1">Registration->index;Registration->register;User->new;User->create;User->confirm;User->index;User->remind</numIndex>
</numIndex>
<numIndex index="1">
<numIndex index="0">LLL:EXT:ra_registration/Resources/Private/Language/locallang_be.xml:flexforms_general.mode.registration_reminder</numIndex>
<numIndex index="1">User->index;User->remind;User->remindConfirm</numIndex>
</numIndex>
</items>
</config>
</TCEforms>
</switchableControllerActions>
如前所述,您可以定义任何控制器/操作组合,例如 MyProduct->index 或 MyCustomer->list 等。
为了使用 FlexForm,您需要在 ext_tables.php 中注册它
$TCA['tt_content']['types']['list']['subtypes_addlist'][$pluginSignature] = 'pi_flexform';
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue('myextenion_pi1', 'FILE:EXT:' . $_EXTKEY . '/Configuration/FlexForms/setup.xml');
推荐阅读
- tensorflow - TensorFlow 2 中层的动态输入形状
- iterator - 迭代序列后未触发聚合序列中的 OnComplete
- r - 同样的错误来自哪里,执行 LMER 测试?附资料
- java - Java - 如何从 xml 验证文件中捕获所有异常/错误
- javascript - 锁定命令 Discord.js
- python - scrapy/regex 从 html 获取 json_object
- date - SAS 94 如何计算距离下一条记录的天数
- html - 如何在标签后向文本区域添加换行符
- python - 使用 Python Pandas 处理数据并进行数据透视
- javascript - 使用 Kaltura VPaaS API,上传视频后如何获得 READY 状态?