Foros del Web » Programando para Internet » PHP »

DUDA script paginador

Estas en el tema de DUDA script paginador en el foro de PHP en Foros del Web. -------------------------------------------------------------------------------- Hola soy un usuario principiante, y mi duda es esta: El script es el siguiente: //Antes de incluir este script vía include() se debe ...
  #1 (permalink)  
Antiguo 03/08/2004, 11:52
 
Fecha de Ingreso: julio-2004
Mensajes: 12
Antigüedad: 13 años, 5 meses
Puntos: 0
DUDA script paginador

--------------------------------------------------------------------------------

Hola soy un usuario principiante, y mi duda es esta:
El script es el siguiente:
//Antes de incluir este script vía include() se debe haber definido una variable $_pagi_sql
//que contenga una sentencia sql válida

if(empty($_pagi_sql)){
//Si no se definió $_pagi_sql... error!
die("<b>Error paginación : </b>No se ha definido la variable \$_pagi_sql");
}

if(empty($_pagi_cuantos)){
//Si no se ha especificado la cantidad de registros por página
//$_pagi_cuantos será por defecto 20
$_pagi_cuantos = 20;
}

if (empty($_GET['pg'])){
//Si no se ha hecho click a ninguna página específica
//O sea si es la primera vez que se ejecuta el script
//$_pagi_actual es la pagina actual-->será por defecto la primera.
$_pagi_actual = 1;
}else{
//Si se "pidió" una página específica:
//La página actual será la que se pidió.
$_pagi_actual = $_GET['pg'];
}

//Contamos el total de registros en la BD (para saber cuántas páginas serán)
$_pagi_sqlConta = eregi_replace("select (.*) from", "SELECT COUNT(*) FROM", $_pagi_sql);
$_pagi_result2 = mysql_query($_pagi_sqlConta) or die ("Error en la consulta de conteo de registros. Mysql dijo: <b>".mysql_error()."</b>");
$_pagi_totalReg = mysql_result($_pagi_result2,0,0);//total de registros

//Calculamos el número de páginas (saldrá un decimal)
//con ceil() redondeamos y $_pagi_totyalPags será el número total (entero) de páginas que tendremos
$_pagi_totalPags = ceil($_pagi_totalReg / $_pagi_cuantos);


//Creamos la navegación a páginas específicas. Una línea tipo: <<anterior 1 2 3 4 siguiente>>

//La idea es pasar también en los enlaces las variables hayan llegado por url.
$_pagi_enlace = $_SERVER['PHP_SELF'];
$_pagi_query_string = "?";
if(isset($_GET)){
//Si ya se han pasado variables por url, escribimos el query string concatenando
//los elementos del array $_GET excepto la variable $_GET['pg'] si es que existe.
$_pagi_variables = $_GET;
foreach($_pagi_variables as $_pagi_clave => $_pagi_valor){
if($_pagi_clave != 'pg'){
$_pagi_query_string .= $_pagi_clave."=".$_pagi_valor."&";
}
}
}

//Añadimos el query string a la url.
$_pagi_enlace .= $_pagi_query_string;

//La variable $_pagi_navegacion contendrá los enlaces a las páginas.
$_pagi_navegacion = '';

if ($_pagi_actual != 1){
//Si no estamos en la página 1. Ponemos el enlace "anterior"
$_pagi_url = $_pagi_actual - 1;//será el número de página al que enlazamos
$_pagi_navegacion .= "<a href='".$_pagi_enlace."pg=".$_pagi_url."'>&laquo; Anterior</a>&nbsp;";
}

//Enlaces a números de página:
for ($_pagi_i = 1; $_pagi_i<=$_pagi_totalPags; $_pagi_i++){//Desde página 1 hasta última página ($_pagi_totalPags)
if ($_pagi_i == $_pagi_actual) {
//Si el número de página es la actual ($_pagi_actual). Se escribe el número, pero sin enlace y en negrita.
$_pagi_navegacion .= "<b>&nbsp;$_pagi_i&nbsp;</b>";
}else{
//Si es cualquier otro. Se escibe el enlace a dicho número de página.
$_pagi_navegacion .= "<a href='".$_pagi_enlace."pg=".$_pagi_i."'>".$_pagi_i ."</a>&nbsp;";
}
}

if ($_pagi_actual < $_pagi_totalPags){
//Si no estamos en la última página. Ponemos el enlace "Siguiente"
$_pagi_url = $_pagi_actual + 1;//será el número de página al que enlazamos
$_pagi_navegacion .= "<a href='".$_pagi_enlace."pg=".$_pagi_url."'>Siguient e &raquo;</a>";
}
//Hasta acá hemos completado la "barra de navegación"

//Calculamos desde qué registro se mostrará en esta página
//Recordemos que el conteo empieza desde CERO.
$_pagi_inicial = ($_pagi_actual-1) * $_pagi_cuantos;

//Consulta SQL. Devuelve $cantidad registros empezando desde $_pagi_inicial
$_pagi_sqlLim = $_pagi_sql." LIMIT $_pagi_inicial,$_pagi_cuantos";
$_pagi_result = mysql_query($_pagi_sqlLim) or die ("Error en la consulta limitada. Mysql dijo: <b>".mysql_error()."</b>");

//A partir de aquí quedan disponibles dos variables:
//$_pagi_navegacion : que contiene los enlaces para navegar por las páginas
//$_pagi_result : que contiene el id del resultado de la consulta a la BD para los registros de la página actual.
?>

Pues bien, lo único que quiero saber, es simplemente por curiosidad, y es lo que hace esta parte en concreto del script, ya que entender el script me ayudará a saber mas de php ;)
if(isset($_GET)){
//Si ya se han pasado variables por url, escribimos el query string concatenando
//los elementos del array $_GET excepto la variable $_GET['pg'] si es que existe.
$_pagi_variables = $_GET;
foreach($_pagi_variables as $_pagi_clave => $_pagi_valor){
if($_pagi_clave != 'pg'){
$_pagi_query_string .= $_pagi_clave."=".$_pagi_valor."&";
}
}
}


¿?¿?
  #2 (permalink)  
Antiguo 03/08/2004, 20:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues .. podrías preguntar al autor (jpinedo) .. (es bueno preguntar a los autores )

Bueno, lo que hace ese código es propagar variables que llegan por el método GET (por el URL/formularios en method GET ... )

Es decir, toma toda variable que llegue por GET (en un array $_GET le llegan al script) y añade la suya que usa para indicar que página está el "paginador".

Como es un array $_GET .. se recorre con un bucle foreach() que es lo que mejor vá para este tipo de cosas. En cada pasada del bucle .. se concatena el nombre de la variable que llega por el URL (GET) con su valor y el "operador" & para ir añadiendo una tras otra todas las variables que le hubieran llegado al script (menos la suya "pg" para no repetirla que es lo que hace el "if()" que hay en el bucle).

Un saludo,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:14.