частично отсутствует объект (Typo3, Fluid) - PullRequest
0 голосов
/ 04 мая 2019

Я следовал этому руководству и столкнулся с проблемой: 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 Ответ

1 голос
/ 04 мая 2019

Две вещи на заметку:

Во-первых, когда у вас есть что-то вроде следующего,

boxContent: '{f:cObject(typoscriptObjectPath:'lib.menu')->f:format.raw()}'

вы должны избегать внутренних кавычек с обратной косой чертой:

boxContent: '{f:cObject(typoscriptObjectPath:\'lib.menu\')->f:format.raw()}'

На самом деле в жидкости не существует какого-либо хорошего способа предотвратить эти случаи, особенно если вы вложите его еще дальше. Хотя вы можете использовать f: variable ViewHelper для установки временной переменной и использовать ее вместо аргумента boxContent.

Вторая часть, которую вы упомянули в ваших комментариях:

Вы должны применить f: format.raw в том месте, где вы выводите свой boxContent.

Так что вместо этого должно быть что-то вроде:

boxContent: '{f:cObject(typoscriptObjectPath:\'lib.menu\')}'

и в частичном вы делаете:

{boxContent -> f:format.raw()}

ViewHelpers имеют возможность отключить экранирующий перехватчик, но это работает только в том случае, если результат Viewhelper печатается напрямую. Если вы сохраните результат в переменной и позже выведете ее, экранирование все равно будет применяться к выходу переменной.

...