通过typoScript包含的前端插件不再适用于TYPO3 8.7

时间:2018-01-18 18:20:43

标签: typo3-8.x

TYPO3 7.6中的

我定义了一个前端插件,其类型为“PLUGIN_TYPE_CONTENT_ELEMENT”。

ext_localconf.php:

ExtensionUtility::configurePlugin(
    'MyVendor.' . $_EXTKEY,
    'Maildownload',
    ['Maildownload' => 'show'],
    [],
    ExtensionUtility::PLUGIN_TYPE_CONTENT_ELEMENT
);

configurePlugin方法创建一个typoScript安装程序,其中调用Extbase的Bootstrap类的“run()”方法:

...
tt_content.myext_maildownload.20 = USER
tt_content.myext_maildownload20.userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
...

这意味着Extbase通过在我的扩展程序的控制器“Maildownload”中调用“show”操作来处理请求。

我通过ajax调用我的插件。这意味着,我定义了一个单独的typenum页面,并通过typoScript包含插件:

setup.ts

ajax_page = PAGE
ajax_page {
  typeNum = 123
  config.disableAllHeaderCode = 1
  config.metaCharset = UTF-8
  config.debug = 0
  config.additionalHeaders = Content-type:application/json
  config.xhtml_cleaning = 0
  config.adminPanel = 0

  10 < tt_content.myext_maildownload
}

当我调用页面index.php?type = 123时,控制器“Maildownload”中的动作“show”将被执行。

升级到TYPO3 8.7后,此行为已明显改变。

生成的“configurePlugin()”方法的typoScript代码仍然相同。当我调用页面index.php?type = 123时,TYPO3将其呈现为普通内容元素,并且不再调用TYPO3 \ CMS \ Extbase \ Core \ Bootstrap-&gt;运行方法。所以我的showAction方法不会被调用。

我现在可以定义一个dataProcessor类并将showAction移动到它中。 但这不是一个很好的解决方案,因为我不想绕过完整的extbase渲染过程。

现在是否有一种新方法将我的插件包含在页面中,以便将其视为extbase插件而不是内容元素?

1 个答案:

答案 0 :(得分:0)

@andrei感谢您的回复,但它没有达到目的。

与此同时,我发现问题的原因是TYPO3 8.5的这一突破性变化:https://docs.typo3.org/typo3cms/extensions/core/Changelog/8.5/Breaking-78002-EnforceCHashArgumentForExtbaseActions.html?highlight=chash

所以一个可能的解决方案是在typoScript插件设置中将requireCHashArgumentForActionArguments设置为false:

plugin.tx_myextension {

   features.requireCHashArgumentForActionArguments = 0

   ...

}