Come posso fare l'ordinamento delle tabelle usando CodeIgniter?
-
02-07-2019 - |
Domanda
Ho sviluppato un sito nelle ultime settimane usando CodeIgniter come framework. Ho pensato al modo migliore per realizzare qualcosa, che in molti altri framework in altre lingue è relativamente semplice: tabelle ordinabili. CodeIgniter disattiva le stringhe di query per impostazione predefinita, poiché gli URL contengono parametri del metodo. Quindi un URL potrebbe apparire come:
/controller/method/param1/param2
Potresti pensare di poter semplicemente aggiungere sortBy
e sortOrder
come due parametri aggiuntivi al metodo del controller. In particolare, non voglio farlo, principalmente perché voglio avere un controller riutilizzabile. Quando si utilizzano i parametri della stringa di query, PHP può facilmente dire se esiste un parametro chiamato sortBy
. Tuttavia, quando si utilizzano parametri basati su URL, varierà con ciascun controller.
Mi chiedevo quali fossero le mie opzioni. Per quanto posso vedere sono qualcosa del tipo:
- Passa i miei parametri
sortBy
esortOrder
, basta succhiarlo e sviluppare un componente tutt'altro che riutilizzabile. - Avere un controller aggiuntivo, che memorizzerà
sortBy
esortOrder
nella sessione (anche se dovrebbe sapere da dove vieni, e rimandarti alla pagina originale). - Avere una sorta di funzione AJAX, che chiamerebbe il controller sopra; quindi ricaricare la pagina.
- Hack CodeIgniter per riattivare le stringhe di query. In realtà, se questa è l'unica opzione, sarebbe gradito qualsiasi link su come farlo.
Non riesco proprio a credere che un compito così semplice possa presentare un simile problema! Mi sto perdendo qualcosa? Qualcuno ha qualche consiglio?
Modifica per chiarimenti: adoro jQuery e lo sto già utilizzando sul sito, quindi TableSorter è una buona opzione. Tuttavia, vorrei fare l'ordinamento sul lato server in quanto vi sono alcune pagine con un numero potenzialmente elevato di risultati, inclusa l'impaginazione.
Soluzione
Ho usato questo metodo: http://codeigniter.com/forums/viewthread/45709/#217816
L'ho anche espanso per impostare i cookie in base all'ordinamento, quindi quando qualcuno torna la tabella viene ordinata come prima.
Altri suggerimenti
Se stai bene con l'ordinamento sul lato client, il plug-in Tablesorter per jQuery è piuttosto carino.
Mi sono imbattuto in questo con una tabella abbastanza complessa. La parte difficile era che la tabella poteva crescere / restringersi a seconda di determinate variabili !! Grande dolore :(
Ecco come l'ho gestito ..
Sistema / application / config / config.php modificati per consentire il carattere virgola nell'URI:
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-,';
Regola il mio controller con una funzione di ordinamento:
function sorter() {
//get the sort params
$sort = explode(",",$this->uri->segment(3)); //the 3rd segment is the column/order
//pass the params to the model
$data = $this->model_name->get_the_data($sort[0],$sort[1]);
$this->_show($data);
}
function _show($data) {
//all the code for displaying your table
}
Ho semplificato troppo, ma hai capito. Lo scopo è avere un URL come questo:
/ regolatore / sorter / columnname, sortorder
La funzione di smistamento chiama un'altra funzione interna per gestire la logica display / template / view - il suo compito è quello di gestire la chiamata di ordinamento e ottenere i dati appropriati dal modello.
Naturalmente, questo potrebbe essere ridotto alla sola funzione corrente:
function showGrid() {
$sort = $this->uri->segment(3);
if ($sort) {
//get the data sorted
} else {
//get the data the default way
}
//rest of your view logic
}
In questo modo, non hai nemmeno bisogno di una funzione separata e puoi utilizzare il terzo segmento per definire il tuo ordinamento.
Ho usato questo: http : //net.tutsplus.com/tutorials/php/codeigniter-from-scratch-displaying-sorting-tabular-data/
da net.tutsplus.com
Sfortunatamente sta usando ciò che non ti piace (/ controller / method / param1 / param2) ma ho aggiunto questa (la funzione di visualizzazione) per ogni controller quando ho bisogno di impaginazione. O creane un aiuto.
Altro esempio è qui: http: //www.robertmullaney.com/2010/09/19/tablerecord-sorting-made-easier-for-codeigniter/
Di recente ho aggiunto questo Table sorter (che usa Prototype) per un sacco di mie pagine. È veloce e abbastanza facile da implementare.