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 e sortOrder , basta succhiarlo e sviluppare un componente tutt'altro che riutilizzabile.
  • Avere un controller aggiuntivo, che memorizzerà sortBy e sortOrder 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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top