有没有办法在TYPO3液体中包裹X物品?

问题描述 投票:2回答:5

使用扩展DCE元素,我创建了一个流体模板,为每个创建的项生成一个li项。现在我想让每个第一到第二项都是包装器。以便:

<li>item 1</li>
<li>item 2</li>
<li>item 3</li>
<li>item 4</li>
<li>item 5</li>

变为:

<ul>
    <li>item 1</li>
    <li>item 2</li>
</ul>
<ul>
    <li>item 3</li>
    <li>item 4</li>
</ul>
<ul>
    <li>item 5</li>
</ul>

这在流体模板中是否可行?也许与Typoscript结合?

typo3 fluid
5个回答
3
投票

Solution

这就是我最终使用{cycle}迭代每两项,然后关闭并打开标签。除了确保最后一项不以开头标记结尾:

<ul>
    <f:for each="{field.item}" as="item" iteration="iterator">

        <f:if condition="{iterator.cycle} % 2">
            <f:then>
                <li>item {iterator.cycle}</li>
            </f:then>
            <f:else>
                <li>item {iterator.cycle}</li>
                <f:if condition="{iterator.isLast} != 1">
                    <f:then>
                        </ul><ul>
                    </f:then>
                </f:if>
            </f:else>
        </f:if>

    </f:for>
</ul>

注意

据我所知,凭借VHS的强大功能v:iterator.chunk可能会用更少的代码来解决这个问题,但我无法按照我想要的方式解决这个问题。 如果有人愿意提供一个工作实例来比较两个选项,我将不胜感激。

与VHS

更新:21.12.2017

所以重新访问chunk选项,使用VHS iterator.chunk使用以下代码段实现相同的代码:

<f:for each="{field.item -> v:iterator.chunk(count: 2)}" as="col" iteration="cycle">
    <ul>
        <f:for each="{col}" as="item">
            <li>
                test
            </li>
        </f:for>
    </ul>
</f:for>                

也许这有助于那里的人!


2
投票

如果您正在使用VHS视图助手集合扩展,那么您还可以使用Iterator\Chunked视图助手:

<v:iterator.chunk count="4" subject="{menu}" as="entries">
     <f:for each="{entries}" as="row">
          <f:for each="{row}" as="page">
          [...]
          </f:for>
     </f:for>
</v:iterator>

0
投票

当然,除了计数器/迭代器之外,还需要for viewhelper。你可以使用if viewhelper来检查你的病情。 API有一些例子:http://api.typo3.org/typo3cms/current/html/class_t_y_p_o3_1_1_c_m_s_1_1_fluid_1_1_view_helpers_1_1_for_view_helper.html#details

https://docs.typo3.org/typo3cms/ExtbaseGuide/Fluid/ViewHelper/For.html


0
投票

使用常规Fluid可以使用for视图助手的迭代器。

<f:for each="{items}" as="item" iteration="itemIterator">
    <f:if condition="{itemIterator.isOdd}">
        <ul>
    </f:if>
    <li>{item.name}</li>
    <f:if condition="{itemIterator.isOdd}">
        <f:then>
            <f:if condition="{itemIterator.isLast}">
                </ul>
            </f:if>
        </f:then>
        <f:else>
            </ul>
        </f:else>
    </f:if>
</f:for> 

棘手的部分是封闭的</ul>,上面覆盖着Fluid。


0
投票

我有一个解决方案,对我来说 - 更本土化

<f:for each="{items}" as="item" iteration="itemIterator">
    <f:cycle values="{0:'left', 1:'right', 3:'center'}" as="order">
            <f:switch expression="{order}">
                <f:case value="left">
                       <div class="left">Conetnt</div>
                </f:case>
                <f:case value="right">
                       <div class="right">Conetnt</div>
                </f:case>
                <f:case value="center">
                       <div class="center">Conetnt</div>
                </f:case> 
            </f:switch>  
    </f:cycle> 
</f:for> 
© www.soinside.com 2019 - 2024. All rights reserved.