Расположите элементы в столбцы с помощью Smarty

StackOverflow https://stackoverflow.com/questions/661861

  •  20-08-2019
  •  | 
  •  

Вопрос

У меня есть страница PHP, которая создает массив элементов.Для простоты скажем, что он содержит цифры от 1 до 5 в порядке номеров.Эти числа должны быть поровну (или как можно ближе к равным) разделены на два столбца (с использованием таблицы html), например:

1   4
2   5
3

Количество столбцов может измениться в будущем.Поскольку это изменение на уровне представления, я предполагаю, что этого можно достичь, внося изменения исключительно в файл шаблона.Что мне наводит на мысль, что именно Smarty должен заниматься разделением элементов на столбцы.

Есть ли способ добиться этого с помощью Smarty (и как) или мне следует позволить php-файлу выполнить всю работу?

Это было полезно?

Решение

Это можно сделать в Smarty, но поскольку HTML и CSS на самом деле не поддерживают столбцы, это затруднительно.Он включает в себя выяснение количества элементов в массиве и использование тегов {section} сначала для захвата первой половины (округленной вверх) элементов и отображения их в одном столбце, а затем отдельного {section} для захвата второго. половину (округляя в большую сторону) предметов и поместите их во второй столбец.

Для {section} вы можете указать, с какого индекса массива начинать и сколько элементов вы хотите.Если вы зададите количество элементов в массиве в качестве другой переменной, вы сможете просто вычислить это значение.

Вы могли бы попробовать такой код, но боюсь, я не проверял эти расчеты, поэтому они могут быть неправильными...

<td>
  {section name=myitem loop=$items max=(($itemcount/2)+0.499)}
    {$items[myitem]}
  {/section}
</td>
<td>
  {section name=myitem loop=$items start=(($itemcount/2)+0.499)}
    {$items[myitem]}
  {/section}
</td>

Другие советы

Вот мое решение с использованием foreach и итераций:

<ul>
{foreach from=$items item=item name=firstFE}
            {if $smarty.foreach.firstFE.index lt ($items|@count / 2)}
               <li>{$item->title}</li>
            {/if}
{/foreach}
</ul><ul>
{foreach from=$items item=item name=secFE}
            {if $smarty.foreach.secFE.index gte ($items|@count / 2)}
               <li>{$item->title}</li>
            {/if}
{/foreach}
</ul>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top