TYPO3 7:从扩展控制器中覆盖或删除页面模板

时间:2017-10-19 09:09:48

标签: php typo3 extbase typo3-7.6.x

我希望我的日历扩展能够返回XML和iCal输出,同时避免使用任何其他TypoScript (附加页面或typeNum)。为此,我创建了一个专用的导出控制器。正在加载正确的XML扩展模板,但它包含在常规HTML页面模板中。

以下是我在ExportController->listAction()中尝试过的内容。由于输出中没有HTML <head>部分,因此以下行符合我的预期:

$GLOBALS['TSFE']->config['config']['disableAllHeaderCode'] = 1;

使用以下行代替页面仍然被完全解析,尽管我可以看到$GLOBALS['TSFE']->tmpl->setup的f:debug输出中的更改:

$GLOBALS['TSFE']->tmpl->setup['page.']['10.']['file'] = 'path/to/empty/templatefile.xml';

我甚至更进一步尝试覆盖TypoScript($GLOBALS['TSFE']->tmpl->setup['page.']['10.']['file.']['stdWrap.']['cObject.']['default.'])中的所有模板设置 - 结果相同。

然而,当设置$GLOBALS['TSFE']->tmpl->setup = null;时,一些页面内容消失了:扩展的XML模板之后的所有输出以及所有内容元素之上 - 但模板的那部分仍然存在。

另外 - 并且没有成功 - 我试过了:

$this->objectManager->get(\TYPO3\CMS\Core\Page\PageRenderer::class)->setTemplateFile('path/to/empty/templatefile.xml');

是否有任何非TypoScript方法可以达到我的目的?

1 个答案:

答案 0 :(得分:1)

在调用控制器操作之前,操作模板文件将被解析。我所知道的唯一方法是覆盖控制器上的方法,例如setViewConfiguration,并以编程方式添加其他模板根路径 - 但这不一定与您的用例兼容。 它要求模板对象不指定模板路径和文件名,它必须只指定模板名称和(一组)模板根路径

您的用例看起来像文件路径和文件名在TS中设置,在这种情况下,不,您不能在TS之外覆盖它。

有时候,接受你需要将TS用于某些事情只是更简单的方法。毕竟,这是TYPO3的设计方式。