Pregunta

He estado desarrollando un sitio durante las últimas semanas usando CodeIgniter como marco.He estado pensando en la mejor manera de lograr algo, que en muchos otros marcos en otros lenguajes es relativamente simple:mesas ordenables.CodeIgniter desactiva las cadenas de consulta de forma predeterminada, porque sus URL contienen parámetros de método.Entonces una URL podría verse así:

/controller/method/param1/param2

Podrías pensar que podrías simplemente agregar sortBy y sortOrder como dos parámetros adicionales al método del controlador.Particularmente no quiero hacer eso, principalmente porque quiero tener un controlador reutilizable.Cuando usa parámetros de cadena de consulta, PHP puede decirle fácilmente si hay un parámetro llamado sortBy.Sin embargo, cuando utiliza parámetros basados ​​en URL, variará con cada controlador.

Me preguntaba cuáles eran mis opciones.Por lo que puedo ver son algo como:

  • pasa en mi sortBy y sortOrder parámetros, simplemente aguantelo y desarrolle algún componente menos que reutilizable para él.
  • Tener un controlador adicional, que almacenará el sortBy y sortOrder en la sesión (aunque tendría que saber de dónde vienes y enviarte de regreso a la página original).
  • Tener algún tipo de función AJAX, que llamaría al controlador anterior;luego recarga la página.
  • Hackea CodeIgniter para volver a activar las cadenas de consulta.En realidad, si esta es la única opción, se agradecería cualquier enlace sobre cómo hacerlo.

¡No puedo creer que una tarea tan simple presente semejante problema!¿Me estoy perdiendo de algo?¿Alguien tiene alguna recomendación?


Editar 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 realizar una clasificación del lado del servidor, ya que hay algunas páginas con una cantidad potencialmente grande de resultados, incluida la paginación.

¿Fue útil?

Solución

He estado usando este método:http://codeigniter.com/forums/viewthread/45709/#217816

También lo expandí para configurar cookies según el orden, de modo que cuando alguien regrese, la tabla se ordene igual que antes.

Otros consejos

Si está de acuerdo con la clasificación en el lado del cliente, el complemento Tablesorter para jQuery es bastante bonito.

Me encontré con esto con una tabla bastante compleja.¡¡Lo difícil fue que la mesa podía crecer/reducirse dependiendo de ciertas variables!!Dolor grande :(

Así es como lo manejé...

Se ajustó system/application/config/config.php para permitir 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
}

Lo he simplificado demasiado, pero ya entiendes la idea.El propósito es tener una URL como esta:

/controlador/clasificador/nombre de columna,orden de clasificación

La función de clasificación 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 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
}

De esa manera, 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 haz un ayudante con él.

Otro ejemplo está aquí: http://www.robertmullaney.com/2010/09/19/tablerecord-sorting-made-easier-for-codeigniter/

Recientemente agregué esto Clasificador de mesa (que usa Prototype) en varias de mis páginas.Es rápido y bastante fácil de implementar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top