Typo3 Fluid - 如何检查两个或多个 colPos 是不是有内容然后打印 HTML

Posted

技术标签:

【中文标题】Typo3 Fluid - 如何检查两个或多个 colPos 是不是有内容然后打印 HTML【英文标题】:Typo3 Fluid - How do I check if two or more colPos have content and then print HTMLTypo3 Fluid - 如何检查两个或多个 colPos 是否有内容然后打印 HTML 【发布时间】:2014-09-20 06:55:50 【问题描述】:

仅当一个或多个 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 代码。

感谢您的帮助!

【问题讨论】:

【参考方案1】:

仅流体解决方案是将&lt;f:cObject&gt;-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-5col-6col-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>

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

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

【讨论】:

谢谢约斯特!我没有足够的分数给你一分。一旦我有,我会在这里给你一个点。它并没有像我预期的那样工作,但这帮助我解决了这个问题。 if 条件不比较超过 3 个变量,所以我将变量合并为一个,id 做了我需要的:) 谢谢!! 您应该仍然能够接受选票下方带有复选标记的答案。此外,condition 应该按照我写的方式工作,因为三个变量的内容只是连接在一起,如果所有三个变量都为空,则它是空的。但是您使用另一个变量的方法仍然很好,这样您就可以概括代码 sn-p 以使用可变数量的列。【参考方案2】:

自 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>

【讨论】:

以上是关于Typo3 Fluid - 如何检查两个或多个 colPos 是不是有内容然后打印 HTML的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 Typo3 内容元素图片的 Fluid 中的类别对象?

Fluid TYPO3:更新后出错:无法分析类:FluidTYPO3\Flux\ViewHelpers\Flexform\SheetViewHelper 可能未加载或没有自动加载器?

Fluid Typo3 - 如何获取通过来自不同页面 uid 的通量定义的变量

Typo3 Fluid:渲染flux:flexform.field.wizard.link的正确方法是啥?

TYPO3:在 Fluid 模板中硬编码的语言相关变量

从另一个扩展部分渲染 TYPO3 Fluid