imponiendo respeto

todo programas

miércoles, 6 de febrero de 2013

Paginacion en Codeigniter 2.x


1.Creamos la tabla con los resultados a paginar
Vamos a crear una tabla llamada mensajes
CREATE TABLE IF NOT EXISTS `mensajes` (
`id` int(11) NOT NULL auto_increment,
`de` varchar(50) collate utf8_bin NOT NULL,
`mensaje` varchar(50) collate utf8_bin NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Además, vamos a crear un conjunto de mensajes ficticios:
INSERT INTO `mensajes` (`id`, `de`, `mensaje`) VALUES
(1, 'Mi jefe', 'Termina lo que tienes pendiente'),
(2, 'Mama', 'Hijo comunícate'),
(3, 'Profesor', 'Mañana es el examen'),
(4, 'Carlos', 'Págame'),
(5, 'Novia ', 'Ya no me atiendes como antes');
(6, 'Tio', 'Sobrino cuando vienes?'),
(7, 'Abuela', 'Querido nieto te he hecho un sueter'),
(8, 'Hermano', 'dónde tiraste mi tablet pc?');
2.Creamos Modelo para el paginador
Para este ejemplo usamos como nombre de pagina localhost. En tu caso solo debes de reemplazarlo por el nombre de tu página.
Una vez que hemos configurado nuestra conexión a la base de datos (en database.php). Podemos pasar a crear nuestro Modelo. Lo llamaremos modelo_paginador.php
En
Application\models\modelo_paginador.php
<?php
class Modelo_paginador extends CI_Model {
   function __construct()
   {
      parent::__construct();
   }

   public function count_mensajes()
   {
      return $this->db->count_all_results('mensajes');
   }

   public function list_mensajes($limit, $offset)
   {
      $this->db->limit($limit, $offset);
      $query = $this->db->get('mensajes');
      return $query->result();
   }
}
3.Controlador
A continuación creamos nuestro controlador, asumiendo que usamos como nombre "Welcome"
Application\controllers\welcome.php
.
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Welcome extends CI_Controller {
   function __construct()
   {
      parent::__construct();
      $this->db = $this->load->database('default', TRUE);
      $this->load->library('pagination');
      $this->load->model('Modelo_Paginador', 'modelo');
      $this->load->helper(array('url'));
   }

   public function index($offset='')
   {
      $this->load->view('vista_mensajes'); // solo cargaremos la vista
   }

   public function lista($offset='')
   {
      $limit = 2;
      $total = $this->modelo->count_mensajes();
      $data['mensajes'] = $this->modelo->list_mensajes($limit, $offset);
      $config['base_url'] = base_url().'welcome/lista/';
      $config['total_rows'] = $total;
      $config['per_page'] = $limit;
      $config['uri_segment'] = '3';
      $this->pagination->initialize($config);
      $data['pag_links'] = $this->pagination->create_links();
      $data['title'] = 'Pagination';
      $this->load->view('lista_vista', $data);
   }
}

4.Vistas para el ejemplo de paginación
IMAGEN Vemos que en la función index cargamos una vista llamada 'vista_mensajes'. Por otra parte, en la función 'lista' tenemos la carga a la vista 'lista_vista'.
Para continuar vamos a crear estas vistas y también explicarlas un poco, ya que el asunto se sale de lo tratado en el manual de Codeigniter:
Comencemos con
Application\views\ vista_mensajes.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
   <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
   <meta name="author" content="Heislersin" />
<script src="http://code.jquery.com/jquery-1.7.js"></script> <script type="text/javascript">
   $(document).ready(function(){
      $("#contenedor").load("/welcome/lista");
      $(document).on("click", "#pagination-digg li a", function(e){
          e.preventDefault();
         var href = $(this).attr("href");
         $("#contenedor").load(href);
      });
   });
</script>
<style type="text/css">
<!--
/* == Pagination === */
ul{border:0; margin:0; padding:0;}

#pagination-digg li{
   border:0; margin:0; padding:0;
IMAGEN    font-size:11px;
   list-style:none;
   margin-right:2px;
}
#pagination-digg a{
   border:solid 1px #c6baa4;
   margin-right:2px;
}
#pagination-digg .previous-off, #pagination-digg .next-off {
   border:solid 1px #c6baa4;
   color:#222222;
   display:block;
   float:left;
   font-weight:bold;
   margin-right:2px;
   padding:3px 4px;
}
#pagination-digg .next a, #pagination-digg .previous a {
   font-weight:bold;
}
#pagination-digg .active{
   background:#c6baa4;
   color:#FFFFFF;
   font-weight:bold;
   display:block;
   float:left;
   padding:4px 6px;
}
#pagination-digg a:link, #pagination-digg a:visited {
   color:#222222;
   display:block;
   float:left;
   padding:3px 6px;
   text-decoration:none;
}
#pagination-digg a:hover{
   border:solid 1px #222222
}
-->
</style>
</head>
<body>
<div id="contenedor">
</div>
</body>
</html>

Creacion Otra  vista
Application\views\lista_vista.php
<ul class="nav" id="nav1">
<?php
foreach($mensajes as $p){
?>
<li><?php echo $p->de;?>: <?php echo $p->mensaje;?></li><?php
}
?>
</ul>
<ul id="pagination-digg">
<?php echo $pag_links;?>
</ul>

Digame  si te  Resulto...