Foros del Web » Programando para Internet » PHP »

Ayuda con Paginator 1.6

Estas en el tema de Ayuda con Paginator 1.6 en el foro de PHP en Foros del Web. Hola, instalé el script Paginator 1.6 de Jpinedo para listar los resultados de un sistema de búsqueda de noticias por fecha (día, mes y/o año). ...
  #1 (permalink)  
Antiguo 06/05/2005, 09:07
 
Fecha de Ingreso: abril-2005
Mensajes: 50
Antigüedad: 19 años
Puntos: 0
Exclamación Ayuda con Paginator 1.6

Hola, instalé el script Paginator 1.6 de Jpinedo para listar los resultados de un sistema de búsqueda de noticias por fecha (día, mes y/o año).

En su función de listar los resultados funciona perfecto pero al pasar las variables para recordar la búsqueda, tengo dos problemas:

Cita:
1. Cuando buscas por fecha, los resultados de inicio corresponden a la búsqueda pero al dar click en siguiente o en anterior, se cargan todas las noticias de la base de datos y se pierde la consulta inicial.

2. Al buscar por fecha arriba de los resultados aparece un menú de salto con la fecha que elegiste, para indicar a los usuarios de cuando son los resultados que buscaron. Pero de igual manera, aunque de inicio muestra la fecha correspondiente a la búsqueda, al dar click en siguiente o en anterior se desconfigura este calendario.
Cita:
Ejemplo de los 2 Problemas:

http://www.ideasenred.com.mx/duda/busqueda.php

Metánse a esa dirección y traten de buscar los resultados de Febrero del 2004 (sin eleigr el día). Deben de salir 7 resultados llamados Prueba 01 Febrero 2004, Prueba 02 Febrero 2004, ....etc). En un inicio aparecen y corresponden a la búsqueda, pero den click en siguiente y luego en anterior; y verán que tanto la búsqueda como el calendario de arriba se desconfiguran.
ALGUNAS DE LAS COSAS QUE HE INTENTADO PARA RESOLVERLO

En este foro y en la sección de comentarios de la página de Paginator 1.6 hay algunas sugerencias a problemas relacionados, pero no he logrado solucionarlo. Lo que he hecho es lo siguiente:

Cita:
a) Declarar las variables de la siguiente manera $_pagi_propagar = array('diaid', 'mesid', 'anoid');

b) Cambiar $_POST de estas variables por $GLOBALS

c) Cambiar las variables de $_POST a $_GET de la siguiente manera:

if(isset($_POST['variable'])){
$var= $_POST['variable'];
}else{
$var= $_GET['variable'];
}
EL CÓDIGO ES EL SIGUIENTE

Formulario de Búsqueda-----------


Código PHP:
<td height="96" align="center" valign="top" class="sangriaA5"><!-- Este el CALENDARIO de búsqueda -->
            <form method="POST" action="resultadosbusqueda.php">
              <p>
                <!-- Buscar por Día -->
                <select name="diaid">
                  <option value = "">----</option>
                  <?php 
              
while ($dia mysql_fetch_array($dias)) {
              
$diaid $dia['diaid'];
              echo 
"<option value='$diaid'>$diaid</option>\n";
              }
              
              
?>
                </select>
&nbsp;&nbsp;&nbsp;
                <!-- Buscar por Mes -->
                <select name="mesid">
                  <option value = "">----------------</option>
                  <?php 
              
while ($mes mysql_fetch_array($meses)) {
              
$mesid $mes['mesid'];
              
$mesnom $mes['mes1'];
              echo 
"<option value='$mesid'>$mesnom</option>\n";
              }
              
?>
                </select>
&nbsp;&nbsp;&nbsp;
                <!-- Buscar por Año -->
                <select name="anoid">
                  <option value = "">------</option>
                  <?php 
              
while ($ano mysql_fetch_array($anos)) {
              
$anoid $ano['anoid'];
              
$anonum $ano['ano'];
              echo 
"<option value='$anoid'>$anonum</option>\n";
              }
              
?>
                </select>
              </p>
              <p>
                <input name="submit" type="submit" id="submit" value="Buscar">
              </p>
            </form></td>
Código que procesa la búsqueda y pagina los resultados-----

Código PHP:
<?php 

// incluye archivos para conectarse a la Base de Datos

include('config/confbd.php');
include(
'config/conectarbd.php');
include(
'config/queries_prensa.php');
?>

<?php 

//CALENDARIO: Permite que la fecha utilizada para buscar la base de datos se siga viendo en el calendario de esta página. Ejemplo: si buscaste 26 Febrero 2005 en subpagina.php entonces una vez que los resultados se muestren en subpagina6busqueda.php, el calendario de esta página seguira mostrando 26 Febrero 2005. Lo mismo si sólo buscaste por mes y/o  año.
    
    
$diaid $_POST['diaid'];
    
$mesid $_POST['mesid'];
    
$anoid $_POST['anoid'];

    
    
$select1 ' SELECT diaid, mesid, anoid';
    
$from1   ' FROM dias, meses, anos';
    
$where1  ' WHERE 1=1';
    
    
$diaid $_POST['diaid'];
    if (
$diaid != '') { // An author is selected
      
$where1 .= " AND diaid = '$diaid'";
    }
    
    
$mes $_POST['mesid'];
    if (
$mesid != '') { // An author is selected
      
$where1 .= " AND mesid = '$mesid'";
    }
    
    
$ano $_POST['anoid'];
    if (
$anoid != '') { // An author is selected
      
$where1 .= " AND anoid = '$anoid'";
    }
    
    
$query = ($select1 $from1 $where1);
    
$result mysql_query($query) or die ("Error in query: $query. " mysql_error());
    
$row mysql_fetch_object($result);


// BUSQUEDA: Este script permite obtener la lista de noticias (por título) en la base de datos, a partir de la búsqueda por dia, mes y/o año realizada en subpagina.php

    
$select '    SELECT id, titulo';
    
$from   ' FROM p_documentos';
    
$where  ' WHERE 1=1';
    
$order  ' ORDER BY id_ano desc, id_mes desc, id_dia desc';

    
    
$dia $_POST['diaid'];
    if (
$dia != '') { // An author is selected
      
$where .= " AND id_dia='$dia'";
    }
    
    
$mes $_POST['mesid'];
    if (
$mes != '') { // An author is selected
      
$where .= " AND id_mes='$mes'";
    }
    
    
$ano $_POST['anoid'];
    if (
$ano != '') { // An author is selected
      
$where .= " AND id_ano='$ano'";
    }

?>
<tr>
        <td height="34" align="center" valign="top" class="sangriaA5">
        
        <!-- Este es el calendario -->
        
        <form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
              <select name="diaid">
                <option value = "">----</option>
                <?php 
                      
while ($dia mysql_fetch_object($dias)) {
                      if (
$diaid != '') {
                          if (
$dia->diaid == $row->diaid) {
                                      echo 
"<option selected='selected' value='$dia->diaid'>$dia->diaid</option>\n";
                                      
                
//Quita esta parte si sólo quieres ver el DIA utilizado para buscar la base de datos (cuidado con el } final)
                
                                    
} else {
                                      echo 
"<option value='$dia->diaid'>$dia->diaid</option>\n";
                                           }
                                                                    }
                                                                        }
              
?>
            </select>
        &nbsp;&nbsp;&nbsp;
              <select name="mesid">
                <option value = "">----------------</option>
                <?php 
                      
while ($mes mysql_fetch_object($meses)) {
                      if (
$mesid != '') {
                        if (
$mes->mesid == $row->mesid) {
                                echo 
"<option selected='selected' value='$mes->mesid'>$mes->mes1</option>\n";
                                
                
//Quita esta parte si sólo quieres ver el MES utilizado para buscar la base de datos (cuidado con el } final)
                
                                
} else {
                                 echo 
"<option value='$mes->mesid'>$mes->mes1</option>\n";
                                       }
                                                                   }
                                                                           }
              
?>
            </select>
&nbsp;&nbsp;&nbsp;      
      <select name="anoid">
                <option value = "">------</option>
                <?php 
                      
while ($ano mysql_fetch_object($anos)) {
                      if (
$anoid != '') {
                          if (
$ano->anoid == $row->anoid) {
                                      echo 
"<option selected='selected' value='$ano->anoid'>$ano->ano</option>\n";
                    
                
//Quita esta parte si sólo quieres ver el AÑO utilizado para buscar la base de datos (cuidado con el } final)
                    
                                    
} else {
                                      echo 
"<option value='$ano->anoid'>$ano->ano</option>\n";
                                           }
                                                                    }
                                                                        }
              
?>
            </select>
        </form></td>
        <td>&nbsp;</td>
      </tr>

      <tr>
        <td height="261" valign="top" class="sangriaA5">
<?php

//Sentencia sql (sin limit)
$_pagi_sql = ($select $from $where $order);

//cantidad de resultados por página (opcional, por defecto 20)
$_pagi_cuantos 3;//Elegí un número pequeño para que se generen varias páginas

//cantidad de enlaces que se mostrarán como máximo en la barra de navegación
$_pagi_nav_num_enlaces 3;//Elegí un número pequeño para que se note el resultado

//Decidimos si queremos que se muesten los errores de mysql
$_pagi_mostrar_errores false;//recomendado true sólo en tiempo de desarrollo.

//Si tenemos una consulta compleja que hace que el Paginator no funcione correctamente, 
//realizamos el conteo alternativo.
$_pagi_conteo_alternativo true;//recomendado false.

//Supongamos que sólo nos interesa propagar estas dos variables
$_pagi_propagar = array('diaid''mesid''anoid');//No importa si son POST o GET

//Incluimos el script de paginación. Éste ya ejecuta la consulta automáticamente
include("pagination/paginator.inc.php");

//Incluimos la información de la página actual
echo"<p>Noticias ".$_pagi_info."</p>";

//Leemos y escribimos los registros de la página actual
while($row mysql_fetch_array($_pagi_result)){
 
?>
<p><strong><a href="#self" onClick="MM_openBrWindow('usuario/documento_prensa.php?id=<?php echo $row['id']; ?>','','toolbar=yes,status=yes,scrollbars=yes,resizable=yes,width=650,height=550')"><?php echo $row['titulo']; ?></a></strong><br />
<span class="Estilo1">Aquí va la fecha</span></p>

<?php
}

//Incluimos la barra de navegación
echo"<p>".$_pagi_navegacion."</p>";

        
    
?>
</td>

        <td>&nbsp;</td>
      </tr>
GRACIAS, ESPERO PUEDAN AYUDARME

Última edición por raml; 06/05/2005 a las 16:17
  #2 (permalink)  
Antiguo 06/05/2005, 22:31
 
Fecha de Ingreso: abril-2005
Mensajes: 50
Antigüedad: 19 años
Puntos: 0
Pregunta Pregunta

Hola, dado el éxito que tuvo el Post me complace decir que algunas horas màs tarde ...

Ya quedó arreglado , había que cambiar todas las variables de $_POST a $_GET, incluyendo el método de envío de variables del Formulario.

Pregunta : ¿Qué habría que hacer para que funcionara con $_POST? El script menciona que $_pagi_propagar funciona sin importar por cuál méodo se envió la variable. Desafortunadamente no he podido hacerlo funcionar utilizando $_POST en mi script

Saludos
  #3 (permalink)  
Antiguo 07/05/2005, 00:24
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Hola... disculpa la demora...
Es cierto, si utilizas correctamente el array $_pagi_propagar no tendrás problemas.
Ya he explicado varias veces (y por los posts que citas, supongo que has leído) que cuando hacemos submit en el form (método POST) se ejecuta el script que has hecho (donde utilizas Paginator) y toma las variables en el superglobal $_POST.
Pero Paginator propaga las variables por el url (método GET)... o sea que cuando haces clic en un enlace de página, el script deberá leer las variables desde el superglobal $_GET.
Lo que debes hacer ya lo has mencionado túmismo:
- Declaras el array $_pagi_propagar = array('diaid', 'mesid', 'anoid');
- Leer del superglobal $_POST si existe, y si no, leer desde el $_GET.
Código PHP:
if(isset($_POST['variable'])){
   
$var$_POST['variable'];
}else{
   
$var$_GET['variable'];

Debes hacer las dos cosas: decir qué variables propagar y preparar al script para que lea de $_POST o $_GET según el caso.

Tu script quedaría así:
Código PHP:
<?php
//CALENDARIO: Permite que la fecha utilizada para buscar la base de datos se siga viendo en el calendario de esta página. Ejemplo: si buscaste 26 Febrero 2005 en subpagina.php entonces una vez que los resultados se muestren en subpagina6busqueda.php, el calendario de esta página seguira mostrando 26 Febrero 2005. Lo mismo si sólo buscaste por mes y/o  año.

    
$diaid = isset($_POST['diaid'])?$_POST['diaid']:$_GET['diaid'];
    
$mesid = isset($_POST['mesid'])?$_POST['mesid']:$_GET['mesid'];
    
$anoid = isset($_POST['anoid'])?$_POST['anoid']:$_GET['anoid'];
    
    
$select1 ' SELECT diaid, mesid, anoid';
    
$from1   ' FROM dias, meses, anos';
    
$where1  ' WHERE 1=1';
    
    if (
$diaid != '') { // An author is selected
        
$where1 .= " AND diaid = '$diaid'";
    }
    
    if (
$mesid != '') { // An author is selected
        
$where1 .= " AND mesid = '$mesid'";
    }
    
    if (
$anoid != '') { // An author is selected
        
$where1 .= " AND anoid = '$anoid'";
    }
    
    
$query = ($select1 $from1 $where1);
    
$result mysql_query($query) or die ("Error in query: $query. " mysql_error());
    
$row mysql_fetch_object($result);


// BUSQUEDA: Este script permite obtener la lista de noticias (por título) en la base de datos, a partir de la búsqueda por dia, mes y/o año realizada en subpagina.php

    
$select '    SELECT id, titulo';
    
$from   ' FROM p_documentos';
    
$where  ' WHERE 1=1';
    
$order  ' ORDER BY id_ano desc, id_mes desc, id_dia desc';
    
    
$dia $diaid;
    if (
$dia != '') { // An author is selected
        
$where .= " AND id_dia='$dia'";
    }
    
    
$mes $mesid;
    if (
$mes != '') { // An author is selected
        
$where .= " AND id_mes='$mes'";
    }
    
    
$ano $anoid;
    if (
$ano != '') { // An author is selected
        
$where .= " AND id_ano='$ano'";
    }

?>
Todo el resto sigue igual.
Saludos
  #4 (permalink)  
Antiguo 07/05/2005, 09:11
 
Fecha de Ingreso: abril-2005
Mensajes: 50
Antigüedad: 19 años
Puntos: 0
De acuerdo

Hola, gracias por la explicación . Todo salió bien sólo que había que declarar tanto las variables del calendario, como mecionabas:

Código PHP:
// Calenario que muestra la fecha de la búsqueda

$diaid = isset($_POST['diaid'])?$_POST['diaid']:$_GET['diaid'];
$mesid = isset($_POST['mesid'])?$_POST['mesid']:$_GET['mesid'];
$anoid = isset($_POST['anoid'])?$_POST['anoid']:$_GET['anoid']; 
Al igual que las provenientes de la búsqueda:

Código PHP:
// Variables que hacen posible la búsqueda por fecha

$dia = isset($_POST['diaid'])?$_POST['diaid']:$_GET['diaid'];
$mes = isset($_POST['mesid'])?$_POST['mesid']:$_GET['mesid'];
$ano = isset($_POST['anoid'])?$_POST['anoid']:$_GET['anoid']; 
En efecto por los comentarios que leí me di cuenta que es una duda muy común , mi problema estuvo en el uso del operador ? :, ya que a penas me estoy familiarizando con PHP. Es por ello que no funcionaba por que intentaba usar el siguiente código al principio del script y no al declarar las variables respectivas:

Código PHP:
if(isset($_POST['diaid'])){
   
$diaid$_POST['diaid'];
}else{
   
$diaid$_GET['diaid'];
} .... 
y así con mesid y anoid 
Seguramente, si no me ayudabas explicandome el uso del ? : con mi ejemplo hubiera cometido el mismo error . Leí en uno de los comentarios tu intención de hacer un FAQ , es buena idea, espero puedas incluir ejemplos como este.

Finalmente, te agradezco el tiempo además de tu esfuerzo para crear un script para la comunidad , espero algún día poder regresarles el favor.

Suerte

Saludos
  #5 (permalink)  
Antiguo 07/05/2005, 13:26
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Hola:
un par de comentarios/aclaraciones:
Código PHP:
$diaid = isset($_POST['diaid'])?$_POST['diaid']:$_GET['diaid'];
//Es exactamente lo mismo que poner:
if(isset($_POST['diaid'])){
   
$diaid$_POST['diaid'];
}else{
   
$diaid$_GET['diaid'];
}
//Sólo que de una manera "abreviada".
// Utiliza la que sea más clara para ti... las dos te van a dar el mismo resultado. 
Otra cosa:
Tú lees de $_POST dos veces, con lo que tienes que hacer la misma comprobación de si leer de post o get para las mismas variables dos veces.
Lo que yo te propuse es que leas una sola vez y si quieres duplicar la variable ya lo hagas de la primera leída.
Código PHP:
//O sea en lugar de volver a hacer
$dia = isset($_POST['diaid'])?$_POST['diaid']:$_GET['diaid'];
// Simplemente haces
$dia $diaid
Saludos
  #6 (permalink)  
Antiguo 08/05/2005, 10:40
Avatar de Dragon_Mandarin  
Fecha de Ingreso: marzo-2005
Ubicación: Santiago de Chile
Mensajes: 231
Antigüedad: 19 años, 1 mes
Puntos: 14
Hola, Jorge Pinedo!

Estimado Jorge:

Antes que nada, magnífico tu script paginator 1.6 Bueno, soy primerizo en php y escribí todo lo que tu script demanda para funcionar correctamente. El problema es que simplemente no me funcionó, nada de nada. Estoy tratando de paginar una página (valga la redundancia) de noticias para que la persona al ir al detalle de la información, pueda acceder a la siguiente y asú, sucesivamente, para queno tenga que volver a la página de inicio y seleccionar la siguiente información.

La tabla se llama "noticias", y tiene la siguiente estructura:
ID_NOTICIAS
Fecha
Titulo
Resumen
Detalle
Imagen
Fuente

Quiero que registe el número de páginas y vaya linkeando los sucesivos registros.. bueno, se entiende, tú eres el experto y comprendes a qué me refiero.

A ver si me ayudas a resolver el problema, de veras te lo agradeceré mucho, Si quieres, respondes a mi correo y de veras agradezco desde ya tu ayuda (ojalá puedas)

Un abrazo,

Ricardo
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 14:27.