2009-03-19 11 views
0

私は要素の配列を生成するPHPページを持っています。簡単にするために、番号1〜5が数字順に含まれているとします。これらの数字は、そうのような二つの列(HTMLテーブルを使用して)に分割等しく(又はできる限り均等に近い)する必要がありますSmartyで列に要素を配置する

1 4 
2 5 
3 

列の数は将来変更される可能性があります。これはプレゼンテーション・レベルの変更であるため、テンプレート・ファイル内でのみ変更を加えることで達成できるはずだと思います。これは、要素の列を列に分割する必要があるSmartyだと私に示唆しています。

Smartyでこれを達成する方法(およびその方法)がありますか、またはPHPファイルにすべての作業をさせる必要がありますか?

答えて

5

これはスマートに行うことはできますが、HTMLとCSSは実際には列をサポートしていないため、苦労します。これは、配列内にいくつのアイテムがあるかを調べ、{section}タグを使ってアイテムの最初の半分(切り上げ)を1つの列に表示し、次に別の{セクション}を使用して2番目のアイテムを取得しますアイテムの半分(切り上げ)を2列目に配置します。

{section}では、どの配列インデックスを開始するのか、いくつのアイテムを希望するのかを指定できます。配列内の項目数を別の変数に設定した場合は、これを計算するだけです。

次のようなコードを試みることができる - のforeachと反復を使用して私の解決策ここで私はそれが間違っている可能性がありますので、私はこれらの計算をテストしていませんが怖い...

<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> 
関連する問題