Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

TableSorter, un plugin jQuery per gestire le tabelle

Organizzare i dati in tabelle e renderli semplici da riordinare
Organizzare i dati in tabelle e renderli semplici da riordinare
Link copiato negli appunti

Nonostante le tabelle non si usino più con la stessa intensità del passato, per quanto riguarda la presentazione dei dati a volte possono essere indispensabili. Anche per questo motivo uno script dedicato alla loro gestione può risultare più che gradito dagli addetti ai lavori. Uno dei migliori in circolazione è TableSorter 2.0 ed in questo articolo provvederemo ad analizzarlo e spiegare il suo funzionamento in alcuni passi da seguire.

Innanzitutto l'installazione ed il primo utilizzo, per un "primo impatto". Dopodiché analizzeremo i parametri da dare come argomento durante il richiamo della funzione principale, per vedere come possiamo personalizzare il risultato in uscita. Infine qualche esempio più "avanzato" rispetto all'utilizzo semplice.

TableSorter si appoggia al jQuery Framework per svolgere il suo compito: nello specifico, consente di trasformare una tabella standard HTML in una più "dinamica" che consente l'ordinamento senza dover ricaricare tutta la pagina.

Presenta svariate features interessanti:

  • Ordinamento sulla base di più colonne;
  • Parser per vari tipi di dati (dal semplice testo agli indirizzi, numeri interi, currency per entità monetarie, indirizzi IP, date e indicatori d'orario;
  • Supporto per il cosiddetto "hidden sorting" (ad esempio, mantenere l'ordine alfabetico mentre si ordina per un altro criterio);
  • Possibilità di realizzare aggiunte tramite il Widget System;
  • Testato su tutti i tipi di browser. Supportati Internet Explorer, Mozilla Firefox, Safari ed Opera;
  • Dimensioni ridotte del file (il pacchetto per intero pesa 1.7MB, mentre la versione minified del plugin solo 17KB);

L'operazione di "installazione" è davvero semplice ed identica a quelle degli altri plugin per jQuery: per prima cosa si scarica il pacchetto ufficiale del progetto dalla pagina di download. A quel punto, una volta trasferito il file "jquery.tablesorter.min.js" nella cartella del nostro progetto siamo pronti a partire.

Nella pagina HTML le prime istruzioni da dare sono quelle di inclusione: eccole di seguito:

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.tablesorter.js"></script>

A questo punto dobbiamo realizzare una tabella sulla quale avviare lo script: giusto per rendere l'idea è utilizziamo una semplice tabella con tre colonne (nome, cognome e indirizzo email).

<table id="tabella" class="tablesorter"> 
<thead>
<tr><th>Cognome</th><th>Nome</th><th>Indirizzo Email</th></tr>
</thead> 
<tbody>
<tr><td>Malatesta</td><td>Francesco</td><td>francescomalatesta@live.it</td></tr>
<tr><td>Malatesta</td><td>Lorenzo</td><td>lorenzomalatesta@live.it</td></tr>
<tr><td>Celenza</td><td>Luca</td><td>lucacelenza@live.it</td> </tr>
</tbody> 
</table>

Non rimane che richiamare il nostro script. Una volta sicuri di aver incluso dei file corretti, si può effettuare la chiamata al metodo tablesorter():

$(document).ready(function() { 
  $("#tabella").tablesorter();
});

Ora che abbiamo visto il funzionamento basilare, analizziamo nel dettaglio i parametri che possiamo passare al metodo principale, tablesorter().

Le opzioni del plugin

Analizziamo le opzioni che il plugin ci mette a disposizione e che possiamo utilizzare in fase di inizializzazione, nella chiamata al metodo tablesorter().

Opzione Descrizione
cancelSelection una variabile booleana, il cui valore è "true" di default. Serve a specificare se deve essere permessa la selezione del testo nella testata della tabella, in modo tale da rendere le voci della testata più simili ad un pulsante
cssAsc di tipo String, indica il selettore CSS da utilizzare per definire lo stile della testata quando si effettua il sorting in modo ascendente
cssDesc funziona nello stesso modo di cssAsc, ma definisce lo stile della testata quando si effettua il sorting in modo discendente
cssHeader funziona come le due opzioni precedenti, ma in questo caso definisce lo stile della testata della tabella quando non ancora vengono effettuate operazioni di sorting di nessun genere
debug può assumere i valori "true" oppure "false" e, quando impostata su "true" genera delle informazioni di debug utili allo sviluppatore
headers un oggetto che se definito permette di definire se implementare per una singola colonna il sorting, oppure no (più avanti i dettagli)
sortForce di tipo Array, consente di definire ed aggiungere un secondo criterio personalizzato di sorting in modo tale da gestire al meglio l'output risultante e farlo sembrare meno "a caso". (Esempio: dopo aver ordinato una lista per cognome, si può aggiungere come secondo criterio il nome)
sortList sempre di tipo Array, è simile a sortForce, con la differenza che consente di definire, oltre al criterio personalizzato, anche la direzione (ascendente o discendente)
sortMultiSortKey una stringa che definisce il tasto sulla tastiera scelto per eseguire il sorting su più criteri (di default il tasto usato per quest'operazione è Shift)
textExtraction di tipo stringa (si può anche usare una funzione) permette di definire quale metodo deve essere usato per estrarre i dati dalla tabella, in modo tale da potersi regolare successivamente per la tecnica di sorting da usare quando richiesta
widthFixed permette di decidere (è una booleana che può assumere i valori di "true" o "false") se applicare una larghezza fissa alle tabelle

Facciamo subito un esempio per spiegare meglio il funzionamento dell'opzione headers. Questa opzione permette di decidere se abilitare il sorting per una singola colonna, oppure disabilitarlo. Il tutto si esegue con una sintassi decisamente semplice, riportata qui di seguito:

$(document).ready(function() {
    $("#tabella").tablesorter({
        // si definisce l'oggetto passato
        headers: {
            // disabilitiamo il sorting della seconda colonna;
            1: { sorter: false }, 
            // disabilitiamo il sorting della terza colonna
            2: { sorter: false }
        }
    });
});

La spiegazione è immediata: si lavora sul parametro sorter cambiando il suo valore da true (che è anche la selezione di default) a false.

Ora che abbiamo analizzato completamente i vari parametri possiamo passare all'ultimo passo nella scoperta di questo plugin: osserviamo da vicino le modalità di aggiunta di funzionalità extra, tramite l'uso dei metodi addParser e addWidget.

Estendere il Plugin con nuove Funzionalità

Le funzionalità del plugin che abbiamo esaminato non lasciano sicuramente indifferenti, tuttavia possiamo dare a questo strumento una marcia in più. Precisamente, con due metodi: addParser e addWidget.

addParser

addParser consente di definire un nuovo parser per le informazioni. In altre parole permette di riconoscere tipi di dati particolari o poco comuni, garantendo quindi un'operazione di ordinamento più precisa.

Riportiamo l'esempio del sito ufficiale per maggiore chiarezza:

$.tablesorter.addParser({
  // set a unique id
  id: 'grades',
  is: function(s)     { return false; },
  format: function(s) {
     return s.toLowerCase().replace(/good/,2).replace(/medium/,1).replace(/bad/,0);
  },
  // set type, either numeric or text
  type: 'numeric'
}); 
$(function() {
  $("#tabella").tablesorter({
    headers: {
	  2: { sorter:'grades' }
	}
  });
});

Prima di richiamare come sempre il metodo tablesorter() viene fatta la chiamata al metodo addParser con alcune opzioni in ingresso:

Opzione Descrizione
id è un nome univoco per definire il parser attuale e poterlo richiamare in seguito
is viene impostato su false per evitare l'auto-detect del parser, in modo tale da implementarlo solo se necessario;
format è la funzione che definisce la stringa con il dato da normalizzare, rendendo quindi fattibile il sorting secondo altri criteri personalizzati;
type il tipo di dato da ordinare, può assumere due valori di tipo stringa ("numeric" o "text")

A questo punto tablesorter prende come opzione sotto la voce leader il tipo di parser in corrispondenza della colonna desiderata. Come riportato nel listato, il sorter di tipo gradi viene associato alla colonna numero 3 (è riportato il 2 visto che si parte dallo zero).

addWidget

Analizziamo ora la creazione di nuovi Widget tramite il metodo addWidget. La funzionalità implementata stavolta è un piccolo add-on che ripete le testate ogni dieci righe circa: decisamente utile nel caso di tabelle molto lunghe che quindi possono far confondere l'utente. Di seguito il codice.

$.tablesorter.addWidget({
    id: "repeatHeaders",
    format: function(table) {
        if(!this.headers) {
            var h = this.headers = [];
            $("thead th",table).each(function() {
                h.push(
                    "" + $(this).text() + ""
                ); 
            });
        } 
        $("tr.repated-header",table).remove(); 
        for(var i=0; i < table.tBodies[0].rows.length; i++) {
            if((i%5) == 4) {
                $("tbody tr:eq(" + i + ")",table).before(
                    $("").html(this.headers.join("")) 
                );
            }
        }
    }
}); 
$("table").tablesorter({
    widgets: ['zebra','repeatHeaders']
});

Anche in questo caso le cose non sono molto complesse da comprendere. Il metodo addWidget prende in input due opzioni. La prima, "id", rappresenta l'identificatore univoco da utilizzare successivamente, mentre "format", che trova la sua applicazione pratica in una funzione, si occupa di definire le operazioni da fare.

Nello specifico, il metodo inizialmente copia le informazioni contenute nella testata. Quindi, tramite un loop, provvede a re-inserire queste informazioni ogni dieci record, in modo tale da non far perdere la continuità. Dopo aver definito il metodo e il Widget si può ricamare il metodo "tablesorter" vero e proprio, caricando anche il nuovo segmento di codice creato tramite l'opzione "widgets".

Abbiamo visto tutte le features di questo completo e pratico plugin. In realtà in giro su internet si trovano anche delle alternative: tuttavia questa è sembrata una delle migliori, imbattibile in molte sue features, oltre che per la sua estensibilità.

Ti consigliamo anche