我在我的扩展setup.txt typoscript中定义了一个数组,如下所示:
settings{
halls {
0 = Default
1 = Mississauga
2 = Halifax
3 = Niagara Falls
4 = Oakville
5 = Pickering
}}
如何在我的流体模板中找到大厅阵列的长度?如果长度大于1,我希望if条件做一件事,如果不长,我想要做另一件事。
我正在使用带有extbase 1.3的typo3 v4.5.32。
谢谢。 我尝试了这个,但它推出了两个标签而不是一个。第一个if用来证明有多个元素,下一个用于打印出一个只有它是第一个元素。
<f:for each="{settings.halls}" as="hall" key="number" iteration="itemIteration">
<f:if condition="{itemIteration.isFirst != itemIteration.isLast}">
<f:if condition="{itemIteration.index == 0}">
<th><f:translate key="tx_bpscoupons_domain_model_coupon.hall" /></th>
</f:if>
</f:if>
</f:for>
为什么呢?
更新:这是我的工作,因为缺乏“阵列长度&gt; 1”流体
<f:for each="{settings.halls}" as="hall" key="number" iteration="itemIteration">
<f:if condition="{itemIteration.isFirst}">
<f:then>
<f:if condition="{itemIteration.isLast}">
// if both first and last there is only one so skip
</f:if>
</f:then>
<f:else>
<f:if condition="{itemIteration.isLast}">
//if there is more than one element in halls then eventually you'll get here once so print out th tags
<th><f:translate key="tx_bpscoupons_domain_model_coupon.hall" /></th>
</f:if>
</f:else>
</f:if>
</f:for>
并打印出数据:
<f:for each="{settings.halls}" as="hall" key="number" iteration="itemIteration">
<f:if condition="{itemIteration.isFirst}">
<f:then>
<f:if condition="{itemIteration.isLast}">
<f:then>
</f:then>
<f:else>
<f:if condition="{number} == {coupon.hall}"><td>{hall}</td>
</f:if>
</f:else>
</f:if>
</f:then>
<f:else>
<f:if condition="{number} == {coupon.hall}"><td>{hall}</td>
</f:if>
</f:else>
</f:if>
</f:for>
难看,但似乎工作。
更新2: DOH!我错过了总数,只是我需要的但是我在寻找长度或数量,所以这段代码就是我想要的:
<f:for each="{settings.halls}" as="hall" key="number" iteration="itemIteration">
<f:if condition="{itemIteration.total} > 1">
<f:if condition="{itemIteration.isLast}">
<th><f:translate key="tx_bpscoupons_domain_model_coupon.hall" /></th>
</f:if>
</f:if>
</f:for>
答案 0 :(得分:4)
您可以使用f:count
ViewHelper找到数组的长度。就像其他ViewHelper一样,它可以用作内联表示法(你可以找到更多here)
正确的代码是:
<f:if condition="{settings.halls -> f.count()} > 1">
<f:then>
//your code for then
</f:then>
<f:else>
//your code for else
</f:else>
</f:if>
答案 1 :(得分:0)
请参阅上面的更新#2以获得答案。重申:
<f:for each="{settings.halls}" as="hall" key="number" iteration="itemIteration">
<f:if condition="{itemIteration.total} > 1">
<f:if condition="{itemIteration.isLast}">
<th><f:translate key="tx_bpscoupons_domain_model_coupon.hall" /></th>
</f:if>
</f:if>
</f:for>
答案 2 :(得分:0)
对于那些正在为此寻找自定义视图的人:
class ArrayCountViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper {
/**
* Get array count
*
* @param mixed $array
* @return string
*/
public function render($array) {
if (!is_array($array))
return 0;
return count($array);
}
}
答案 3 :(得分:0)
<f:if condition="{f:count(subject: settings.halls)} > 1"> do something </f:if>