Smarty: вывод строк на основе количества элементов в массиве - PullRequest
0 голосов
/ 17 июня 2011

Я использую Smarty для вывода массива в таблицу HTML. Я хочу, чтобы в каждой строке таблицы было не более 8 элементов. Если в массиве более 8 элементов, код создаст новую строку для переполняющихся элементов.

Как я могу это сделать? Это понятно?

Ответы [ 2 ]

3 голосов
/ 17 июня 2011

Прошло много времени с тех пор, как я использовал Smarty, но вы должны быть в состоянии сделать это так:

<tr>
{foreach from=$items key=myId item=i name=foo}
  {if $smarty.foreach.foo.index % 8 == 0 && $smarty.foreach.foo.index > 0 }
     </tr><tr>
  {/if}
  <td>{$i.label}</td>
{/foreach}
</tr>

Оператор модуля возвращает 0, только если индекс делится на 8, поэтому перед каждым 9-м элементом он добавляет новую строку. Мы не хотим, чтобы это случилось с первым элементом, поэтому давайте проверим и это.

1 голос
/ 17 июня 2011

Вот как я это делал в прошлом:

<table>
    {foreach from=$array item='array_item' name='array_items'}
        {if $smarty.foreach.array_items.first}
            {* first item - start of all the rows *}
            <tr><td>{$array_item}</td>
        {elseif $smarty.foreach.array_items.index % 8 == 0}
            {* 8 items added to row - start new row *}
            </tr><tr><td>{$array_item}</td>
        {elseif $smarty.foreach.array_items.last}
            {* last item - end the row (or add logic to fill out row with empty cells if needed) *}
            <td>{$array_item}</td></tr>
        {else}
            {* normal item - add cell *}
            <td>{$array_item}</td>
        {/if}
    {/foreach}
</table>
...