php - ¿Cómo hago la clasificación de tablas usando CodeIgniter?
sorting sortable-tables (5)
Recientemente agregué este Clasificador de tablas (que usa Prototype) a varias de mis páginas. Es rápido y bastante fácil de implementar.
He estado desarrollando un sitio en las últimas semanas usando CodeIgniter como marco. He estado pensando en la mejor manera de lograr algo, que en muchos otros marcos en otros idiomas es relativamente simple: tablas ordenables. CodeIgniter desactiva las cadenas de consulta de forma predeterminada, ya que sus URL contienen parámetros de método. Entonces, una URL podría verse así:
/controller/method/param1/param2
Podría pensar que podría agregar sortBy
y sortOrder
como dos parámetros adicionales al método del controlador. En particular, no quiero hacer eso, principalmente porque quiero tener un controlador reutilizable. Cuando utiliza parámetros de cadena de consulta, PHP puede decirle fácilmente si hay un parámetro llamado sortBy
. Sin embargo, cuando usa parámetros basados en URL, variará con cada controlador.
Me preguntaba cuáles eran mis opciones. Por lo que puedo ver, son algo así como:
- Pase los parámetros
sortBy
ysortOrder
, solosortOrder
y desarrolle algún componente que no sea reutilizable. - Tenga un controlador adicional, que almacenará el
sortBy
ysortOrder
en la sesión (aunque debería saber de dónde vino y lo enviará de regreso a la página original). - Tener algún tipo de función AJAX, que llamaría al controlador de arriba; luego recarga la página.
- Hack CodeIgniter para volver a activar cadenas de consulta. En realidad, si esta es la única opción, se agradecerá cualquier enlace sobre cómo hacer esto.
¡No puedo creer que una tarea tan simple presente tal problema! ¿Me estoy perdiendo de algo? ¿Alguien tiene alguna recomendación?
Edite para aclarar: me encanta jQuery, y ya lo estoy usando en el sitio, por lo que TableSorter es una buena opción. Sin embargo, me gustaría hacer la clasificación del lado del servidor, ya que hay algunas páginas con un gran número de resultados, incluida la paginación.
Si está de acuerdo con ordenar por el lado del cliente, el plugin de Tablesorter para jQuery es bastante bueno.
He estado usando este método: http://codeigniter.com/forums/viewthread/45709/#217816
También lo amplié para establecer cookies basadas en el género, así que cuando alguien regresa, la tabla se ordena de la misma manera que antes.
Me encontré con esto con una mesa bastante compleja. ¡La parte difícil fue que la mesa podría crecer / encogerse dependiendo de ciertas variables! Dolor grande :(
Así es como lo manejé ...
Sistema / application / config / config.php ajustado para permitir el carácter de coma en el URI:
$config[''permitted_uri_chars''] = ''a-z 0-9~%.:_/-,'';
Ajuste mi controlador con una función de clasificación:
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
}
Me he simplificado demasiado, pero entiendes la idea. El objetivo es tener una url como esta:
/ controller / sorter / columnname, sortorder
La función del clasificador llama a otra función interna para manejar la lógica de visualización / plantilla / vista: su trabajo es manejar la llamada de clasificación y obtener los datos apropiados del modelo.
Por supuesto, esto podría reducirse a solo su función actual:
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
}
De esta forma, ni siquiera necesita una función separada, y puede usar el tercer segmento para definir su clasificación.
He estado usando esto: http://net.tutsplus.com/tutorials/php/codeigniter-from-scratch-displaying-sorting-tabular-data/
de net.tutsplus.com
Desafortunadamente está usando lo que no te gusta (/ controller / method / param1 / param2) pero he agregado esto (la función de visualización) para cada controlador cuando necesito paginación. O hazle un ayudante.
Otro ejemplo está aquí: http://www.robertmullaney.com/2010/09/19/tablerecord-sorting-made-easier-for-codeigniter/