Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/02/2011, 06:27
Malekith
 
Fecha de Ingreso: abril-2006
Mensajes: 105
Antigüedad: 18 años
Puntos: 11
Pregunta Aporto una solución y busco otra ;)

Hola a todos, hace un tiempo que uso el siguiente código en mi galería para pasar de una imagen a otra según su orden en la base de datos, y en caso de que haya un registro borrado, no habría problema, ya que el código no va incrementando o restando 1 al valor ID, sino que selecciona la ID anterior más próxima y la ID siguiente más próxima, por lo que no da margen a error.

El código:

Código PHP:
<?

    
// RECOJES EL VALOR DE ID, PREVIAMENTE REVISAS QUE GET EXISTA
    // Y QUE SEA UN NÚMERO, DE CUALQUIER OTRA FORMA ID DEBE SER IGUAL A 0
    
$id = (int)$_GET['id']; // if isset(...
    
    // LA CONSULTA BUSCA EL ID, SACA EL NÚMERO ANTERIOR Y SIGUIENTE,
    
$query mysql_query("
        select
            *,
            (select max(id_foto) from galeria where id_foto < $id) minimo,
            (select min(id_foto) from galeria where id_foto > $id) maximo
        from galeria
        where id_foto = $id"
);
    
$data mysql_fetch_array($query);
    if (
$data) {
        
// ...
        // MUESTRA LOS BOTONES DE NAVEGACIÓN CORRESPONDIENTES
        
if (!is_null($data['minimo'])) echo '<a href=index.php?seccion=imagen&id=' $data['minimo'] . ' title="Anterior">ANTERIOR</a>';
        if (!
is_null($data['minimo']) && !is_null($data['maximo'])) echo ' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ';
        if (!
is_null($data['maximo'])) echo '<a href=index.php?seccion=imagen&id=' $data['maximo'] . ' title="Siguiente">SIGUIENTE</a>';
    } else {
        
// scream_VERY_loud();
        
        // SCREAM !!! ES BROMA. ALGUIEN SIGUIO UN ENLACE INVALIDO O
        // QUISO MANIPULAR EL URL, POR LO QUE EL REGISTRO NO EXISTE
        // BUSCA EL MENOR ID Y REDIRECCIONA PARA BUSCARLO.
        
$query mysql_query("
            select min(id_foto) minimo, count(*) cuenta
            from galeria"
);
 
        if (
$data) {
            if (
$data['cuenta'] != 0)
                
// SI HAY REGISTROS REDIRECCIONA PARA BUSCAR EL MENOR
                
header('Location: index.php?seccion=imagen&id=' $query['minimo']);
            } else {
                
// LA BASE DE DATOS ESTÁ VACIA
                // NOW_scream_VERY_loud();
            
}
        }

?>
El código se puede adaptar fácilmente, supongo que con un mínimo de conocimientos lo podréis adaptar a vuestro sitio.

Ahora viene mi duda, el código anterior funciona a la perfección salvo para mostrar únicamente las imágenes pertenecientes a la misma categoría de la imagen que se está visualizando en el momento.

Así que mi pregunta es, ¿Cómo podrían los botones de anterior y siguiente enlazar solo a imágenes pertenecientes a la misma categoría de la imagen visualizada?

He probado con un LIKE al campo categoria (lógicamente el que guarda el valor de la categoría de la imagen), pero nada...

Pongo el código para que os hagais una idea:

Código PHP:
<?

    
// RECOJES EL VALOR DE ID, PREVIAMENTE REVISAS QUE GET EXISTA
    // Y QUE SEA UN NÚMERO, DE CUALQUIER OTRA FORMA ID DEBE SER IGUAL A 0
    
$id = (int)$_GET['id']; // if isset(...
    
    // LA CONSULTA BUSCA EL ID, SACA EL NÚMERO ANTERIOR Y SIGUIENTE,
    
$query mysql_query("
        select
            *,
            (select max(id_foto) from galeria where id_foto < $id) minimo,
            (select min(id_foto) from galeria where id_foto > $id) maximo
        from galeria
        where id_foto = $id LIKE categoria = '$row[categoria]'"
);
    
$data mysql_fetch_array($query);
    if (
$data) {
        
// ...
        // MUESTRA LOS BOTONES DE NAVEGACIÓN CORRESPONDIENTES
        
if (!is_null($data['minimo'])) echo '<a href=index.php?seccion=imagen&id=' $data['minimo'] . ' title="Anterior"><img src="./images/flechaiz.png" border="0" width="36" alt="Anterior" /></a>';
        if (!
is_null($data['minimo']) && !is_null($data['maximo'])) echo ' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ';
        if (!
is_null($data['maximo'])) echo '<a href=index.php?seccion=imagen&id=' $data['maximo'] . ' title="Siguiente"><img src="./images/flechade.png" border="0" width="36" alt="Siguiente" /></a>';
    } else {
        
// scream_VERY_loud();
        
        // SCREAM !!! ES BROMA. ALGUIEN SIGUIO UN ENLACE INVALIDO O
        // QUISO MANIPULAR EL URL, POR LO QUE EL REGISTRO NO EXISTE
        // BUSCA EL MENOR ID Y REDIRECCIONA PARA BUSCARLO.
        
$query mysql_query("
            select min(id_foto) minimo, count(*) cuenta
            from galeria"
);
 
        if (
$data) {
            if (
$data['cuenta'] != 0)
                
// SI HAY REGISTROS REDIRECCIONA PARA BUSCAR EL MENOR
                
header('Location: index.php?seccion=imagen&id=' $query['minimo']);
            } else {
                
// LA BASE DE DATOS ESTÁ VACIA
                // NOW_scream_VERY_loud();
            
}
        }

?>
Si no me he expresado bien, o se me ha olvidado indicaros un dato importante, avisarme para ponerlo rápidamente.

Un saludo y muchas gracias