2

出于这个问题:带有 v:iterator.random 的随机图像 | 缓存问题

我使用部分来渲染不可缓存的东西(在这种情况下是随机图像)。我在主模板中使用此代码执行此操作:

{v:render.uncache(partial: 'Random-Image',  arguments: {iterator: images})}

直接在模板中输出正确的内容(例如图像的 url fileadmin/upload/abc.jpg)。但是,如果我想将其用作 src 的变量,则<f:image它不起作用:

<f:image src="{v:render.uncache(partial: 'Random-Image',  arguments: {iterator: images})}" alt="alt text" />

也将其设置为变量v:variable.set不起作用。

我得到的是:<!--INT_SCRIPT.0081e57d9fd92c925bb35d79fd9d3f79-->

当我调试它时:

<f:debug>
{v:render.uncache(partial: 'Random-Image',  arguments: {iterator: images})}
</f:debug>

我明白了<!--INT_SCRIPT.0081e57d9fd92c925bb35d79fd9d3f79-->

那么,是否可以将部分的输出用作变量?或者是否可以在部分中设置一个变量并在主模板中使用它?

4

1 回答 1

1

我认为你混淆了两件事,所以我想把你的问题分开:

1)是否可以将部分的输出用作变量?

是的,就像你想要的那样。其实你做到了。

但是让我们看一个测试:

有一个部分:测试/消息
内容:“这是一个测试”

然后在主模板中,您可以使用如下内容:

    <div class="test">
       <f:if condition="{f:render(partial:'Test/Message')}
             == 'It is a test'">
          <f:then>Passed</f:then>
          <f:else>Failed</f:else>
       </f:if>
    </div>

在这种情况下,您会看到“Passed”,如果您将 Partial 更改为“It should failed”,那么您将获得“Failed”渲染。

2)你为什么看到<!--INT_SCRIPT.0081e57d9fd92c925bb35d79fd9d3f79-->

这是一个未缓存的内容,所以喜欢COA_INTUSR_INT对象在TypoScript.

typo3/sysext/frontend/Classes/Controller/TypoScriptFrontendController.php你可以在它的名字中找到一个函数INTincScript_process。它负责在代码中找到这样的行并将它们替换为未缓存的内容。

这意味着,如果您渲染模板,则部分渲染仅对未缓存对象的引用,而不是内容本身。

最后提出解决原始问题的方法,尝试在局部渲染整个图像,而不仅仅是它的路径。因此,在使用 v:iterate.random ViewHelper 的部分中包含 。然后 v:render.uncache 应该将整个图像块标记为不可缓存。

于 2016-04-14T13:10:59.990 回答