1

仅当一个或多个 colPos 中包含内容时,我才想打印以下 HTML。如果其中没有内容元素,那么我不想打印这个 HTML 块(整个“行”)。

<div class="row">
  <div class="col-sm-4">
      <f:cObject typoscriptObjectPath="lib.dynamicContent" data="5" />
  </div>
  <div class="col-sm-4">
      <f:cObject typoscriptObjectPath="lib.dynamicContent" data="6" />
  </div>
  <div class="col-sm-4">
      <f:cObject typoscriptObjectPath="lib.dynamicContent" data="7" />
  </div>
</div>

我考虑过获取 colPos 并尝试对 Fluid 进行 OR 条件。但我不知道该怎么做。我知道我可以像这样一一检查:

<f:if condition="{f:cObject(typoscriptObjectPath: 'lib.dynamicContent', data: '5')}">
   ...HTML for colPos 5 HERE...
</f:if>

但我不想那样做。在我的模板中,我有近 50 个不同的 colPos,它们按块(行)组织。像 colPos 1 到 5 是一个块(行)。colPos 10 到 25 在另一个块(行)中。但是有些页面不会使用 colPos 的某些块(行),因此没有理由为那些未使用的 colPos 块(行)打印 HTML 代码。

谢谢你的帮助!

4

2 回答 2

3

仅流体解决方案是将<f:cObject>-ViewHelpers 的每个结果分配给一个变量,然后在条件中使用这些变量的串联。示例中的 v:-namespace 是扩展 vhs 的命名空间:

<v:variable.set name="col-5" value="{f:cObject(typoscriptObjectPath: 'lib.dynamicContent', data: '5')}"/>
<v:variable.set name="col-6" value="{f:cObject(typoscriptObjectPath: 'lib.dynamicContent', data: '6')}"/>
<v:variable.set name="col-7" value="{f:cObject(typoscriptObjectPath: 'lib.dynamicContent', data: '7')}"/>

<f:if condition="{col-5}{col-6}{col-7}">
    <div class="row">
        <div class="col-sm-4">{col-5}</div>
        <div class="col-sm-4">{col-6}</div>
        <div class="col-sm-4">{col-7}</div>
    </div>
</f:if>

你当然应该把这些东西移到一个部分,它得到一个列数组作为参数打印。然后你只需要编写一次逻辑。

另外,如果你真的需要 25 列,你应该再想一想。

于 2014-07-29T09:40:27.220 回答
1

从 TYPO3 8.6 开始,无需扩展名“vhs”就可以做到这一点:

<f:variable name="col-5">
    <f:cObject typoscriptObjectPath="lib.dynamicContent" data="5" />
</f:variable>
<f:if condition="{col-5}">
     <f:format.raw>{col-5}</f:format.raw>
</f:if>
于 2018-03-19T14:45:51.847 回答