1

我有一个用于菜单导航的循环,但是对于大于 6 个项目的列表,我想在新列表中创建其余项目,有人介意帮助我吗:

{foreach from=$item1.$childs item="item2" name="item2"}
  {assign var="item_url2" value=$item2|fn_form_dropdown_object_link:$block.type}
  <li{if $item2.active || $item2|fn_check_is_active_menu_item:$block.type} class="cm-active"{/if}><a{if $item_url2} href="{$item_url2}"{/if}>{$item2.$name}</a></li>
{/foreach}

所以输出会是这样的:

如果 6 个或更少的项目:

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

如果 6 个或更多

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

<ul>
  <li>list item 7</li>
  <li>list item 8</li>
  <li>list item 9</li>
  <li>list item 10</li>
  <li>list item 11</li>
  <li>list item 12</li>
</ul>

当然,例如想循环每 6 个项目

提前致谢

4

2 回答 2

1

看看http://www.smarty.net/docsv2/en/language.function.counter.tpl 你可以像这样使用它:

{ foreach }
    { if counter % 6 == 0 }<ul>{ /if }
    <li></li>
    { if counter % 6 == 0 }</ul>{ /if }    
{ /foreach }
于 2013-06-10T01:09:31.710 回答
0

所以我设法找到了一个可行的解决方案,我发现很难在网上找到一个我觉得奇怪的要求的解决方案,因为我确信如果他们被卡住了,这是一个常见的事情,但都一样,请继续阅读:

我尝试了上面提到的“ggonzalez”和“periklis”两种方法,我几乎开始工作了,但它产生的标记不正确,因此中断了。简而言之,它将开始标签包裹在每个列表项周围,而不是关闭,但也没有包裹到我指定的一定数量的列表中。

所以在玩了一些之后,我想出了一个对我来说很好的解决方案:

我找到了一个名为“split_row”的 smarty 插件,可以在这里找到:

http://smarty.incutio.com/?page=split_row

我创建了文件:block.split_row.php 并上传到我的 smarty 插件目录,然后将以下内容添加到我的 tpl 文件中

{split_row count=8 from=$item1.$childs item="item2" name="item2"}
<ul>
    {foreach from=$item2 item="item2"}
    {assign var="item_url2" value=$item2|fn_form_dropdown_object_link:$block.type}                
    <li{if $item2.active || $item2|fn_check_is_active_menu_item:$block.type} class="cm-active"{/if}><a{if $item_url2} href="{$item_url2}"{/if}>{$item2.$name}</a></li>
    {/foreach}
</ul>
{/split_row}

我希望这可以帮助其他寻找类似解决方案的人。

谢谢

于 2013-06-13T23:19:06.050 回答