有没有一种方法可以在具有可缓存和不可缓存extbase操作的页面上使用PageRenderer方法?

时间:2019-06-13 13:47:27

标签: typo3 extbase typo3-8.x

如果页面包含两个Extbase插件,并且一个插件调用了一个可缓存的动作,而另一个插件则是一个不可缓存的动作,则添加CSS和JavaScript文件的PageRenderer方法调用不起作用。没有错误消息,但文件未添加到HTML标记中。

我试图将PageRenderer方法调用放入控制器方法initializeActioninitializeViewlistAction中。没关系。

如果两个插件的操作都是可缓存的或不可缓存的,则PageRenderer方法调用将按预期工作。

如果我将可缓存动作设为不可缓存,反之亦然,则PageRenderer方法调用也不起作用。可以执行或不可执行的动作并不重要。

我尝试对Fluid模板中的HeaderAssets和FooterAssets部分使用现代方式。这里存在同样的问题:如果同时调用了可缓存动作和不可缓存动作,则不会渲染这些节。

/* @var $pageRenderer \TYPO3\CMS\Core\Page\PageRenderer */
$pageRenderer = $this->objectManager->get(\TYPO3\CMS\Core\Page\PageRenderer::class);
$pageRenderer->addCssFile('my.css');
$pageRenderer->addJsFooterFile('my.js');

我知道缓存和PageRenderer(USER和USER_INT对象)存在问题。但是我不明白为什么PageRenderer方法调用仅对可缓存或不可缓存动作起作用,而对可缓存和不可缓存动作都失败。这是应有的行为吗?如何使PageRenderer方法调用起作用?

1 个答案:

答案 0 :(得分:0)

通过PageRenderer添加CSS或JavaScript文件在根本无法执行操作的extbase插件中不起作用。或至少不可靠。仅在具有链接和脚本标签的页面的HTML标记已经完全呈现之后,不可缓存动作的呈现输出才会添加到页面模板中。因此,不可能添加其他CSS和JavaScript文件。 (通过TypoScript添加文件是一种方法。)