Ver Mensaje Individual
  #2 (permalink)  
Antiguo 10/09/2013, 10:34
rober18
 
Fecha de Ingreso: mayo-2013
Ubicación: cali
Mensajes: 58
Antigüedad: 11 años
Puntos: 0
Respuesta: Paginar resultados

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