• User Attivo

    [Tutorial PHP+GD] Semplice Fotogallery con ridimensionamento immagini

    Ciao a tutti!
    Tempo fa volli inserire in un mio sito una fotogallery, così cercai disperatamente tra gli script preconfezionati. Avendo poi capito che non esisteva niente di facilmente personalizzabile mi misi a studiare e dopo un pò di tempo riuscii nell'intento di creare un semplice script senza l'uso di database e che creasse le miniature in automatico.

    Così adesso, dopo aver un pò aggiustato il codice voglio proporvelo sotto forma di tutorial/script.

    Vediamo cosa fa in linea generale lo script:

    • Apre la cartella dove sono contenute le foto
    • Ridimensiona le foto proporzionalmente (senza perdere la qualità)
    • Le stampa in un indice delle foto, sotto forma di anteprime, avente un sistema di paginazione
    • Se si clicca sopra una miniatura viene aperta la foto, anch'essa ridimensionata proporzionalmente a nostro piacimento
    • Crea i link per navigare all'interno delle foto più grandi.

    Viste le linee generali iniziamoa spiegare come funziona:

    Prima di tutto facciamo una nuova cartella contenente altre due carte che conterranno: una le foto originali, che dovremmo inserire manualmente, e l'altra le miniature generate automaticamente.

    Quindi creiamo un file denominato config_gallery.php e inseriamoci questo codice dove ognuno dovra modificare le variabili a suo piacimento per personalizzare la fotogallery:

    [php]
    <?php
    ##########################

    Parametri per la

    gestione della

    fotogallery

    ##########################

    // Qui bisogna inserire il percorso relativo la cartella in cui sono contenute
    // le foto con le dimensioni originali (es: "fotogallery/foto/").

    $dir = "";

    // Inserire qui il percorso relativo della cartella in cui si vuole che siano create le miniature
    // per l'anteprima delle foto (es: "fotogallery/miniature/").
    // Se non esiste verrà creata.

    $destination_path = "";

    // Modificare questo parametro in base a quanto si vogliono piccole le miniature:
    // se l'immagine è orizzontale questo numero rappresenta la larghezza in pixel della miniatura
    // altrimenti, se l'immagine è verticale, rappresenta l'altezza della miniatura.

    $thumb_width = 130;

    // Modificare questo parametro in base a quanto si vogliono piccole le miniature:
    // se l'immagine è orizzontale questo numero rappresenta la larghezza in pixel della foto dopo essere stata ridimensionata
    // altrimenti, se l'immagine è verticale, ne rappresenta l'altezza.

    $photo_width = 550;

    // Compressione del file: diminuendo questo parametro si abbasserà la grandezza (in kilobyte) della miniatura
    // ma anche la qualità. (Default: 100).

    $compression = 100;

    // Numero di miniature visualizzabili per pagina.
    // Se si vogliono visualizzare tutte le miniature presenti nella cartella lasciare il valore 0 (Default: 0).

    $numperpagina = 0;
    ?>
    [/php]Fatto ciò dobbiamo creare il "cuore" della fotogallery. Questo file può essere scoraggiante per chi ha meno esperienza in php, ma vi assicuro che non è niente di tremendamente difficile anche perchè ho inserito molti commenti che ne facilitano la comprensione.
    Quindi creiamo un file donominato main_gallery.php e inseriamoci questo codice:
    [php]
    <?php
    #######################
    # #
    # Fotogallery. #
    # Per configurarla #
    # vai nel file: #
    # config_gallery.php #
    # #
    #######################

        // Inclusione del file config_gallery.php per aquisire le variabili.
        include("config_gallery.php");
        
        // Recupero della variabile passata in get.
        // il valore "index" rappresenta l'indice della fotogallery, "view" la visualizzazione della singola foto.
        @$mode = $_GET['mode'];
        
        // Definizione delle variabili in base al valore di $mode
        if ($mode == "index" || empty($mode) || !isset($mode))
        {
            $quanto = $thumb_width;
        }
        elseif ($mode == "view")        
        {
                $quanto = $photo_width;
                $destination_path = $dir;    
        }
            
        // Aumenta la memoria utilizzabile fino a 128mb e il timeout a 4 minuti. 
        // Questo ci consente di creare le miniature senza avere un errore di timeout dal server
        ini_set("memory_limit", "128M"); 
        set_time_limit(240);    
                    
        // Se non esiste la cartella di destinazione delle miniature (vedi config_gallery.php) ne si forza la creazione
        if (!file_exists($destination_path)) 
        {
            mkdir($destination_path , 0777);
        }
        
        // Apertura della directory in cui sono contenute le foto a dimensione originale
        if ($handle = opendir($dir)) 
        {
           $i = 1; //Inizializzazione dell'indice
           // Letttura delle immagini conenute nella cartella $dir 
           while (false !== ($file = readdir($handle))) 
           {
                       list($width, $height, $type, $attr) = @getimagesize($dir.$file);        
                
                    // Se è una immagine "JPEG" continuo con la sua elaborazione 
                    // altrimenti si passa alla foto successiva
                    if($type == 2)
                    {
                           // Elaborazione delle nuove dimensioni (altezza e larghezza) in proporzione.
                           // Ciò consente di non alterare la qualità della immagine.
                           if($width > $height)
                           {  
                               $new_width = $quanto;
                               $new_height = ($quanto * $height) / $width;
                               $new_height = number_format($new_height, 0);
                           }      
                           elseif($height > $width)
                           {  
                               $new_height = $quanto;
                               $new_width = ($quanto * $width) / $height;
                               $new_width = number_format($new_width, 0);
                           }
                           elseif($height == $width)
                           {
                               $new_width = $quanto;
                               $new_height = $quanto;
                           }
                           
                           //Se si sta visualizzando una singola foto e questa è già stata ridimensionata si ignora questo passaggio, altrimenti la foto viene ridimensionata.
                           // L'"if" controlla se la foto in questione ha già le dimensioni desiderate. Se le dimensioni non sono uguali a quelle volute, verrà ridimensionata.
                           if ($mode == "view") 
                           {    
                               if ($new_height != $height && $new_width != $width) 
                               {
                                    isset($compression) ? $compression = $compression : $compression = 100; // In cso non sia settata la compressione (vedi config_gallery.php) gli si assegna il valore di default
                                    $destimg=imagecreatetruecolor($new_width,$new_height) or die("Problemi nelle creazioni dell'immagine");// Creazione Immagine
                                    $srcimg=ImageCreateFromJPEG($dir.$file) or die("Problemi nell'aprire l'immagine"); //Apertura Immagine Originale
                                    ImageCopyResampled($destimg,$srcimg,0,0,0,0,$new_width,$new_height,ImageSX($srcimg),ImageSY($srcimg)) or die("Problemi nel ridimensionamento"); //Ridimensionamento Nuova Immagine
                                    ImageJPEG($destimg, $destination_path.$file, $compression) or die("Problemi nel salvataggio"); //Salvataggio Nuova Immagine
                               }                           
                           }  
                           //Se si sta visualizzando l'indice delle foto (contenente le miniature) e queste sono già state ridimensionate si ignora questo passaggio, altrimenti la foto viene ridimensionata.
                           // l'"if" controlla se esiste già una miniatura, chiamata con lo stesso nome della foto originale, presente nella cartella di destinazione. Se non esiste viene creata la minatura
                           elseif (empty($mode))  
                           {
                               if (!file_exists($destination_path.'/'.$file)) //Se la miniatura non esiste verrà creata altrimenti si ignora questo passaggio
                                  {
                                    isset($compression) ? $compression = $compression : $compression = 100; // In cso non sia settata la compressione (vedi config_gallery.php) gli si assegna il valore di default
                                    $destimg=imagecreatetruecolor($new_width,$new_height) or die("Problemi nelle creazioni dell'immagine");// Creazione Immagine
                                    $srcimg=ImageCreateFromJPEG($dir.$file) or die("Problemi nell'aprire l'immagine"); //Apertura Immagine Originale
                                    ImageCopyResampled($destimg,$srcimg,0,0,0,0,$new_width,$new_height,ImageSX($srcimg),ImageSY($srcimg)) or die("Problemi nel ridimensionamento"); //Ridimensionamento Nuova Immagine
                                    ImageJPEG($destimg, $destination_path.$file, $compression) or die("Problemi nel salvataggio"); //Salvataggio Nuova Immagine                               
                                  }
                              }
                           
                            $image * = $file; //Creazione dell'array contenente le immagini
                               $i++; //Incremento dell'indice
                     }
                }     
               // Chiusura della cartella $dir
               closedir($handle);  
        }
        else 
        {
            // Se vi è un errore nell'aprire la cartella $dir allora viene stampato a video seguente paragrafo
            echo "<p align=\"center\">
                    Impossibile eseguire lo script. 
                    <br /> 
                    Accertati di aver impostato correttamente i parametri e
                    che la cartella (nome: \"<b>$dir</b>\" ) in cui sono contenute le foto esista
                 </p>";
        }
        
        //Se si sta visualizzando l'indice allora utilizzo la paginazione propria dell'indice
        if ($mode == "index" || empty($mode) || !isset($mode)) 
        {
            ########################
            #   Paginazione per       #
            #  la visualizzazione  #
            #      dell'indice       #
            ########################
            
            // Se si è scelto di utilizzare la paginazione (vedi file config_gallery.php) allora vengono stampati i links.
            // Altrimenti verranno visualizzate tutte le immagini nella stessa pagina.         
            if (empty($numperpagina)) 
            {
                $numperpagina = count($image);
            }
            isset($_GET['page']) ? $pageNum = $_GET['page'] : $pageNum = 1;
            
            $inizio = ($pageNum - 1) * $numperpagina; 
            $fine = $inizio + $numperpagina;
            
            $i = 1; //inizializzo l'indice
            foreach ($image as $id => $nome)
            {
                if ($i > $fine)
                {  
                  break;
                }
                
                if ($i >= $inizio)
                {   // stampa la miniatura
                    echo " <a href=\"?id=$i&amp;from=$pageNum&amp;mode=view\"><img src=\"".$destination_path.$nome."\" title=\"".$nome."\" border=\"0\" alt=\"foto\" /></a>";
                }
                   
                $i++; // incremento dell'indice
            }
            
            if ($fine > count($image))
            { 
                $fine = count($image);
            }        
            // Conto delle pagine
            $maxPage = ceil(count($image)/$numperpagina);
            
            // Creazione link per accedere ad ogni pagina
            $self = $_SERVER['PHP_SELF'];
            $nav  = '';
            for($page = 1; $page <= $maxPage; $page++)
            {
               if ($page == $pageNum)
               {
                  $nav .= " $page "; 
               }
               else
               {
                  $nav .= " <a href=\"?page=$page\" title=\"Pagina $page di $maxPage\">$page</a> ";
               }
            }
            
            // Creazione links Previous e Next
            // e quelli First page e Last page
             
            if ($pageNum > 1)
            {
            $page  = $pageNum - 1;
               $prev  = " <a href=\"?page=$page\" title=\"Pagina $page di $maxPage\"><< precedente</a> ";
            }
            else
            {
               $prev  = ''; // se siamo nella 1° pag non mostriamo Prev
            }
            
            if ($pageNum < $maxPage)
            {
            $page = $pageNum + 1;
               $next = " <a href=\"?page=$page\" title=\"Pagina $page di $maxPage\" >successivo >></a> ";
            }
            else
            {
               $next = ''; // siamo nell' ultima pag, nn mostriamo Next
            }
    
            // mostra i links di navigazione
            echo "<br />Pagine: ", $prev . $nav . $next ;
            print_r($image);
        }
        
        //Se si sta visualizzando a singola foto allora utilizzo la paginazione per visualizzare i link "precedente", "torna indietro" e "successiva"
        elseif ($mode == "view")
        {
            ########################
            #   Paginazione per    #
            #  la visualizzazione  #
            #  della singola foto  #
            ########################
            
            //Aquiusizione dell'id della foto. Default: 1
            isset($_GET['id']) ? $id = $_GET['id'] : $id = 1 ;
            
            //Stampa a video della foto
            echo "<img src=\"".$dir.$image[$id]."\" title=\"".$image[$id]."\" alt=\"".$image[$id]."\" />";
            echo "<br />".$image[$id];
            
            //Categoria da cui si proviene
            if (isset($_GET['from']))
            {
                $from = $_GET['from'];
            }
            else $from = 1;
            
            //Link Foto Precedente
            if ($id == 1)
            {
                $precedente = ""; //Se siamo nella prima pagina non mostriamo il link alla foto precedente
            }
            else 
            {
                $prev = $id - 1;
                $precedente = "<a href=\"?id=$prev&amp;from=$from&amp;mode=view \"><< Foto precedente</a>";
            }
            
            // Link Foto Successiva
            if ($id == count($image))
            {
                $successiva = ""; //Se siamo nella ultima pagina non mostriamo il link alla foto successiva
            }
            else 
            {
                $next = $id + 1;
                $successiva = "<a href=\"?id=$next&amp;from=$from&amp;mode=view \">Foto successiva >></a>";
            }
            
            //Stampa paginazione
            echo "<br /><br />".$precedente."&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"?page=$from\">Indice foto</a>&nbsp;&nbsp;&nbsp;&nbsp;".$successiva;        
        }
    

    ?>
    [/php]Fatto ciò non ci resta che andare nella pagina (il cui nome è a vostro piacimento) in cui vogliamo inserire le nostre foto e inserirvi questo codice, che seve ad includere tutti e due i file, nel punto esatto in cui vogliamo che si vedano le immagini:

    [php]
    <?php
    include("main_gallery.php");
    ?>[/php]

    Fatto ciò uploadiamo tutto sul nostro sito.

    Potete vedere come funziona tramite il pacchetto zip (rapidshare.com/files/128901378/fotogalley.zip.html) che vi ho preparato oppure potete andare nel mio sito all'indirizzo: sanpaolosassari.it/gallery/allievi/1

    Per qualsiasi domanda o bug non esitate a scrivere.
    Ciao!


  • User Attivo

    ciao, ottimo soprattutto per come è spiegato
    anche il risultato è buono

    ciao da danny1975 :ciauz:


  • User

    ottimo tutorial!
    volevo sapere se questo script può funzionare utilizzandolo in due spazi web diversi, le foto in uno, e le pagine in un altro.


  • ModSenior

    Non può funzionare su due spazi diversi.


  • User Attivo

    ottimo lavoro e grazie...:ciauz:


  • User Newbie

    Ottimo questo script...sto realizzando un sito personale in cui metto tutti i miei dipinti, ho inserito questa photogallery modificando i parametri e funziona perfettamente!! Ti chiedo solo una cortesia: ho visto che questo script stampa a video le foto in base all'ordine alfabetico dei file relativi. e' possibile invertire l'ordine dei file dell'array? Ho provato a modificare il codice mettendoci funzioni come array_reverse() e rsort() ma non riesco proprio a farlo funzionare. Qualcuno è così gentile da dirmi come si fa? Perchè ho nominato i file .jpg dei miei dipinti con numeri progressivi e vorrei che l'ultimo dipinto inserito (il più recente) sia il primo visualizzato. Lo script è fantastico e ci terrei a fare questa modifica. Grazie per l'attenzione.


  • User Attivo

    Se non ho capito male tu hai immagini nominate in questo modo:
    1.jpg (più vecchia)
    2.jpg
    3.jpg
    4.jpg (più recente)

    Se è così, allora basterà apportare poche modifiche, che ho segnato con il segno <<-----, al codice qui sotto:
    [PHP]
    <?php
    #######################
    # #
    # Fotogallery. #
    # Per configurarla #
    # vai nel file: #
    # config_gallery.php #
    # #
    #######################

        // Inclusione del file config_gallery.php per aquisire le variabili.
        include("config_gallery.php");
        
        // Recupero della variabile passata in get.
        // il valore "index" rappresenta l'indice della fotogallery, "view" la visualizzazione della singola foto.
        @$mode = $_GET['mode'];
        
        // Definizione delle variabili in base al valore di $mode
        if ($mode == "index" || empty($mode) || !isset($mode))
        {
            $quanto = $thumb_width;
        }
        elseif ($mode == "view")        
        {
                $quanto = $photo_width;
                $destination_path = $dir;    
        }
            
        // Aumenta la memoria utilizzabile fino a 128mb e il timeout a 4 minuti. 
        // Questo ci consente di creare le miniature senza avere un errore di timeout dal server
        ini_set("memory_limit", "128M"); 
        set_time_limit(240);    
                    
        // Se non esiste la cartella di destinazione delle miniature (vedi config_gallery.php) ne si forza la creazione
        if (!file_exists($destination_path)) 
        {
            mkdir($destination_path , 0777);
        }
        
        // Apertura della directory in cui sono contenute le foto a dimensione originale
        if ($handle = opendir($dir)) 
        {
           // Lettura delle immagini conenute nella cartella $dir 
           while (false !== ($file = readdir($handle))) 
           {
                       list($width, $height, $type, $attr) = @getimagesize($dir.$file);        
                
                    // Se è una immagine "JPEG" continuo con la sua elaborazione 
                    // altrimenti si passa alla foto successiva
                    if($type == 2)
                    {
                           // Elaborazione delle nuove dimensioni (altezza e larghezza) in proporzione.
                           // Ciò consente di non alterare la qualità della immagine.
                           if($width > $height)
                           {  
                               $new_width = $quanto;
                               $new_height = ($quanto * $height) / $width;
                               $new_height = number_format($new_height, 0);
                           }      
                           elseif($height > $width)
                           {  
                               $new_height = $quanto;
                               $new_width = ($quanto * $width) / $height;
                               $new_width = number_format($new_width, 0);
                           }
                           elseif($height == $width)
                           {
                               $new_width = $quanto;
                               $new_height = $quanto;
                           }
                           
                           //Se si sta visualizzando una singola foto e questa è già stata ridimensionata si ignora questo passaggio, altrimenti la foto viene ridimensionata.
                           // L'"if" controlla se la foto in questione ha già le dimensioni desiderate. Se le dimensioni non sono uguali a quelle volute, verrà ridimensionata.
                           if ($mode == "view") 
                           {    
                               if ($new_height != $height && $new_width != $width) 
                               {
                                    isset($compression) ? $compression = $compression : $compression = 100; // In cso non sia settata la compressione (vedi config_gallery.php) gli si assegna il valore di default
                                    $destimg=imagecreatetruecolor($new_width,$new_height) or die("Problemi nelle creazioni dell'immagine");// Creazione Immagine
                                    $srcimg=ImageCreateFromJPEG($dir.$file) or die("Problemi nell'aprire l'immagine"); //Apertura Immagine Originale
                                    ImageCopyResampled($destimg,$srcimg,0,0,0,0,$new_width,$new_height,ImageSX($srcimg),ImageSY($srcimg)) or die("Problemi nel ridimensionamento"); //Ridimensionamento Nuova Immagine
                                    ImageJPEG($destimg, $destination_path.$file, $compression) or die("Problemi nel salvataggio"); //Salvataggio Nuova Immagine
                               }                           
                           }  
                           //Se si sta visualizzando l'indice delle foto (contenente le miniature) e queste sono già state ridimensionate si ignora questo passaggio, altrimenti la foto viene ridimensionata.
                           // l'"if" controlla se esiste già una miniatura, chiamata con lo stesso nome della foto originale, presente nella cartella di destinazione. Se non esiste viene creata la minatura
                           elseif (empty($mode))  
                           {
                               if (!file_exists($destination_path.'/'.$file)) //Se la miniatura non esiste verrà creata altrimenti si ignora questo passaggio
                                  {
                                    isset($compression) ? $compression = $compression : $compression = 100; // In cso non sia settata la compressione (vedi config_gallery.php) gli si assegna il valore di default
                                    $destimg=imagecreatetruecolor($new_width,$new_height) or die("Problemi nelle creazioni dell'immagine");// Creazione Immagine
                                    $srcimg=ImageCreateFromJPEG($dir.$file) or die("Problemi nell'aprire l'immagine"); //Apertura Immagine Originale
                                    ImageCopyResampled($destimg,$srcimg,0,0,0,0,$new_width,$new_height,ImageSX($srcimg),ImageSY($srcimg)) or die("Problemi nel ridimensionamento"); //Ridimensionamento Nuova Immagine
                                    ImageJPEG($destimg, $destination_path.$file, $compression) or die("Problemi nel salvataggio"); //Salvataggio Nuova Immagine                               
                                  }
                              }
                           
                            $i = explode('.', $file, -1);  // <<---- Questo permette di utilizzare il nome delle immagini come indice per l'array successivamente ordinato
                            $image * = $file; //Creazione dell'array contenente le immagini
                     }
                }     
               // Chiusura della cartella $dir
               closedir($handle);  
        }
        else 
        {
            // Se vi è un errore nell'aprire la cartella $dir allora viene stampato a video seguente paragrafo
            echo "<p align=\"center\">
                    Impossibile eseguire lo script. 
                    <br /> 
                    Accertati di aver impostato correttamente i parametri e
                    che la cartella (nome: \"<b>$dir</b>\" ) in cui sono contenute le foto esista
                 </p>";
        }
        
        //Se si sta visualizzando l'indice allora utilizzo la paginazione propria dell'indice
        if ($mode == "index" || empty($mode) || !isset($mode)) 
        {
            ########################
            #   Paginazione per       #
            #  la visualizzazione  #
            #      dell'indice       #
            ########################
            
            // Se si è scelto di utilizzare la paginazione (vedi file config_gallery.php) allora vengono stampati i links.
            // Altrimenti verranno visualizzate tutte le immagini nella stessa pagina.         
            if (empty($numperpagina)) 
            {
                $numperpagina = count($image);
            }
            isset($_GET['page']) ? $pageNum = $_GET['page'] : $pageNum = 1;
            
            $inizio = ($pageNum - 1) * $numperpagina; 
            $fine = $inizio + $numperpagina;
            
            krsort($image); // <<---------- ORDINIAMO L'ARRAY IN MODO DECRESCENTE
            $i = 1; //inizializzo l'indice
            foreach ($image as $id => $nome)
            {
                if ($i > $fine)
                {  
                  break;
                }
                
                if ($i >= $inizio)
                {   // stampa la miniatura
                    echo " <a href=\"?id=$i&amp;from=$pageNum&amp;mode=view\"><img src=\"".$destination_path.$nome."\" title=\"".$nome."\" border=\"0\" alt=\"foto\" /></a>";
                }
                   
                $i++; // incremento dell'indice
            }
            
            if ($fine > count($image))
            { 
                $fine = count($image);
            }        
            // Conto delle pagine
            $maxPage = ceil(count($image)/$numperpagina);
            
            // Creazione link per accedere ad ogni pagina
            $self = $_SERVER['PHP_SELF'];
            $nav  = '';
            for($page = 1; $page <= $maxPage; $page++)
            {
               if ($page == $pageNum)
               {
                  $nav .= " $page "; 
               }
               else
               {
                  $nav .= " <a href=\"?page=$page\" title=\"Pagina $page di $maxPage\">$page</a> ";
               }
            }
            
            // Creazione links Previous e Next
            // e quelli First page e Last page
             
            if ($pageNum > 1)
            {
            $page  = $pageNum - 1;
               $prev  = " <a href=\"?page=$page\" title=\"Pagina $page di $maxPage\"><< precedente</a> ";
            }
            else
            {
               $prev  = ''; // se siamo nella 1° pag non mostriamo Prev
            }
            
            if ($pageNum < $maxPage)
            {
            $page = $pageNum + 1;
               $next = " <a href=\"?page=$page\" title=\"Pagina $page di $maxPage\" >successivo >></a> ";
            }
            else
            {
               $next = ''; // siamo nell' ultima pag, nn mostriamo Next
            }
    
            // mostra i links di navigazione
            echo "<br />Pagine: ", $prev . $nav . $next ;
            print_r($image);
        }
        
        //Se si sta visualizzando a singola foto allora utilizzo la paginazione per visualizzare i link "precedente", "torna indietro" e "successiva"
        elseif ($mode == "view")
        {
            ########################
            #   Paginazione per    #
            #  la visualizzazione  #
            #  della singola foto  #
            ########################
            
            //Aquiusizione dell'id della foto. Default: 1
            isset($_GET['id']) ? $id = $_GET['id'] : $id = 1 ;
            
            //Stampa a video della foto
            echo "<img src=\"".$dir.$image[$id]."\" title=\"".$image[$id]."\" alt=\"".$image[$id]."\" />";
            echo "<br />".$image[$id];
            
            //Categoria da cui si proviene
            if (isset($_GET['from']))
            {
                $from = $_GET['from'];
            }
            else $from = 1;
            
            //Link Foto Precedente
            if ($id == 1)
            {
                $precedente = ""; //Se siamo nella prima pagina non mostriamo il link alla foto precedente
            }
            else 
            {
                $prev = $id - 1;
                $precedente = "<a href=\"?id=$prev&amp;from=$from&amp;mode=view \"><< Foto precedente</a>";
            }
            
            // Link Foto Successiva
            if ($id == count($image))
            {
                $successiva = ""; //Se siamo nella ultima pagina non mostriamo il link alla foto successiva
            }
            else 
            {
                $next = $id + 1;
                $successiva = "<a href=\"?id=$next&amp;from=$from&amp;mode=view \">Foto successiva >></a>";
            }
            
            //Stampa paginazione
            echo "<br /><br />".$precedente."&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"?page=$from\">Indice foto</a>&nbsp;&nbsp;&nbsp;&nbsp;".$successiva;        
        }
    

    ?>
    [/PHP]

    Ho solo eliminato la creazione dell'indice nel primo ciclo sostituendola con il nome del file e poi lo ordinato in modo descrescente prima di stampare le immagini a video:
    [PHP] $i = explode('.', $file, -1); //Creo l'indice
    krsort($image); //Ordino
    [/PHP]

    Attenzione che ho utilizzato il limite negativo per la funzione explode che è valida solo dal PHP5 in su... in caso ci siano problemi la cambio subito 😉


  • User Newbie

    Grazie mille per la disponibilità!!! Ora provo subito ad apportare le modifiche. Scusa ma non sono un genio in php... comunque la mia idea è come hai detto tu... le immagini sono 1.jpg....4.jpg e voglio visualizzarle dalla 4 alla 1. Appena finito ti faccio sapere e ti mando in privato il link al mio sito in cui puoi vedere la photogallery creata col tuo codice. Grazie ancora.


  • User Newbie

    Ehm..ho modificato il codice come hai detto, ma a video mi stampa l'errore:
    Warning: Illegal offset type in C:\Programmi\EasyPHP5.3.0\www\main_gallery.php on line 101

    tante volte quante sono le immagini della cartella.

    La linea 101 nel mio file php corrisponde a:
    $image * = $file; //Creazione dell'array contenente le immagini

    subito dopo l' explode()

    Premetto che sul server locale ho php 5.3.0. Intanto sto cercando di capire cosa c'è che non va...
    Ciao!!!


  • User Attivo

    Prova così... ho sbagliato nello scrivere la variabile $i, che in realtà è un array:

    [PHP]
    $i = explode('.', $file, -1); //Creo l'indice
    $k = $i[0];
    $image [$k] = $file; //Creazione dell'array contenente le immagini
    [/PHP]

    Vediamo se così funziona 😉

    P.S.: volevo segnalarti che questo stesso script l'ho migliorato rifacendolo completamente tempo fa. Lo puoi trovare qui http://www.giorgiotave.it/forum/scripting-e-risorse-utili/106519-script-fotogallery-con-resize-lightbox-categorie.html :ciauz:


  • User Newbie

    Grazie inverter..ho fatto le correzioni che hai riportato...ora le thumbnails sono ordinate al contrario come volevo 8.jpg, 7.jpg, 6.jpg eccetera fino alla 1.jpg. Il problema ora è che cliccando le thumbs si aprono le immagini ingrandite ma non c'è corrispondenza tra thumb e relativa immagine grande... scusami se ti ho creato grattacapi ma è che il tuo script è il migliore tra quelli che ho provato in rete.


  • User Newbie

    In pratica cliccando sulla prima thumb si apre l'ultima immagine grande, la seconda thumb la penultima immagine grande.


  • User Newbie

    Grazie Inverter ho risolto il problemino: dopo modifiche fatte un po' a tentoni ho semplicemente sostituito in:
    echo " <a href="?id=$i&from=$pageNum&mode=view"><img src="".$destination_path.$nome."" title="click for a full view" alt="foto" /></a>
    con $id
    Ora funziona tutto!! Grazie per la cortesia!!


  • User Newbie

    Ho messo in linea nel mio sito, di cui ti ho inviato il link, la photogallery con le immagini ordinate dalla più recente alla più vecchia. Ho provato a modificare il codice per far sì che le immagini siano contenute dentro le celle una tabella...senza riuscirci ovviamente. Ho provato a mettere un ciclo for che contiene il foreach... e l'esecuzione dello script mi ha bloccato tutto il pc....Secondo voi l'aggiunta della tabella appesantisce un pò troppo l'esecuzione dello script? Buona serata a tutti.


  • Bannato User

    Ciao non riesco a scaricare lo script me lo potresti mandare per email? [email][email protected][/email]


  • User Newbie

    Ciao questo script mi sembra interessante potresti inviarmelo via email.
    La mia mail e' :
    esmi_ale
    @hotmail
    .it


  • User Newbie

    Ciao mi potresti mandare lo script per la fotogallery


  • User Newbie

    Complimenti per questo script. Per un paio di giorni infatti ho cercato uno script che mi permettesse di capire qualcosa oltre che copiare e incollare il codice.
    Sono nuovissima del php e infatti non riesco a risolvere una questioncina: sotto le miniature c'è la scritta di ordinamento delle foto e vorrei toglierla e anche sotto ogni foto c'è il titolo della foto.
    Ho provato a rimuovere "$title" ma non funziona.
    È che non sono assolutamente pratica.
    Ringrazio ancora per lo script!


  • User Attivo

    Vediamo se ricordo ancora qualcosa di questo script 😄

    @birilubina said:

    sotto le miniature c'è la scritta di ordinamento delle foto e vorrei toglierla

    Ti consiglio di commentare la riga di codice che visualizza i link della paginazione in questo modo:
    cerchi la riga
    [PHP] // mostra i links di navigazione
    echo "<br />Pagine: ", $prev . $nav . $next [/PHP]

    e la fai diventare
    [PHP] // mostra i links di navigazione
    //echo "<br />Pagine: ", $prev . $nav . $next [/PHP]

    Non dovresti avere problemi e se un giorno ti interesserà avere questa funzione potrai eliminare il commento.

    @birilubina said:

    sotto ogni foto c'è il titolo della foto.
    Ho provato a rimuovere "$title" ma non funziona.

    Devi eliminare la riga
    [PHP]echo "<br />".$image[$id];[/PHP]
    che si trova sotto il commmento "//stampa a video della foto"

    Ciao!:ciauz:

    P.S.: Rileggendo il codice mi sembra di aver dimenticato un "print_r()" assolutamente inutile 😄
    Se vuoi quindi elimina la riga
    [PHP] print_r($image);
    [/PHP]


  • User Newbie

    bene! grazie ancora!
    adesso vorrei cambiare il carattere delle scritte "indice" eccetera ma spero di riuscirlo a fare da sola. Più che altro..sapresti consigliarmi un editor visuale di php per linux (mint)?
    Io per adesso sto usando kompozer ma è per html, poi uso un traduttore online per trasformarlo in php e così facendo non riesco a capire bene nè l'html nè il php.