* Frost Code *



Codeigniter tablas y paginación de datos

CodeIgniter trae clases para poder manejar tablas y también para paginar datos, esto último es muy útil cuando se quiere mostrar una cantidad de información.

En este ejemplo voy a desplegar información de los usuarios de una tabla usuario en la base de datos que contiene pocos datos(id,usuario,clave,email) para hacerlo mas sencillo.

Manos a la obra !

Controller : usuario.php

<?php

class Usuario extends Controller{

    function __construct()
    {
        parent::Controller(); 
        $this->load->helper('url');
    }

    function index()
    {
        $this->load->library('pagination'); //cargamos la libreria de paginacion
        $this->load->library('table'); //cargamos la libreria para el manejo de tablas
        $this->load->model('usuario_model'); //cargamos el archivo usuario_model.php
        
        $config['base_url'] = base_url().'/usuario/index/'; //establecemos la URL para las paginas
        $config['total_rows'] = $this->usuario_model->get_usuarios_cantidad();  //llamo a una funcion del modelo que me retorna la cantidad de usuarios que tengo en la tabla usuario.
        $config['per_page'] = '5'; //cantidad de filas a mostrar por pagina

        $this->pagination->initialize($config); // le paso el vector con mis configuraciones al paginador
        
        //llamo a la funcion get_usuarios que me retorna el resultado de la consulta SQL con los datos.
        $data['results'] = $this->usuario_model->get_usuarios($config['per_page'],$this->uri->segment(3));
  
        //obtengo los usuarios ordenados descendientemente por el id
        $data['usuario'] = $this->usuario_model->get_usuarios_desc('id'); 

        $this->load->view('usuario_index',$data); //cargo la vista usuario_index y le paso el vector
        
    }

Model : usuario_model.php

<?php

class usuario_model extends Model{

    function __construct()
    {
        parent::Model();
    }
    /* obtiene los usuarios con una consulta SQL que utiliza LIMIT para devolver una cantidad limitada de 5 */
    function get_usuarios($num,$offset)
    {
        $query = $this->db->get('usuario', $num, $offset);
        return $query;
    }
    /* dado un campo existente en la bd retorna todos los datos del usuario ordenados desc por ese campo */
    function get_usuarios_desc($campo)
    {
        $this->db->orderby($campo.' desc');
        $query = $this->db->get('usuario');
        return $query;
    }
   /* retorna la cantidad de usuarios que hay en la tabla usuario */
    function get_usuarios_cantidad ()
    {
    	return $this->db->count_all('usuario');
    }

}
?>

View: usuario_index.php


<p>Usuarios:</p>
<?php 

$this->table->set_heading('ID', 'Usuario', 'Clave', 'Email'); //crea la primera fila de la tabla con el encabezado
$tmp = array ( 'table_open'  => '<table border="0" cellpadding="2" cellspacing="1">' ); //modifica el espaciado
$this->table->set_template($tmp); //aplico los cambios de modificacion anterior

/*ok aca vamos a hacer que el correo tenga un enlace a enviar un mail
con el foreach recorro los resultados de la consulta */

  foreach($results->result() as $dato):
    $array['id'] = $dato->id
    $array['usuario'] = $dato->usuario;
    $array['clave'] = $dato->clave;
    $array['email'] = mailto($dato->email,$dato->email); //esto genera un link con el mismo nombre.
    $this->table->add_row($array); //agregamos la celda a la tabla por cada iteracion
  endforeach;

echo $this->table->generate($array); //cuando termina generamos la tabla a partir del vector

echo $this->pagination->create_links(); ?> //creamos los links para las paginas

El código esta mas que bien documentado y los archivos prontos para poner a prueba, por supuesto que si pretenden copiar y pegar el código asi nomas no va a funcionar.

Para utilizarlo deben tener la misma tabla usuario creada con los campos (id,nombre,clave,email) y además le van a tener que insertar muchos datos para probar las páginas.

Happy ignitions :-)

About these ads

Trackbacks & Pingbacks

Comentarios

  1. * Francizco says:

    Muy simple, muy bueno…thanks

    Publicado 5 years ago
  2. * max says:

    Hola, thx por el tuto, muy bueno y simple.
    lo implemente a una aplicacion ke estoy haciendo y todo bien, pero cuando me muestra los resultadoe en la tabla me aparece siemple el ultimo resultado duplicado,
    ke puede ser…?

    Publicado 4 years, 12 months ago
  3. * restupi says:

    me muestra el error:
    ademas de decirme que db no es un objeto???.

    Fatal error: Call to a member function count_all() on a non-object in /var/www/pt/system/application/models/usuario_model.php on line 25

    Publicado 4 years, 12 months ago
  4. * restupi says:

    hay alguien con quien compartir las dudas

    Publicado 4 years, 12 months ago
  5. * max says:

    ¬¬ mmm…
    parece ke no. :(

    Publicado 4 years, 11 months ago
  6. * Pablocaceres says:

    Perro aqui esta la solucion para que no se repita el ultimo row

    Usuarios:
    table->set_heading(‘ID’, ‘Usuario’, ‘Clave’, ‘Email’); //crea la primera fila de la tabla con el encabezado
    $tmp = array ( ‘table_open’ => ” ); //modifica el espaciado
    $this->table->set_template($tmp); //aplico los cambios de modificacion anterior

    /*ok aca vamos a hacer que el correo tenga un enlace a enviar un mail
    con el foreach recorro los resultados de la consulta */

    foreach($results->result() as $dato):
    $array['id'] = $dato->id
    $array['usuario'] = $dato->usuario;
    $array['clave'] = $dato->clave;
    $array['email'] = mailto($dato->email,$dato->email); //esto genera un link con el mismo nombre.
    $this->table->add_row($array); //agregamos la celda a la tabla por cada iteracion
    endforeach;

    echo $this->table->generate($array); //cuando termina generamos la tabla a partir del vector

    echo $this->pagination->create_links(); ?> //creamos los links para las paginas

    solo hay que borrar en la linea que generas la tabla borrar $array
    dejar asi
    echo $this->table->generate();

    Publicado 4 years, 10 months ago
  7. * belial.seed says:

    Esta muy entendible, sigue asi.

    Publicado 4 years, 8 months ago
  8. * MAR says:

    tengo un problema cargue 6 usuarios y cuando paso al paginador me da error 404.

    Publicado 4 years, 7 months ago
  9. * nilton says:

    como hago para unir dos tablas y luego paginar esos resultados de hacer Join de esas dos tablas? porque cuando agarras los datos a paginar lo haces de tola la pagina con $this->db->get(‘usuario’, $num, $offset);

    Publicado 4 years, 2 months ago
  10. * Juanjo says:

    Magnifico tutorial pero me da error en los links de la paginación, alguien sabe como resuelvo esto?

    saludos

    Publicado 4 years, 2 months ago
  11. * Roberto says:

    Para resolver el problema de los link de paginacion, solo tienen que verificar que tengan bien la variable $config['base_url'] = base_url().’/usuario/index/'; ya que esta es la base de los link de paginacion, revisen que su función realmente se llame index y que este enviando al controlador llamado usuario. O los nombres que ustedes hayan puesto

    Publicado 4 years, 2 months ago
  12. * heisler says:

    triste que el que escribe el articulo sea incapaz de comentar los problemas , ayudar un poco

    Publicado 4 years, 1 month ago
  13. * heisler says:

    rastupi para el error
    Fatal error: Call to a member function count_all() …
    debajo de
    parent::Model();

    $this->load->database(‘default’) // default o el caso que sea

    Publicado 4 years, 1 month ago
  14. * Dairo says:

    Esta muy bueno este código para paginación.
    Pero me da un error cuando doy click sobre los links(The page you requested was not found.) no me encuentra las páginas.

    Haber si alguien pudiera ayudarme a encontrar el porque

    Publicado 4 years, 1 month ago
  15. * Dairo says:

    Tengo otro problema, a la hora de listar los elementos, siempre me repite el último .
    Haber como podría salucionar este problema, ya intenté con el código que un colega comento en esta página y no me funcionó.
    Haber si alguien pudiera ayudrme

    Publicado 4 years, 1 month ago
  16. * jalejo08 says:

    Hola, No se porque razón el paginador no me funciona :(
    Resulta que los links de las paginas parecen abajo bien, tengo 8 registros, por lo tanto 2 páginas. Si estoy en la página 1 y le doy clic en el enlace de la pagina 2 o en el enlace de ir a la siguietne página, efectivametne me trae los neuvos registros, pero en los links generados, se queda como activo siempre la página 1, por lo tanto,se queda en negrita y sin enlace, entonces no es posible voler a la página anterior.
    Me gstaría saber porque sucede esto.
    gracias

    Publicado 4 years ago
  17. * Dairo says:

    Hola.
    Necesito saber por que la paginacion no me funciona cuando monto mi sistema en linux, que debo de hacer para que esta libreria me sea compatible para cualquier sistema operativo.
    Espero puedan ayudareme lo antes posible.
    Gracias

    Publicado 3 years, 10 months ago
  18. * Gary says:

    …Bueno para solucionar los problemas de redireccionar los links de paginación….cambie $config['base_url'] = base_url().’/usuario/index/'; Lo cambie por: $config['base_url'] = site_url().’/usuario/index/';

    Publicado 3 years, 10 months ago
  19. * ehlf says:

    Gary sos una bala tio, que bien se te da esto de resolver problemas en los codigos
    saludos

    Publicado 3 years, 10 months ago
  20. * Adrian says:

    Tengo el mismo problema que jalejo08… trae nuevos registros pero sigue en página 1…

    Publicado 3 years, 8 months ago
  21. * Adrian says:

    Solucionado!… hay que agregar un parámetro más en el controlador…

    $config['uri_segment'] = 10;

    con esto aparecen las current_page

    Publicado 3 years, 8 months ago
  22. * walterynche says:

    Me sale este error:

    A PHP Error was encountered

    Severity: Warning

    Message: Invalid argument supplied for foreach()

    Filename: libraries/Table.php

    Line Number: 198

    me podrian ayudar?

    Publicado 2 years, 11 months ago
  23. * Ericsson says:

    Walterynche en la linea
    echo $this->table->generate($array);

    Solo tienes que dejarlo asi:

    echo $this->table->generate();

    Como dijo PabloCaceres

    Publicado 2 years, 6 months ago
  24. * Ericsson says:

    Tengo el mismo problema que jalejo08 de que no cambian los datos del paginador, agregue la linea: $config['uri_segment'] = 10; en el controlador como dijo adrian y no sucede nada

    Publicado 2 years, 6 months ago
  25. * ozz says:

    si quiero agregar un enlace a un metodo del controlado asi como usuarios/modificar/1(ahi iria el parametro id del usuario) , como lo agrego en el array de la tabla?

    ,muy bueno el tutorial en especial para los que arrancamos con mvc!

    muchisimas gracias!

    Publicado 2 years, 4 months ago
  26. Hola amigo buenas noches mira estoy intentando hacerlo en codeigniter 2.1.3, tengo la misma tabla los mismos campos y todo igual que tu
    pero no me funciona me sale este error

    Fatal error: Llamada a método no definido CI_Controller :: CI_Controller () in C: \ wamp \ www \ GRHumanos
    me dice que en la linea 5 parent::CI_Controller();
    que hago

    load->helper(‘url’);
    }

    oye quedaria muy agradecida por tu ayuda de antemano muchas gracias
    att
    Johana hernandez

    Publicado 1 year, 9 months ago
  27. Amigos, no se si alguien sabe como manejar los chechbox en esta clase, para poder editar y/o eliminar datos en la base de datos a partir de de esta seleccion, espero me puedan ayudar. gracias de antemano

    Publicado 1 year, 8 months ago
  28. Alguien me puede ayudar!! hice lo mismo pero con otros datos y en la tabla me queda la primera columna vacia y se me empieza a llenar desde la segunda fila

    Publicado 3 months, 2 weeks ago


Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

A %d blogueros les gusta esto: