Paginar una tabla con la clase pagination de codeigniter y bootstrap

En está ocasión les vamos a mostrar como podemos paginar los datos de una tabla en codeigniter utilizando la clase pagination y el framework bootstrap.

Una vez que tengan instalado y configurado codeigniter para trabajar con su base de datos procedemos a crear nuestro modelo, para este ejercicio es de la tabla alumnos

class Alumno_model extends CI_Model {
  function __construct()
  {
    parent::__construct();
  }
 
  function get_alumnos($porpagina,$segmento)
  {
    $query = $this->db->get('alumnos',$porpagina,$segmento);
    if( $query->num_rows > 0 )
      return $query->result();
    else
      return FALSE;
  }

  function get_total_alumnos(){
    return $this->db->count_all('alumnos');
  }
}

Posteriormente creamos nuestro controlador

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 class Alumno extends CI_Controller {
 
  public function index()
  { $this->load->helper('url');
    /* Se cargan el modelo alumno y la libreria pagination */  
    $this->load->model('alumno_model');
    $this->load->library('pagination');
    /* URL a la que se desea agregar la paginación*/
    $config['base_url'] = base_url().'alumno/';
 
    /*Obtiene el total de registros a paginar */
    $config['total_rows'] = $this->alumno_model->get_total_alumnos();
     
    /*Obtiene el numero de registros a mostrar por pagina */
    $config['per_page'] = '1';

    /*Indica que segmento de la URL tiene la paginación, por default es 3*/
    $config['uri_segment'] = '2';
 
    /*Se personaliza la paginación para que se adapte a bootstrap*/
    $config['cur_tag_open'] = '<li class="active"><a href="#">';
    $config['cur_tag_close'] = '</a></li>';
    $config['num_tag_open'] = '<li>';
    $config['num_tag_close'] = '</li>';
    $config['last_link'] = FALSE;
    $config['first_link'] = FALSE;
    $config['next_link'] = '&raquo;';
    $config['next_tag_open'] = '<li>';
    $config['next_tag_close'] = '</li>';
    $config['prev_link'] = '&laquo;';
    $config['prev_tag_open'] = '<li>';
    $config['prev_tag_close'] = '</li>';
 
    /* Se inicializa la paginacion*/
    $this->pagination->initialize($config);
 
    /* Se obtienen los registros a mostrar*/
    $datos['alumnos'] = $this->alumno_model->get_alumnos($config['per_page'], $config['uri_segment']);  
     
    /*Se llama a la vista para mostrar la información*/
    $this->load->view('alumno', $datos);
  }
}

El controlador muestra la información pero únicamente cuando estamos en la primer pagina, para corregir ese detalle lo que hacemos es agregar una ruta, para lo cual abrimos nuestro archivo routes.php ubicado en la carpeta config y añadimos la siguiente linea


/* Indica que controlador se hace cargo cuando la URL 
tiene un segmento más de tipo numérico */

$route['alumno/(:num)'] = 'alumno';

Ahora creamos nuestra vista

<?php 
  $this->load->Helper('html');
?>
<!DOCTYPE html>
<html lang="es">
  <head>
    <meta charset="utf-8">   
    <title>Listado de alumnos</title>
 
    <!-- Se enlaza el archivo Bootstrap core CSS -->
    <?php echo link_tag('css/bootstrap.min.css'); ?>
  </head>
  <body>
      <div class="container">
          <div class="col-md-12">
            <h1 class="page-header">ALUMNOS</h1>            
              <div class="table-responsive">
                <table class="table table-striped">
                  <thead>
                    <tr>                 
                      <th>Num control</th>
                      <th>Nombre</th>
                      <th>Fecha de nacimiento</th>
                      <th>Sexo</th>
                    </tr>
                  </thead>
                  <tbody>
                    <?php
                    if($alumnos !== FALSE) {
                      // Se imprimen los datos de los alumnos
                      foreach ($alumnos as $fila) {
                    ?>
                     <tr>                       
                        <td><?php echo $fila->numctrl?></td>
                        <td><?php echo $fila->nombre?></td>
                        <td><?php echo $fila->fecnac?></td>
                        <td><?php echo $fila->sexo?></td>
                      </tr>
                    <?php                   
                  }
                }
                ?>
              </tbody>
            </table>
            <ul class="pagination">
            <?php
              /* Se imprimen los números de página */            
              echo $this->pagination->create_links();
            ?>
            </ul>
          </div>
        </div>
    </div>   
  </body>
</html>

7 comentarios en “Paginar una tabla con la clase pagination de codeigniter y bootstrap”

  1. luis dice:

    Excelente iniciativa

  2. Rosa dice:

    Hola buen dia 🙂 a mi me salio un pequeño error, me muesta la primera paginacion y al darle a la siguiente si se cambia en la url el numero pero me sigue mostrando los mismos datos en la vista

  3. Rosa dice:

    que puede ser? o en que me equivoque?

    load->helper(‘url’);
    /* Se cargan el modelo alumno y la libreria pagination */
    $this->load->model(‘alumno_model’);
    $this->load->library(‘pagination’);
    /* URL a la que se desea agregar la paginación*/
    $config[‘base_url’] = base_url().’index.php/alumno/’;

    /*Obtiene el total de registros a paginar */
    $config[‘total_rows’] = $this->alumno_model->get_total_alumnos();

    /*Obtiene el numero de registros a mostrar por pagina */
    $config[‘per_page’] = ‘3’;

    /*Indica que segmento de la URL tiene la paginación, por default es 3*/
    $config[‘uri_segment’] = ‘0’; /*aqui le tube que poner cero para que me mostrara desde el id 1*/

    /*Se personaliza la paginación para que se adapte a bootstrap*/
    $config[‘cur_tag_open’] = ‘‘;
    $config[‘cur_tag_close’] = ‘
    ‘;
    $config[‘num_tag_open’] = ”;
    $config[‘num_tag_close’] = ”;
    $config[‘last_link’] = FALSE;
    $config[‘first_link’] = FALSE;
    $config[‘next_link’] = ‘»’;
    $config[‘next_tag_open’] = ”;
    $config[‘next_tag_close’] = ”;
    $config[‘prev_link’] = ‘«’;
    $config[‘prev_tag_open’] = ”;
    $config[‘prev_tag_close’] = ”;

    /* Se inicializa la paginacion*/
    $this->pagination->initialize($config);

    /* Se obtienen los registros a mostrar*/
    $datos[‘alumnos’] = $this->alumno_model->get_alumnos($config[‘per_page’], $config[‘uri_segment’]);

    /*Se llama a la vista para mostrar la información*/
    $this->load->view(‘alumno’, $datos);
    }
    }”>

  4. Jairo Raigosa dice:

    Hola rosa, pues mira yo tenia el mismo problema y en el controlador agregue esta linea de codigo:
    $desde = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
    y cuando se llama la funcion que consulta los datos lo haces asi:
    $datos[‘alumnos’] = $this->alumno_model->get_alumnos($config[‘per_page’], $desde);

    reemplazas el $config[‘uri_segment’] por el $desde.

    espero te sirva

  5. Johana dice:

    Hola, disculpa tengo un problema no se muestra en la vista la paginacion, es decir no me imprime los links. Espero me puedas ayudar

  6. Miguel Leon dice:

    Hola Johana:
    Ojalá hayas solucionado tu inconveniente.: (pagination->create_links() ?> en el html)

    Mi paginación si se cambia. Tengo el problema que no se cambian es los datos.
    Tengo la verción CI-3.x
    Le puse el $desde, pero siempre toma el valor 0.

    Me pueden ayudar, por favor.

    Gracias.

    Quito.-Ecuador
    “La Mitad del Mundo”

    1. sun2012 dice:

      hola, en http://www.codedrinks.com/galeria-en-codeigniter/ esta el código de paginar con codeigniter y bootstrap, saludos.

Deja un comentario