2009-03-19 7 views
0

У меня есть страница php, которая создает массив элементов. Для простоты предположим, что он содержит числа 1-5 в численном порядке. Эти цифры должны быть в равной степени (или как можно ближе к равным, насколько это возможно) разделен на две колонки (с использованием HTML таблицы), как так:Упорядочить элементы в столбцы с помощью Smarty

1 4 
2 5 
3 

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

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

ответ

5

Это можно сделать в smarty, но поскольку HTML и CSS на самом деле не поддерживают столбцы, это больно. Это включает в себя определение количества элементов в массиве и использование тегов {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> 
0

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

<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>