domingo, 7 de julio de 2013

Paginación con CodeIgniter

Seguimos con el Tema 3 de la creación de un carrito de compras con CodeIgniter, hoy vamos a ver cómo hacer una Paginación con CodeIgniter de una manera muy sencilla con la librería Pagination; CI nos da la posibilidad de personalizar la paginación; aunque son bastantes las opciones que tenemos para definir nuestras preferencias, no es necesario definirlas todas, pero hay 3 opciones que no se pueden dejar de configurar, las cuales son: base_url: la cual se define como la ruta que nos lleva al controlador/método que contiene la paginación. total_rows: el número de filas que contiene la consulta a la base de datos. per_page: la cantidad de items que queremos mostrar por página.
Empecemos por ir a: cart/application/controllers/, para modificar el controlador products.php; en el método constructor vamos a cargar las otras librerías que vamos a necesitar: pagination y cart junto con helper text; cabe recalcar que para paginar solo necesitamos la librería pagination, la libreria cart y helper text los vamos a necesitar para el Tema 4 donde vamos a implementar el carro de compras; también vamos a modificar el método index que es donde vamos a definir las preferencias de la paginación.

Modificamos los métodos constructor e index del controlador products.php

 function __construct() {
      
    parent::__Construct();
    $this ->load->model('Products_Model');
    $this->load->library(array('pagination', 'cart'));
    $this->load->helper('text');

    }

    function index(){

    $pagination = 3;
    $config['base_url'] = base_url().'products/index';
    $config['total_rows'] = $this->db->get('productos')->num_rows();
    $config['per_page'] = $pagination;
    $config['num_links'] = 20;
    $config['next_link'] = 'Siguiente »';
    $config['prev_link'] = '« Anterior';

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

    $data['title'] = 'Computadores Portatiles';
    $data['results'] = $this->Products_Model->get_products($pagination, $this->uri->segment(3));

    $this->load->view('front/header',$data);
    $this->load->view('front/content');
    $this->load->view('front/footer');

    }
Ahora vamos a: cart/application/models/ abrimos el modelo products_model.php y modificamos el único método que hasta el momento tenemos.

Modificamos el método get_products

    class Products_Model extends CI_Model {

    function get_products($pagination, $segment) {

    $this->db->order_by('marca', 'asc');
    $this->db->limit($pagination, $segment);
    $query = $this->db->get('productos')->result();

    return $query;

    }

    }
Finalmente vamos a cart/application/views/front/, abrimos content.php, para añadir los links de la paginación, los cuales colocamos debajo del foreach:

Enlaces de la paginación

<div id="pagination"><?=$this->pagination->create_links(); ?></div>
Con esto ya debe paginar los resultados que se obtienen de la base de datos.

Descargar archivos del Tema 3

Aquí dejo otra paginación, la cual tiene el index.php en la url;
es decir no utiliza el .htaccess

Descargar ci_pagination sin .htaccess
ambién modificaremos el

12 comentarios :

  1. super bueno tu guia, te agradesco, me ha servido mucho
    pero sabes me da un error
    Filename: C:\xampp\htdocs\cart\system\database\DB_driver.php

    Line Number: 124
    me puedes ayudar por favor

    ResponderBorrar
    Respuestas
    1. Este comentario ha sido eliminado por el autor.

      Borrar
    2. Unable to connect to your database server using the provided settings.

      Filename: C:\wamp\www\cart\system\database\DB_driver.php

      Line Number: 124

      lo probé otra vez en Windows y no hay ningún error, excepto si
      los datos para conectar a la BD no corresponden aparece
      el mensaje de arriba.

      Parece ser lo mismo, algún dato en database.php no es correcto,
      fijate en este archivo y asegurate que el servidor, el usuario,
      la contraseña y la base de datos seleccionados sean correctos.

      cart/application/config/database.php lineas 51-54

      $db['default']['hostname'] = 'localhost'; // que esté bien esscrito
      $db['default']['username'] = 'NUESTRO USUARIO'; // root u otro
      $db['default']['password'] = 'NUESTRO PASSWORD'; // si tiene o vacio ''
      $db['default']['database'] = 'cart'; // la base de datos

      si no es eso supongo que es algún problema con el servidor, aunque
      eso es poco factible....

      espero que esto te de la solución...

      Borrar
  2. Amigo que tal, aplicando al pie de la letra lo que hiciste de la paginación, estuvo bien.
    Pero a la hora de paginar no lo realiza, no consigue la url:
    The requested URL /cart/products/index/3 was not found on this server.
    Descargue los archivos tuyo y da el mismo error

    ResponderBorrar
  3. Jonathan,
    Verifique el .htaccess, y que la aplicación se llame cart, si no
    funciona por favor vuelva a comentar

    ResponderBorrar
    Respuestas
    1. Olvide deircirle recuerde que el mod rewrite debe estar habilitado en el servidor.

      siga el primer post de la configuración de CI
      http://elprogramadorjunior.blogspot.com/2013/07/instalacion-y-configuracion-de.html

      Borrar
  4. Sandro,
    El .htaccess esta bien, el nombre de la aplicación está correcto, tengo habilitado el mod rewrite en el servidor, lo cual me ha servido en otra pagina perfectamente, pero en la paginación sigue sin conseguir la url.

    La solución momentanea que he conseguido es agregandole a la url el index.php es decir en vez de /cart/products/index/3 le coloco /cart/index.php/products/index/3 y así me funciona perfecto

    ResponderBorrar
  5. respecto de esa solución está bien justamente eso iva a decirle que hiciera. Por alguna razón en
    algunos servidores da error al no especificarla en el controlador en el que se hace la paginación.

    Sin embargo en este mismo post coloqué otro archivo para
    descargar que se llama ci_pagination solo es descomprimirlo porque utiliza
    la misma BD y no hay que cambiarle el nombre; ahí está sin .htaccess,
    también ya modifiqué todos los archvios para descargar.

    así que ya puede volver a probarlos.
    Gracias por comentar

    ResponderBorrar
  6. Perfecto, funcionan bien, gracias por la modificaciones.
    Seguiré viendo tu tutorial que está bien explicado

    ResponderBorrar