Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typo3 在主模板中将分部的输出用作变量_Typo3_Fluid_Typo3 7.6.x - Fatal编程技术网

Typo3 在主模板中将分部的输出用作变量

Typo3 在主模板中将分部的输出用作变量,typo3,fluid,typo3-7.6.x,Typo3,Fluid,Typo3 7.6.x,毫无疑问: 我使用分部渲染不可缓存的内容(在本例中为随机图像)。 我在主模板中使用以下代码执行此操作: {v:render.uncache(partial: 'Random-Image', arguments: {iterator: images})} 直接在模板中输出正确的内容(图像的url,例如fileadmin/upload/abc.jpg)。但是如果我想用它作为中src的变量,我想你把两件事弄混了,所以我想把你的问题分开: 1)是否可以将部分的输出用作变量? 是的,就像你想要的那样。

毫无疑问:

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

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

直接在模板中输出正确的内容(图像的url,例如
fileadmin/upload/abc.jpg
)。但是如果我想用它作为
中src的变量,我想你把两件事弄混了,所以我想把你的问题分开:

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>

通过
失败
在这种情况下,您将看到“已通过”,如果您将部分更改为“It should failed”,那么您将得到“failed”呈现

2)为什么会看到

这是一个未缓存的内容,因此类似于
COA_INT
USR_INT
中的对象

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

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


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

Ah。。也许我的问题有点错了。对于您的2)部分:是否可以使用此变量(
{v:render.uncache
的输出)作为变量?我想要的是只选择一个随机迭代器项,并在主模板(缓存)中使用它您还可以看看我的原始问题吗?也许有一种更好的方法可以在没有分部的情况下实现我想要的功能:我认为,您无法实现这一点。您不能将分部的结果作为字符串或变量返回到v:render.uncache,因为ViewHelper生成不可缓存的内容,并且只提供指向的指针它。我认为你应该在部分中使用你问题的一部分,所以试着用它来传递整个图像,而不仅仅是路径,忽略INT_脚本,这只是为了不缓存内容。我理解,谢谢,非常有趣。对于你的第二个评论,是的,这就是我现在做的,我在部分中使用f:图像。我的目标是至于创建一个通用部分,我也可以用于其他迭代器。我不喜欢这样一个事实,我需要一个单独的文件来完成这个小任务
<f:debug>
{v:render.uncache(partial: 'Random-Image',  arguments: {iterator: images})}
</f:debug>
    <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>