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
Muy simple, muy bueno…thanks
Publicado 3 years, 6 months agoHola, thx por el tuto, muy bueno y simple.
Publicado 3 years, 6 months agolo 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…?
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 3 years, 6 months agohay alguien con quien compartir las dudas
Publicado 3 years, 6 months ago¬¬ mmm…
Publicado 3 years, 6 months agoparece ke no.
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
Publicado 3 years, 5 months agodejar asi
echo $this->table->generate();
Esta muy entendible, sigue asi.
Publicado 3 years, 2 months agotengo un problema cargue 6 usuarios y cuando paso al paginador me da error 404.
Publicado 3 years, 2 months agocomo 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 2 years, 9 months agoMagnifico tutorial pero me da error en los links de la paginación, alguien sabe como resuelvo esto?
saludos
Publicado 2 years, 9 months agoPara 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 2 years, 9 months agotriste que el que escribe el articulo sea incapaz de comentar los problemas , ayudar un poco
Publicado 2 years, 8 months agorastupi 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 2 years, 8 months agoEsta 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 2 years, 8 months agoTengo otro problema, a la hora de listar los elementos, siempre me repite el último .
Publicado 2 years, 8 months agoHaber 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
Hola, No se porque razón el paginador no me funciona
Publicado 2 years, 7 months agoResulta 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
Hola.
Publicado 2 years, 5 months agoNecesito 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
…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 2 years, 4 months agoGary sos una bala tio, que bien se te da esto de resolver problemas en los codigos
Publicado 2 years, 4 months agosaludos
Tengo el mismo problema que jalejo08… trae nuevos registros pero sigue en página 1…
Publicado 2 years, 3 months agoSolucionado!… hay que agregar un parámetro más en el controlador…
$config['uri_segment'] = 10;
con esto aparecen las current_page
Publicado 2 years, 3 months agoMe 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 1 year, 6 months agoWalterynche en la linea
echo $this->table->generate($array);
Solo tienes que dejarlo asi:
echo $this->table->generate();
Como dijo PabloCaceres
Publicado 1 year, 1 month agoTengo 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 1 year, 1 month agosi 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 11 months, 2 weeks agoHola 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
Publicado 4 months, 1 week agoatt
Johana hernandez
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 2 months, 3 weeks ago