Ver Mensaje Individual
  #4 (permalink)  
Antiguo 14/03/2008, 08:50
zubintro
 
Fecha de Ingreso: septiembre-2007
Mensajes: 120
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: Paginar los resultados de una busqueda

El codigo que continua es este.... directamente en la linea siguiente al codigo anterior
Código PHP:
/* junta codigo en la linea siguiente*/
/*FUNCIONES QUE DEVUELVEN VALORES RELATIVOS AL PAGINADO*/
/*Número total de páginas Devuelve el número total de páginas */
    
function numTotalPaginas () {
        return 
$this->numTotalPaginas;
    }
    
/*Número de página actual Devuelve el número de página actual @returns int */
    
function numEstaPagina () {
        return 
$this->numEstaPagina;
    }
    
/*Número de primer registro mostrado Devuelve el número del primer registro mostrado, en relación al total de registros @returns int */
    
function numPrimerRegistro () {
        return 
$this->numPrimerRegistro;
    }
    
/* Número de último registro mostrado Devuelve el número del último registro mostrado, en relación al total de registros @returns int */
    
function numUltimoRegistro () {
        return 
$this->numUltimoRegistro;
    }
    
/* Número de total registros Devuelve el número total de registros encontrados @returns int*/
    
function numTotalRegistros () {
        return 
$this->numTotalRegistros;
    }
    
/*Número de registros mostrados en esta página Devuelve el número de registros mostrados en la página actual @returns int */
    
function numRegistrosMostrados () {
        return 
$this->numTotalRegistros_this;
    }
    
/* Obtener los valores de configuración Devuelve un array con los valores de configuración @returns void */
    
function superArray () {
        return array(
"numPrimerRegistro"=>$this->numPrimerRegistro"numUltimoRegistro"=>$this->numUltimoRegistro"numTotalRegistros"=>$this->numTotalRegistros"porPagina"=>$this->porPagina"numRegistrosMostrados"=>$this->numTotalRegistros_this"nombreVariable"=>$this->nombreVariable"linkAgregar"=>$this->linkAgregar"linkClase"=>$this->linkClase"linkSeparador"=>$this->linkSeparador"numEstaPagina"=>$this->numEstaPagina"numTotalPaginas"=>$this->numTotalPaginas"paginasAntes"=>$this->paginasAntes"paginasDespues"=>$this->paginasDespues"mostrarPrimera"=>$this->mostrarPrimera"mostrarUltima"=>$this->mostrarUltima"mostrarAnterior"=>$this->mostrarAnterior"mostrarSiguiente"=>$this->mostrarSiguiente"mostrarIntermedias"=>$this->mostrarIntermedias"mostrarActual"=>$this->mostrarActual);
    }
    
/*Obtener los registros a mostrar Devuelve un array con los registros seleccionados para mostrar @returns array */
    
function fetchResultado () {
        if(
is_array($this->ejecutard)) {
            if(list(
$key$row) = each($this->ejecutard)) return $row;
        } elseif(
$row = @mysql_fetch_array($this->ejecutard)) {
            return 
$row;
        }
        else return 
false;
    }
    
    function 
fetchTodo () {
        if(
is_array($this->ejecutard))
            return (
count($this->ejecutard) > 0) ? $this->ejecutard null;        
        
$r = array();
        while(
$f $this->fetchResultado()) {
            
$r[] = $f;
        }
        return (
count($r) > 0) ? $r null
    }
    
/*Obtener barra de linksDevuelve una cadena conteniendo la barra de links en formato HTML @returns string */
    
function fetchNavegacion () {
        
$this->check_vars();
        
$i = array();
        foreach(
$_GET as $key=>$val) {
            if(
$key !== $this->nombreVariable) {
                
$i[] = "$key=$val";
            }
        }
        
$i[] = $this->nombreVariable;
        
$this->query_string implode('&',$i);
        
$this->root = (empty($this->root)) ? "http://".$_SERVER['HTTP_HOST'] : $this->root;
        
$this->url basename($_SERVER['PHP_SELF']).'?'.$this->query_string;
        
$this->style = (!empty($this->linkClase)) ? ' class="'.$this->linkClase.'"' NULL;
        
$before $this->paginasAntes;
        
$after $this->paginasDespues;
        
$pthis $this->numEstaPagina;
        
$ptotal $this->numTotalPaginas;
        
$before = (($pthis $before) < 1) ? : ($pthis $before);
        
$after = (($pthis $after) > $ptotal) ? $ptotal : ($pthis $after);
        
$link_string = array();
        if(
$pthis $this->paginasAntes+1) {
            
$link_string[] = $this->do_link(1,$this->addlinkmsg(1,1,$this->porPagina,1),$this->mostrarPrimera);
        }
        if(
$pthis 1) {
            
$link_string[] = $this->do_link(($pthis-1),$this->addlinkmsg(($pthis-1),(($this->porPagina*($pthis-2))+1),($this->porPagina*($pthis-1)),2),$this->mostrarAnterior);
        }
        
$i 0;
        while(
$before <= $after) {
            
$link_string[] = ($pthis <> $before) ? $this->do_link($before,$this->addlinkmsg($before,(($this->porPagina*($before-1))+1),($this->porPagina*($before)),3),sprintf($this->mostrarIntermedias,$before)) : sprintf($this->mostrarActual,$before);
            
$before++;
        }
        if(
$pthis $ptotal) {
            
$link_string[] = $this->do_link($pthis+1,$this->addlinkmsg(($pthis+1),(($this->porPagina*$pthis)+1),($this->porPagina*($pthis+1)),4),$this->mostrarSiguiente);
        }
        if(
$pthis < ($ptotal-$this->paginasDespues)) {
            
$link_string[] = $this->do_link($ptotal,$this->addlinkmsg($ptotal,(($this->porPagina*($ptotal-1))+1),$this->numTotalRegistros,5),$this->mostrarUltima);
        }
        
$link_string implode($this->linkSeparador,$link_string);
        return 
$link_string;
    }

/* FUNCIONES DE USO INTERNO. NO MODIFICAR!*/
    
function addlinkmsg ($tp,$rs,$rt,$type null) {
        
$total $this->numTotalRegistros;
        
$rt = ($rt $total) ? $total $rt;
        if(!empty(
$this->linkTitulo)) {
            return 
sprintf($this->linkTitulo,$tp,$rs,$rt,$this->numTotalRegistros);
        } else {
            switch(
$type) {
                case 
1: return "Primera p&aacute;gina. Resultados del $rs al $rt de $total"; break;
                case 
2: return "P&aacute;gina anterior: Resultados del $rs al $rt de $total"; break;
                case 
3: return "P&aacute;gina $tp: Resultados del del $rs al $rt de $total"; break;
                case 
4: return "P&aacute;gina siguiente. Resultados del $rs al $rt de $total"; break;
                case 
5: return "&Uacute;ltima p&aacute;gina. Resultados del $rs al $rt de $total"; break;
                default: return 
$this->addlinkmsg($tp,$rs,$rt,3);
            }
        }
    }
    
    
    function 
check_vars () {
        
$this->porPagina = ($this->porPagina >= 1) ? intval($this->porPagina) : 5;
        
$this->mostrarPrimera = (!empty($this->mostrarPrimera)) ? $this->mostrarPrimera "&laquo; Primera";
        
$this->mostrarAnterior = (!empty($this->mostrarAnterior)) ? $this->mostrarAnterior "&lt;";
        
$this->mostrarSiguiente = (!empty($this->mostrarSiguiente)) ? $this->mostrarSiguiente "&gt;";
        
$this->mostrarUltima = (!empty($this->mostrarUltima)) ? $this->mostrarUltima "&Uacute;ltima &raquo;";
        
$this->mostrarIntermedias = (!empty($this->mostrarIntermedias)) ? $this->mostrarIntermedias "%d";
        
$this->mostrarActual = (!empty($this->mostrarActual)) ? $this->mostrarActual "%d";
        
$this->paginasAntes = (is_numeric($this->paginasAntes) && $this->paginasAntes >= 0) ? intval($this->paginasAntes) : 3;
        
$this->paginasDespues = (is_numeric($this->paginasDespues) && $this->paginasDespues >= 0) ? intval($this->paginasDespues) : 3;
        
$this->nombreVariable = (ereg("(^[a-zA-Z0-9]+)$",$this->nombreVariable)) ? $this->nombreVariable "page";
    }
    
    
    function 
do_link ($page,$title,$content) {
        
$url $this->url;
        
$style $this->style;
        return 
"<a href=\"$url=$page".$this->linkAgregar."\" title=\"$title\"$style>$content</a>";
    }
  
    
    function 
ejecutar () {
        
$this->check_vars();
        
$numEstaPagina = (is_numeric($_GET[$this->nombreVariable]) && $_GET[$this->nombreVariable] >= 1) ? intval($_GET[$this->nombreVariable]) : 1;
        
$this->numEstaPagina = &$numEstaPagina;
        
$numPrimerRegistro = ($numEstaPagina 1) * $this->porPagina;
        if(!empty(
$this->sql)) {
            
$result = (isset($this->conn)) ? mysql_query($this->sql,$this->conn) : mysql_query($this->sql);
            
$this->numTotalRegistros mysql_num_rows($result);
        } else {
            
$data array_values($this->data);
            
$data_keys array_keys($this->data);
            
$this->numTotalRegistros count($data);
        }
        if(
$this->numTotalRegistros $numPrimerRegistro) {
            
$numPrimerRegistro 0;
            
$numEstaPagina 1;
        }
        
$this->numTotalPaginas ceil($this->numTotalRegistros $this->porPagina);
        if(
$this->numTotalRegistros >= 1) {
            
$this->numPrimerRegistro $numPrimerRegistro 1;
            
$pdata = array();
            if(!empty(
$this->sql)) {
                
$result = (isset($this->conn)) ? mysql_query($this->sql." LIMIT $numPrimerRegistro, {$this->porPagina}",$this->conn) : mysql_query($this->sql." LIMIT $numPrimerRegistro, {$this->porPagina}");
                
$this->ejecutard $result;
                
$this->numTotalRegistros_this mysql_num_rows($result);
            } else {
                
$numUltimoRegistro $numPrimerRegistro $this->porPagina 1;
                while(
$numPrimerRegistro <= $numUltimoRegistro) {
                    if(isset(
$data[$numPrimerRegistro])) {
                        
$key = (isset($data_keys[$numPrimerRegistro])) ? $data_keys[$numPrimerRegistro] : rand()."_".$numPrimerRegistro;
                        
$pdata[$key] = $data[$numPrimerRegistro];
                        
$numPrimerRegistro++;
                    } else {
                        break;
                    }
                }
                
$this->ejecutard $pdata;
                
$this->numTotalRegistros_this count($pdata);
            }
            
$this->numUltimoRegistro $this->numPrimerRegistro $this->numTotalRegistros_this 1;
        } else {
            
$this->numPrimerRegistro 0;
            
$numEstaPagina 0;
            
$this->numTotalRegistros_this 0;
            
$this->numUltimoRegistro 0;
            
$this->ejecutard = array();
        }
        return (
$this->numTotalRegistros_this 0);
    }
}
?>