使用smarty将长列表拆分为多个列

时间:2013-06-09 22:55:56

标签: php smarty

我有一个用于菜单导航的循环,但是对于大于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个项目例如

提前致谢

2 个答案:

答案 0 :(得分: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 }

答案 1 :(得分:0)

所以我设法找到了一个有效的解决方案,我发现很难在网上找到一个解决方案,我觉得很奇怪,因为我确定如果它们被困住,人们会追求它的常见问题继续阅读:

我尝试了上面提到的两种方法“ggonzalez”和“periklis”,我几乎开始工作,但它产生的标记是不正确的,因此打破了。在一个坚果壳中,它围绕每个列表项包装开始标记,而不是关闭,但也没有包装到我指定的特定数量的列表中。

所以经过一些游戏后,我想出了一个对我来说很好的解决方案:

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

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}

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

由于