在主模板中使用部分输出作为变量

Using the output of a partial as a variable in main template

出题:

我使用局部渲染不可缓存的内容(在本例中为随机图像)。 我在主模板中使用以下代码执行此操作:

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

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

<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-->

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

我觉得你有点混淆了两件事,所以我想把你的问题分开:

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

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

但是让我们看一个测试:

有一个部分:Test/Message
含内容:"It is a test"

然后在主模板中你可以使用这样的东西:

    <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--> ?

这是一个未缓存的内容,因此类似于 TypoScript 中的 COA_INTUSR_INT 个对象。

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

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

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