Domanda

Ho una pagina php che produce una serie di elementi.Per semplicità diciamo che contiene i numeri 1-5 in ordine numerico.Questi numeri devono essere equamente (o il più vicino possibile) divisi in due colonne (usando una tabella html) in questo modo:

1   4
2   5
3

Il numero di colonne potrebbe cambiare in futuro.Poiché si tratta di un cambiamento a livello di presentazione, presumo che dovrebbe essere qualcosa che può essere ottenuto apportando modifiche esclusivamente al file modello.Il che mi suggerisce che sia Smarty a gestire la divisione degli elementi in colonne.

C'è un modo per raggiungere questo obiettivo con Smarty (e come) o dovrei lasciare che il file php faccia tutto il lavoro?

È stato utile?

Soluzione

È possibile farlo in modo intelligente, ma poiché HTML e CSS non supportano realmente le colonne, è una seccatura farlo.Si tratta di capire quanti elementi ci sono nell'array e utilizzare prima i tag {section} per prendere la prima metà (arrotondata per eccesso) degli elementi e visualizzarli in una colonna, quindi una {section} separata per prendere la seconda metà (arrotondata per eccesso) degli elementi e posizionarli nella seconda colonna.

Per {section} puoi specificare da quale indice dell'array iniziare e quanti elementi desideri.Se imposti il ​​numero di elementi nell'array come un'altra variabile, puoi semplicemente calcolarlo.

Potresti provare un codice come questo, ma temo di non aver testato quei calcoli, quindi potrebbe essere sbagliato...

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

Altri suggerimenti

Ecco la mia soluzione usando foreach e iterazioni:

<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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top