Ver Mensaje Individual
  #4 (permalink)  
Antiguo 14/03/2008, 08:50
zubintro
 
Fecha de Ingreso: septiembre-2007
Mensajes: 120
Antigüedad: 19 años, 1 mes
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) ? 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);
    }
}
?>