【问题标题】:TYPO3 7: override or remove page template from within extension controllerTYPO3 7:从扩展控制器中覆盖或删除页面模板
【发布时间】:2017-10-19 09:09:48
【问题描述】:

我希望我的日历扩展返回 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 方法可以实现我想要的?

【问题讨论】:

    标签: php typo3 extbase typo3-7.6.x


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢你,克劳斯。我现在使用专用的 pageType 选择了 TS 解决方案——也是因为我不明白如何使用 setViewConfiguration。我的方法总是在脚本中尽可能多地做,并且只将 TS 用于真正必要的设置,例如当我想在几种可能性之间添加选择时。
    猜你喜欢
    • 2016-10-17
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    • 2013-05-15
    相关资源
    最近更新 更多