【问题标题】:how to: find the length of a typoscript defined array in fluid?如何:在流体中找到一个打字稿定义的数组的长度?
【发布时间】:2014-01-18 12:13:45
【问题描述】:

我在我的扩展 setup.txt 打字稿中定义了一个数组,如下所示:

settings{
        halls {
            0 = Default
            1 = Mississauga   
            2 = Halifax
            3 = Niagara Falls 
            4 = Oakville 
            5 = Pickering 
        }}

如何在我的流体模板中找到大厅数组的长度?如果长度大于 1,我想要一个 if 条件做一件事,否则做另一件事。

我正在使用带有 extbase 1.3 的typo3 v4.5.32。

谢谢。 我试过了,但它输出了两个<th> 标签而不是一个。第一个 if 是为了证明有多个元素,下一个是为了打印出 <th>,只有当它是第一个元素时。

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

为什么?

更新:这是我的解决方法,因为流体中缺少“数组长度 > 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: 噢噢噢!!!我错过了总数,正是我需要的,但我正在寻找长度或计数,所以这段代码就是我想要的:

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

【问题讨论】:

  • 即使您自己回答了问题,也请关闭。

标签: typo3 typoscript fluid


【解决方案1】:

&lt;f:if condition="{f:count(subject: settings.halls)} &gt; 1"&gt; do something &lt;/f:if&gt;

【讨论】:

  • 如果 settings.halls 数组中的项目多于 1,则进入 FE "do something" 字符串
【解决方案2】:

您可以使用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>

【讨论】:

  • 为我工作 &lt;f:if condition="{settings.halls -&gt; f:count()} &gt; 1"&gt; --> f:count NOT f.count ...
【解决方案3】:

对于那些正在为此寻找自定义 viewhelper 的人:


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);
    }
}

【讨论】:

    【解决方案4】:

    请参阅上面的更新#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>
    

    【讨论】:

    • 这是一种解决方法,但有一种更简单的方法可以实现您想要的。看我的回答。
    猜你喜欢
    • 2020-03-26
    • 2019-01-23
    • 2019-02-28
    • 2016-12-27
    • 2023-02-26
    • 1970-01-01
    • 2020-09-18
    • 2016-07-22
    • 1970-01-01
    相关资源
    最近更新 更多