Paginar una tabla con la clase pagination de codeigniter y bootstrap

Stay hungry, stay foolish

Steve Jobs

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>