我正在关注本教程,遇到一个问题: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'}" />
我尝试了不同的语法,但是没有运气。
答案 0 :(得分:1)
注意两点:
首先,当您遇到以下类似情况时,
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的结果时,该选项才有效。如果将结果存储在变量中并在以后输出变量,转义仍然适用于变量的输出。