2008-09-22 15 views
8

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. Por lo tanto una URL podría ser:¿Cómo hago la clasificación de tablas usando CodeIgniter?

/controller/method/param1/param2 

Se podría pensar que usted podría añadir en sortBy y sortOrder como dos parámetros adicionales para el 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 yo puedo ver que son algo así como:

  • pase en mis sortBy y sortOrder parámetros, simplemente lo entiendan, y desarrollar algún componente menos-que-reutilizable para ello.
  • Tiene 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).
  • Tiene algún tipo de función AJAX, que llamaría al controlador anterior; 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?


Editar una aclaración: Me encanta jQuery, y ya estoy utilizando en el sitio, así 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.

Respuesta

0

Hace poco agregué este Table sorter (que usa Prototype) a varias de mis páginas. Es rápido y bastante fácil de implementar.

2

Si está de acuerdo con la clasificación por el lado del cliente, the Tablesorter plugin for jQuery es bastante agradable.

+0

Muchas gracias, esto me va a ahorrar mucho tiempo –

+1

Tablesorter carga todo el resultado de la consulta de una sola vez, lo que no es adecuado si desea cargar una gran cantidad de datos . – Randell

+0

@Randell: tiene una característica de paginación integrada, pero no la he probado, y aún tienes razón si el conjunto de datos es lo suficientemente grande. –

1

Me encontré con esto con una tabla 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é ..

ajustado system/application/config/config.php para permitir que el carácter de coma en el URI:

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-,'; 

ajustar 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 
} 

He simplificado demasiado, pero ya entiendo la idea.El objetivo es tener una URL como esta:

/controlador/clasificador/nombrecolumna, SortOrder

La función clasificadora llama a otra función interna para hacer frente a la pantalla de plantilla de vista lógica// - es el trabajo es para hacer frente a la llamada de clasificación y obtener los datos apropiados del modelo.

Por supuesto, esto podría reducirse sólo a 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 
} 

esta manera, usted ni siquiera necesita una función separada - y puede utilizar el tercer segmento para definir su clasificación.

+0

Podrías aceptar un argumento para la función del clasificador en lugar del disco duro del segmento URI 3. De lo contrario, parece una muy buena idea. –

+0

¡Gracias, eso es muy útil! –

Cuestiones relacionadas