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



我希望我的日历扩展返回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(TYPO3CMSCorePagePageRenderer::class)->setTemplateFile('path/to/empty/templatefile.xml');

有什么非TypoScript的方法可以实现我想要的吗?

在调用控制器操作之前,操作模板文件将被解析。据我所知,唯一的方法是覆盖控制器上的方法,如setViewConfiguration,并通过程序添加一个额外的模板根路径,但这不一定与您的用例兼容它要求模板对象不指定模板路径和文件名,只能指定模板名称和(一组)模板根路径

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

有时,接受某些事情需要使用TS是更简单的方法。毕竟,TYPO3就是这样设计的。

最新更新