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 的结果时才有效。如果将结果存储在变量中并稍后输出变量,转义仍然适用于变量的输出。