php sorting codeigniter sortable-tables

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 y sortOrder , solo sortOrder y desarrolle algún componente que no sea reutilizable.
  • Tenga un controlador adicional, que almacenará el sortBy y sortOrder 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.




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.