2012-06-17 3 views
2

Я хочу получить список, подобный этому, с помощью smarty.Smarty - foreach loop 4 раза и создать новый список

<ul> 
<li> 
    <a>img1</a> 
    <a>img2</a> 
    <a>img3</a> 
    <a>img4</a> 
</li> 
<li> 
    <a>img5</a> 
    <a>img6</a> 
    <a>img7</a> 
    <a>img8</a> 
</li> 
<li> 
    <a>img9</a> 
    <a>img10</a> 
    <a>img11</a> 
    <a>img12</a> 
</li> 
</ul> 

Используя этот пример кода

<ul class="bullet"> 
    {foreach from=$manufacturers item=manufacturer name=manufacturer_list} 
     {if $smarty.foreach.manufacturer_list.index < 4} 
     <li class="{if $smarty.foreach.manufacturer_list.last}last_item{elseif $smarty.foreach.manufacturer_list.first}first_item{else}item{/if}"> 

     <a href="{$link->getmanufacturerLink($manufacturer.id_manufacturer, $manufacturer.link_rewrite)}" title="{l s='More about' mod='blockmanufacturer'}{$manufacturer.name}"> <img src="{$img_manu_dir}{$manufacturer.id_manufacturer}.jpg"><span>{$manufacturer.name}<span></a> 
     </li> 
    {/if} 
{/foreach} 

Сначала с учетом массива $ производителей это будет цикл внутри <li> максимум в 4 раза и будет создавать 4 <img>. И затем, когда он достигнет 4-го индекса, он сделает новый тег <li>.

Спасибо за помощь!

ответ

2

Im Smarty3 синтаксис вы могли бы сделать что-то вроде:

{$data = [ 
    "alpha", "bravo", "charlie", "delta", "echo", "foxtrot", "golf", 
    "hotel", "india", "juliet", "kilo", "lima", "mike", "november", 
    "oscar", "papa", "quebec", "romeo", "sierra", "tango", "uniform", 
    "victor", "whiskey", "x-ray", "yankee", "zulu" 
]} 

{foreach $data as $value} 
    {if [email protected]} 
    <ul> 
     <li> 
    {elseif ([email protected] - 1) is div by 4} 
     </li><li> 
    {/if} 

    <span>{$value}</span> 

    {if [email protected]} 
     </li> 
    </ul> 
    {/if} 
{/foreach} 

Обратите внимание, что из-за вложенности весь <ul> внутри цикла Еогеасп, он не показал бы, если бы не было никаких данных для цикла по.

+0

awesome это работает! благодаря! – Harold

+0

'итерация - 1' почему не просто использовать индекс? –

+1

Потому что вы можете выполнять итерацию карты (ассоциативный массив/строковые ключи), которая не будет работать для индекса. – rodneyrehm

5

Вы хотите отображать 4 изображения в каждом теге li?

<ul> 
{foreach from=$manufacturers item=manufacturer name=manufacturer_list} 
    {if $smarty.foreach.manufacturer_list.index % 4 == 0} 
    <li> 
    {/if} 

    <a><img></a> 

    {if $smarty.foreach.manufacturer_list.index % 4 == 0 || $smarty.foreach.manufacturer_list.last} 
    </li> 
    {/if} 
{/foreach} 
</ul>