2009-03-19 7 views
0

J'ai une page php qui produit un tableau d'éléments. Par souci de simplicité, disons qu'il contient les numéros 1-5 dans l'ordre numérique. Ces chiffres doivent être aussi (ou aussi proche que possible égale) divisé en deux colonnes (en utilisant une table html) comme ceci:Organiser les éléments en colonnes avec Smarty

1 4 
2 5 
3 

Le nombre de colonnes pourrait changer à l'avenir. Puisqu'il s'agit d'un changement au niveau de la présentation, je suppose que cela devrait être quelque chose qui peut être réalisé en apportant des modifications exclusivement dans le fichier modèle. Ce qui me suggère que c'est Smarty qui devrait gérer la division des éléments en colonnes.

Existe-t-il un moyen d'y parvenir avec Smarty (et comment) ou dois-je laisser le fichier php faire tout le travail?

Répondre

5

Il est possible de le faire dans smarty, mais comme HTML et CSS ne supportent pas vraiment les colonnes, c'est difficile à faire. Il s'agit de déterminer le nombre d'éléments présents dans le tableau et d'utiliser d'abord les balises {section} pour saisir la première moitié (arrondie) des éléments et les afficher dans une colonne, puis une {section} distincte pour saisir la seconde la moitié (arrondie) des objets et placez-les dans la deuxième colonne.

Pour {section}, vous pouvez spécifier l'index de tableau sur lequel commencer et le nombre d'éléments souhaités. Si vous définissez le nombre d'éléments dans le tableau comme une autre variable, vous pouvez simplement calculer cela.

Vous pouvez essayer le code comme ça - mais je crains que je ne l'ai pas testé ces calculs il peut se tromper ...

<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

Voici ma solution en utilisant foreach et itérations:

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