cobject部分不输出(Typo3,流体)

时间:2019-05-04 14:48:02

标签: typo3 typoscript fluid typo3-8.x

我正在关注本教程,遇到一个问题: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'}" />

我尝试了不同的语法,但是没有运气。

1 个答案:

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