如何:在流体中找到一个打字稿定义的数组的长度?

The*_* Qs 4 typo3 fluid typoscript

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

settings{
        halls {
            0 = Default
            1 = Mississauga   
            2 = Halifax
            3 = Niagara Falls 
            4 = Oakville 
            5 = Pickering 
        }}
Run Code Online (Sandbox Code Playgroud)

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

我在extbase 1.3中使用typo3 v4.5.32。

谢谢。我试过了,但是它发出了两个标签,而不是一个。第一个if表示要证明有多个元素,第二个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>
Run Code Online (Sandbox Code Playgroud)

为什么?

更新:这是我的工作,因为流体中缺少“数组长度> 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>
Run Code Online (Sandbox Code Playgroud)

并打印出数据:

  <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>
Run Code Online (Sandbox Code Playgroud)

难看,但似乎可以工作。

更新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>
Run Code Online (Sandbox Code Playgroud)

And*_*ttó 5

您可以使用f:countViewHelper 查找数组的长度。就像其他ViewHelper一样,它可以用作内联符号(您可以在此处找到更多信息

正确的代码是:

<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>
Run Code Online (Sandbox Code Playgroud)

  • 对我来说有效 `&lt;f:if condition="{settings.halls -&gt; f:count()} &gt; 1"&gt;` --&gt; `f:count` NOT `f.count` ... (4认同)

The*_* Qs 0

请参阅上面的 update#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>
Run Code Online (Sandbox Code Playgroud)