yo te recomiendo que hagas esa paginacion a punta de php html y algoritmia, yo en mi caso hice la paginacion asi, te la dejare para que te veas si te sirve, aunque se ve algo fea de todas maneras funciona y eso es lo importante
la vista Factura_view:
Código HTML:
<table>
<tr>
<td><a href="<?php echo site_url('Factura_controller/administracion?principio=0')?>"><b>Principio</b></a></td>
<?php
if($pag_actual>0){
?>
<td><a href="<?php echo site_url('Factura_controller/administracion?anterior='.$pag_actual)?>"><b>Anterior</b></a></td>
<?php
}
for($i=$comienzo; $i<$fin; $i++)
{
$k=$i+1;
if($i!=$pag_actual)
{
?>
<td><a href="<?php echo site_url('Factura_controller/administracion?inicio='.$i)?>"><font color="blue"><b><?php echo $k ?></b></font></a></td>
<td>-</td>
<?php
}
else
{
echo "<td>".$k."</td>";
echo "<td>-</td>";
}
}
$comparador=$i-1;
if($pag_actual<$comparador)
{
?>
<td><a href="<?php echo site_url('Factura_controller/administracion?siguiente='.$pag_actual)?>"><b>Siguiente</b></a></td>
<?php
}
?>
<td><a href="<?php echo site_url('Factura_controller/administracion?final='.$i)?>"><b>Final</b></a></td>
</tr>
</table>
el controlador Factura_controller
Código PHP:
public function administracion()
{
//variable que indica cuantos registros se mostraran por link
$cant_reg = 5;
//se obtiene del modelo el conteo de los registros en total
$total_registros = $this->Factura_model->count();
//division para obtener el total de links (paginas) que se mostraran en la paginacion
$datos['total_paginas'] = ceil($total_registros/$cant_reg);
/*condiciones y operaciones para la paginacion, las cuales se inician con una variable enviada via url desde la vista
Factura_view, para saber si se eligio algun numero depagina especifico, anterior, siguiente, primera, ultima y guardar
la operacion en la variable $inicio, la cual se pasa al modelo (Factura_model), al metodo get_consulta y le indica
a la funcion LIMIT del query por cual registro debe empezar a mostrar, si no se cumple ninguna condicion, es decir si
el usuario no le dio click a ningun boton de la paginacion la variable $inicio queda en 0, diciendole al limit que
comience con el registro numero 0
*/
if(isset($_GET['inicio']))
{
$inicio=$_GET['inicio']*5;
$datos['actual']=$_GET['inicio'];
}
elseif(isset($_GET['anterior']))
{
$datos['actual']=$_GET['anterior']-1;
$inicio=$datos['actual']*5;
}
elseif(isset($_GET['siguiente']))
{
$datos['actual']=$_GET['siguiente']+1;
$inicio=$datos['actual']*5;
}
elseif (isset($_GET['principio']))
{
$inicio=$_GET['principio'];
}
elseif (isset($_GET['final']))
{
$inicio=floor($total_registros/$cant_reg)*$cant_reg;
$datos['actual']=$inicio/5;
}
else
{
$inicio=0;
}
//esta condicion va corriendo las posiciones de los enlaces de la paginacion
if((isset($datos['actual']))&&($datos['actual']>=5))
{
$datos['comienzo']=$datos['actual']-4;
$datos['fin']=$datos['actual']+6;
}
else
{
$datos['comienzo']=0;
$datos['fin']=10;
}
//esta condicion.... no me acuerdo que hace pero bueeeno.
if($datos['fin']>=$datos['total_paginas'])
{
$datos['fin']=$datos['total_paginas'];
$datos['comienzo']=$datos['fin']-10;
}
//esta condicion es para saber, segun el usuario loggeado, cual es el campo que debe mostrar en la consulta que se
//encuentra en Factura_model en la funcion get_consulta
if($user->username=="fabian")
{
$campo='nom_ciudad';
}
if($user->username=="mauro")
{
$campo='nom_dpto';
}
//hay que asignarle la posicion en un arreglo de lo que se quiere mandar a la vista
//llamamos al metodo del modelo en donde esta la consulta de la factura, le pasamos los parametros que indican el nombre
//de un campo definido arriba, y las variables cant_reg e inicio que ya indique para que sirven en laparte de arriba
$datos['sql'] = $this->Factura_model->get_consulta($campo,$cant_reg,$inicio);
}
y el modelo Factura_model
Código PHP:
public function get_consulta($campo,$cant_reg,$inicio)
{
$this->db->select(
'df.id,pr.nombre,es.nom_sede,df.no_factura,df.generada,df.vencimiento,df.concepto,df.descuento,df.valor,
df.recibido,df.fecha_elab,'.$campo);
$this->db->from('datos_factura df');
$this->db->join('proveedores pr','df.id_proveedor = pr.id');
$this->db->join('establecimientos es','df.id_estab = es.id');
$this->db->join('ciudades ci','es.id_ciudad = ci.id_ciudad');
$this->db->join('dptos dp','ci.id_dpto = dp.id_dpto');
$this->db->order_by('df.no_factura','asc');
$this->db->limit($cant_reg , $inicio);
//el $this->db->get() es para retornar el query de arriba, y se lo asignamos a la posicion 'sql' de la variable $query
$this->consulta = $this->db->get();
return $this->consulta;
}
public function count()
{
//esta consulta cuenta los datos de la factura para hacer el dropdown
return $this->db->count_all('datos_factura');
}
eso fue lo que yo hice, ojala te funcione, recuerda, lo importante es que funcione