El titulo quizás sea muy retórico para hablar de temas técnicos. LLevo unos meses trabajando bastante con Codeigniter. Hasta ahora nos ha ido de lujo, pero de vez en cuando cojea, no todo puede ser perfecto. Nos hemos dado cuenta, dentro del equipo de desarrollo de Adlemons.com, que codeigniter, almenos con la versión que trabajamos, tiene serios problemas con la librería de paginación, la cual no te permite combinar filtros en las búsquedas.
Nosotros hemos solucionado el problema con javascript, php y mucha imaginación, ya que el entorno donde se originaba el problema permitía tomarse la licencia de pasarse la parte SEO por el arco del triunfo y hacerlo todo de forma dinámica con Objetos Ajax.
Hemos creado una librería apodada “paginations.php” ( muy originales teniendo en cuenta que la primitiva de codeigniter es pagination) que recoje unos parámetros, entre ellos el nombre de la función que actualiza el div con nueva página y la cual devuelve los links de pagination con el formato adecuado haciendo referencia a la función de javascript que actualiza el div del resultado de la búsqueda. Acontinuación voy a anotar como utilizamos la librería paginations.php:
Qué cambios se ha realizado en la librería pagination.php para llamarse paginations.php?
antes
$output .= $this->num_tag_open.'".$loop."".$this->num_tag_close;
después
$output .= $this->num_tag_open."base_url."('.$n.'); ">".$loop."".$this->num_tag_close;
El secreto reside en la lamada en el href del vinculo a la función javascript que refresca el DIV.
antes
$this->base_url = rtrim($this->base_url, '/') .'/';
después
$this->base_url = rtrim($this->base_url, '') .''; // evitas que ponga una barra invertida detrás
Así se utiliza:
1º introducimos los parámetros $this->load->library(‘paginations’);
$config['base_url'] = 'update'//es el nombre de la funcion javascript que llama
$config['total_rows'] = 'Numero de elementos a filtrar';
$config['per_page'] = 'elementos por páginas a mostrar';
$config['uri_segment'] = 'Segmento de la url que contiene el número de paginación';
$this->paginations->initialize($config); // Inicializamos
//Está función devuelve la cadena string con formato HTML con los elementos de la páginación << < 1 2 3 4 5 > >>
$parapasaravista=$this->paginations->create_links();
Y en la vista tengo una función, en este caso llamada ‘update’ , en ajax que refresca el DIV con los filtros creados.