cobject 部分无输出(Typo3,Fluid)
cobject in partial no output (Typo3, Fluid)
我在学习本教程时遇到了一个问题:https://wiki.typo3.org/T3Doc/Fluidtemplate_by_example#The_Layout-Switch
部分应该渲染两次。但是,仅呈现第一部分。第二个以 "lib.menu" 作为参数,未呈现。
模板:
<f:section name="pageInfoBoxes">
<f:render partial="Colorbox" arguments="{boxHeader : 'Abstract', boxContent : '{data.title}', boxColor : 'blue'}" />
<f:render partial="Colorbox" arguments="{boxHeader : 'Subpages', boxContent : '{f:cObject(typoscriptObjectPath:'lib.menu')->f:format.raw()}', boxColor : 'red'}" />
</f:section>
部分(colorbox.html):
<div class="box box-{boxColor}">
<h3>{boxHeader}</h3>
<div class="contains">
{boxContent}
</div>
</div>
布局:
<header>
<h1>
<f:link.page pageUid="67" title="Nuremberg Shop">Nuremberg Shop</f:link.page>
</h1>
<f:render section="topMenu" />
</header>
<div class="row">
<div class="span8">fileadmin/.../Layouts/
<f:render section="content"/>
</div>
<div class="span4">
<f:if condition="{contentRight}">
<f:then><f:render section="contentRight"/></f:then>
<f:else><f:render section="pageInfoBoxes"/></f:else>
</f:if>
</div>
</div>
<footer>
<!-- here some stuff for footer... -->
</footer>
我不明白为什么这条线没有正确呈现:
<f:render partial="Colorbox" arguments="{boxHeader : 'Subpages', boxContent : '{f:cObject(typoscriptObjectPath:'lib.menu')->f:format.raw()}', boxColor : 'red'}" />
我尝试了不同的语法,但没有成功。
注意两点:
首先,当你遇到如下情况时,
boxContent: '{f:cObject(typoscriptObjectPath:'lib.menu')->f:format.raw()}'
你必须用反斜杠转义内部引号:
boxContent: '{f:cObject(typoscriptObjectPath:\'lib.menu\')->f:format.raw()}'
在流体中并没有什么好的方法来防止这些情况,特别是如果你进一步嵌套它。尽管您可以使用 f:variable ViewHelper 来设置临时变量并将其用作 boxContent 参数。
您在评论中提到的第二部分:
您必须在输出 boxContent 的位置应用 f:format.raw。
所以它应该是这样的:
boxContent: '{f:cObject(typoscriptObjectPath:\'lib.menu\')}'
在部分你做的:
{boxContent -> f:format.raw()}
ViewHelpers 有一个选项可以禁用转义拦截器,但只有在直接打印 viewhelper 的结果时才有效。如果将结果存储在变量中并稍后输出变量,转义仍然适用于变量的输出。
我在学习本教程时遇到了一个问题:https://wiki.typo3.org/T3Doc/Fluidtemplate_by_example#The_Layout-Switch
部分应该渲染两次。但是,仅呈现第一部分。第二个以 "lib.menu" 作为参数,未呈现。
模板:
<f:section name="pageInfoBoxes">
<f:render partial="Colorbox" arguments="{boxHeader : 'Abstract', boxContent : '{data.title}', boxColor : 'blue'}" />
<f:render partial="Colorbox" arguments="{boxHeader : 'Subpages', boxContent : '{f:cObject(typoscriptObjectPath:'lib.menu')->f:format.raw()}', boxColor : 'red'}" />
</f:section>
部分(colorbox.html):
<div class="box box-{boxColor}">
<h3>{boxHeader}</h3>
<div class="contains">
{boxContent}
</div>
</div>
布局:
<header>
<h1>
<f:link.page pageUid="67" title="Nuremberg Shop">Nuremberg Shop</f:link.page>
</h1>
<f:render section="topMenu" />
</header>
<div class="row">
<div class="span8">fileadmin/.../Layouts/
<f:render section="content"/>
</div>
<div class="span4">
<f:if condition="{contentRight}">
<f:then><f:render section="contentRight"/></f:then>
<f:else><f:render section="pageInfoBoxes"/></f:else>
</f:if>
</div>
</div>
<footer>
<!-- here some stuff for footer... -->
</footer>
我不明白为什么这条线没有正确呈现:
<f:render partial="Colorbox" arguments="{boxHeader : 'Subpages', boxContent : '{f:cObject(typoscriptObjectPath:'lib.menu')->f:format.raw()}', boxColor : 'red'}" />
我尝试了不同的语法,但没有成功。
注意两点:
首先,当你遇到如下情况时,
boxContent: '{f:cObject(typoscriptObjectPath:'lib.menu')->f:format.raw()}'
你必须用反斜杠转义内部引号:
boxContent: '{f:cObject(typoscriptObjectPath:\'lib.menu\')->f:format.raw()}'
在流体中并没有什么好的方法来防止这些情况,特别是如果你进一步嵌套它。尽管您可以使用 f:variable ViewHelper 来设置临时变量并将其用作 boxContent 参数。
您在评论中提到的第二部分:
您必须在输出 boxContent 的位置应用 f:format.raw。
所以它应该是这样的:
boxContent: '{f:cObject(typoscriptObjectPath:\'lib.menu\')}'
在部分你做的:
{boxContent -> f:format.raw()}
ViewHelpers 有一个选项可以禁用转义拦截器,但只有在直接打印 viewhelper 的结果时才有效。如果将结果存储在变量中并稍后输出变量,转义仍然适用于变量的输出。