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.
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 Precedente – Inizio Corso – Lezione Successiva >>
Interessante…mi piacerebbe imparare a programmare un gestionale per la mia azienda, ma personalmente non credo riuscirei mai a trovarne il tempo. Quest’ultima variabile è determinante, purtroppo:-(! Io mi avvalgo, perciò, di software gestionali già pronti: sto usando in particolare XXXXX, un prodotto disponibile online e devo dire che risponde appieno alle esigenze professionali della mia azienda.
Comunque complimenti per il blog e per gli articoli!