Inicio > Codeigniter > Paginación en codeigniter

Paginación en codeigniter

Se utiliza para mostrar un conjunto de resultados de una base de datos, no en su totalidad sino estableciendo la cantidad de registros a mostrar por cada página. Así también en la vista se genera una serie de enlaces (de la forma: <<  anterior 2 3 4 5 6 siguiente  >>) de manera que permita al usuario desplazarse hacia las demás páginas.

Supongamos que tenemos una tabla llamada ‘contactos’ en nuestra base de datos, con sus campos ‘nombre’ y ‘apellido’, y queremos hacer un paginador para mostrar al usuario 4 contactos por página. A continuación les mostraré tanto el código como la explicación para el modelo, la vista y el controlador.

Controlador: contactos.php

function listar(){

//cargamos la librería

$this->load->library(‘pagination’);

 //configuramos

$config['base_url'] = base_url().”contactos/listar/”;

$config['total_rows'] = $this->Contactos_model->getCantidad();//obtenemos la cantidad de registros

$config['per_page'] = ’4′;  //cantidad de registros por página

$config['num_links'] = ’2′; //nro. de enlaces antes y después de la pagina actual

$config['prev_link'] = ‘anterior’; //texto del enlace que nos lleva a la pagina ant.

$config['next_link'] = ‘siguiente’; //texto del enlace que nos lleva a la sig. página

$config['uri_segment'] = ’3′;  //segmentos que va a tener nuestra URL

$config['first_link'] = ‘<<’;  //texto del enlace que nos lleva a la primer página

$config['last_link'] = ‘>>’;   //texto del enlace que nos lleva a la última página

 // inicializamos       

$this->pagination->initialize($config);

/* llamamos al método de nuestro modelo para hacer la consulta pasándole como parámetro la cantidad de registros por página y el registro por el que va a comenzar (estará contenido en el 3er segmento de la URL) */

$contactos = $this->Contactos_model->getContactos($config['per_page'], $this->uri->segment(3));

//ahora debemos llamar a la vista y pasarle el array ‘$contactos’ obtenido.

$datos[‘contactos’] = $contactos;

$this->load->view(‘contactos/contactos_view’, $datos, false);

}

modelo: contactos_model.php 

/*método que devuelve una cierta cantidad de registros dependiendo del valor de los parámetros. Con la cláusula ‘limit’ establecemos el número de registros por página y desde que registro inicia la consulta. */

function getContactos($numeroRegistros, $inicio)

{

$this->db->limit($numeroRegistros, $inicio);

$this->db->select(‘idContacto, nombre, apellido’);

$query = $this->db->get(‘contactos’);

return $query->result();

}

//método que devuelve el total de registros contenidos en la tabla ‘contactos’

function getCantidad ()

{

return $this->db->count_all(‘contactos’);

}

Finalmente en la vista recorremos el conjunto de resultados con un “foreach” y mostramos los datos por pantalla.

También debemos mostrar los enlaces a las otras páginas con “$this->pagination->create_links();”

Vista: contactos_view.php

<?php

if(isset($contactos)):

foreach($contactos as $c):

echo $c->nombre.’ <br />’.c->apellido;

endforeach;

endif; //endif

?>

<?php echo $this->pagination->create_links(); ?>

Categorías:Codeigniter Etiquetas: ,
  1. 25 agosto 2011 a las 1:47 pm | #1

    Es posible realizar paginación pero no de ‘TABLAS’ sino de consultas SQL personalizadas.
    Me explico, tengo varias tablas la cual mediante un formulario envio los parametros de busqueda, partiendo de aqui el ‘total_rows’ sera el $query->count_rows(); ya hasta ahi no hay problema es más, hasta me genera los links correctamente pero en este primer intento no es customizado en la vista(Muestra todos los registros y no limitado por la paginacion).
    SEGUNDO INTENTO como sé cuanto va a ser el ‘total_rows’ lo introdusco manualmente a modo de depuración ya hasta ahi todo bien ahora si me limita por ‘per_page’ (En el controlador puse que sea limitado asi como lo explica en tu tuto) pero cuando doy click al enlace de la siguiente página me lanza un error =(.. viendo el error los parametros que ‘habian sido insertados anteriormente’ NO ESTAN pero si el límite y rango xD!.. estuve buscando por todos lados como realizarlo. La única esperanza que veo es que sea echa mediante sesiones(Almacen temporal de los resultados), mi idea es evitar eso.

  2. adm
    25 agosto 2011 a las 2:20 pm | #2

    Hola Nino.
    Probá agregarle a la url del navegador el index.php si es que no lo tenes. Que te quede por ejemplo http://localhost/ejemplo/index.php/listar/4 para ver si el problema está ahí.

    fijate en la url después de hacer click en la siguiente pagina si te muestra algo parecido a esto: http://localhost/ejemplo/listar/4
    ese 4 debería ser el valor de $this->uri->segment(3)) que luego se pasa como parámetro en lo siguiente:
    $contactos = $this->Contactos_model->getContactos($config['per_page'], $this->uri->segment(3));

    Fijate a ver que pasa y me avisas.

  1. Aún no hay trackbacks

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.