Categories: PHP

Ordinare gli Articoli di Magazzino

Ora che abbiamo creato una lista di valori con cambio di pagina, possiamo pensare di aggiungere qualche altra caratteristica tipica degli elenchi, l’ordinamento tramite le intestazioni di colonna. In pratica dobbiamo fare in modo che al click dell’utente su un’intestazione di colonna la nostra lista degli articoli di magazzino ordini i valori in senso ascendente su quel tipo di dato. In caso di ordinamento la colonna deve avere un’icona che se cliccata consente di ordinare in senso discendente e viceversa i valori.

Una lista con ordinamento crescente o decrescente

Per prima cosa dobbiamo aggiornare la pagina ad ogni ordinamento e quindi occorre utilizzare altre due variabili da passare nel link della pagina: “$colord” e “$order“. Il primo indica la colonna da ordinare ed il secondo è un valore che indica il verso dell’ordinamento. Il primo compito è quindi quello di prendere questi valori:

...
// Vedo l'ordinamento sulla colonna:
        1 ascendente - 2 discendente
$colord = $_REQUEST['colord'];
if (strlen($colord) <= 0)
 $colord = 3;
if (!is_numeric($colord))
 $colord = 3;
$order = $_REQUEST['order'];
if (strlen($order) <= 0)
 $order = 1;
if (!is_numeric($order))
 $order = 1;

$strOrd = "";
switch ($colord)
{
case 1:
 $strOrd = "articoli.CodInt";
 break;
case 2:
 $strOrd = "articoli.CodBarre";
 break;
case 3:
 $strOrd = "articoli.Descrizione";
 break;
case 4:
 $strOrd = "categorie.Categoria";
 break;
case 5:
 $strOrd = "articoli.Prezzo";
 break;
}

if (strlen($strOrd) > 0)
 if ($order > 1)
  $strOrd .= " DESC";

$strSQL = "SELECT articoli.IDArticolo, articoli.CodInt,
      articoli.CodBarre, articoli.Descrizione, ";
$strSQL .= "unimis.Sigla, categorie.Categoria, articoli.Prezzo ";
$strSQL .= "FROM (articoli LEFT JOIN unimis ON articoli.IDUM =
         unimis.IDUM) ";
$strSQL .= "LEFT JOIN categorie ON articoli.IDCategoria =
           categorie.IDCategoria";
if (strlen($strOrd) > 0)
   $strSQL .= " ORDER BY $strOrd";
...

Nel codice non mi sembra ci sia qualcosa di complicato, basta ricevere i valori e se non ci sono si impostano a 3 ed 1, ossia ordinamento ascendente sulla colonna della descrizione dell’articolo.
Nella scrittura dell’intestazione della tabella dobbiamo scrivere i dati in modo dinamico, per brevità vi inserisco soltanto il codice della prima colonna:

...
<td width="100" height="50" align="center" valign="middle"
        bgcolor="eeeeee" 
 style="color:#444444;font-family:trebuchet,Tahoma,Verdana;
        font-size:14px;font-weight:bold">
<?php

if ($colord == 1)
{
   if ($order == 1)
   {
 echo '<a href="articoli.php?pagina='.$page.'
            &colord=1&order=2" rel="nofollow"
            title="Ordine Crescente">';
 echo '<img src="immagini/asc.gif" width="12"
             height="24" border="0" alt="Ascendente"
             valign="middle">';
 echo '</a>';
   }
   else
   {
 echo '<a href="articoli.php?pagina='.$page.'
              &colord=1&order=1" rel="nofollow"
              title="Ordine Decrescente">';
 echo '<img src="immagini/desc.gif" width="12"
              height="24" border="0" alt="Ascendente"
              valign="middle">';
 echo '</a>';
   }
   echo ' <u>Codice</u>';
}
else
{
   echo '<a href="articoli.php?pagina='.$page.'
      &colord=1&order=1" rel="nofollow"
      title="Ordine Decrescente"';
   echo 'style="color:#444444;font-family:trebuchet,Tahoma,
      Verdana;font-size:14px;font-weight:bold;
      text-decoration:none">Codice</a>';
}

?>
</td>
...

Come si può notare dal codice, inserisco l’immagine giusta solo se la colonna ordinata è quella attuale, altrimenti inserisco un link con il numero di pagina, la colonna da ordinare ed il verso dell’ordinamento. Ultima cosa da fare è ricordarsi di inserire le nostre due nuove variabili nei link dei pulsanti di spostamento tra pagine, in modo tale che se mi sposto ad altri valori l’ordinamento attuale rimane.
Questo è solo un modo per risolvere il problema, magari se avete dei suggerimenti, questi saranno molto apprezzati.

<< Lezione PrecedenteInizio Corso – Lezione Successiva >>

Share
Giampaolo Rossi

Sviluppatore di software gestionale da oltre 28 anni.

Published by
Giampaolo Rossi

Recent Posts

Software gestionali con SQL Server: un archivio unico, accessibile ovunque

Tutti i nostri software gestionali possono essere collegati a un database SQL Server, consentendo l’accesso…

9 ore ago

Come iniziare ad usare MerciGest in 5 minuti

MerciGest è semplice e immediato: basta scaricare e installare il programma per iniziare subito. Al…

3 giorni ago

Cos’è MerciGest e a chi serve

MerciGest è un gestionale di magazzino per Windows pensato per negozi, piccole imprese e artigiani…

5 giorni ago

Introduzione alla Standard Template Library (STL)

La Standard Template Library (STL) è una delle componenti più potenti del C++. Fornisce una…

7 mesi ago

Un Abbonamento per Tutti i Software

Sono arrivato alla convinzione che un abbonamento per tutti i miei software gestionali sia il…

2 anni ago

Software di Magazzino Gratuito

MerciGest è un software per la gestione del magazzino completamente gratuito. Continua a leggere→

2 anni ago