我想仅在一个或多个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代码。
感谢您的帮助!
答案 0 :(得分: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>
你当然应该将这些东西移动到partial,这将获得要作为参数打印的列数组。然后你只需要编写一次逻辑。
另外,如果确实需要25列,你应该再想一想。
答案 1 :(得分: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>