• 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.


  • User Newbie

    sono di nuovo io :ciauz:

    sono riuscita a cambiare i caratteri, non riesco a trovare un editor visuale di php come kompozer quindi vado avanti così per adesso.
    Ti chiederei per cortesia come fare a eliminare la schermata delle miniature, preferirei infatti non visualizzarla...cosa devo togliere di preciso?
    grazie ancora e scusa per lo stress 😉


  • User Attivo

    Ciao.
    Scusa se non ho risposto ma ero fuori città 😉

    Non ho capito bene quale parte dello script vuoi eliminare, in che senso la schermata delle miniature?

    Per quanto riguarda l'editor, credo che un editor "visuale" per php non esista, al massimo esiste per l'html con il quale costruisci la struttura (layout) del sito. Il php è codice puro che va scritto in tutto e per tutto a mano. Se può esserti d'aiuto io uso RapidPHP che è a pagamento, ma se fai un giro su google ne trovi di molto validi anche gratuiti 😉


  • User Newbie

    ok grazie, cercherò di cercare e mi rassegnerò alla mancanza dell'editor visuale.
    Avevo immaginato che fossi fuori città, non c'è problema 😉
    In pratica quello che vorrei eliminare è quella parte di codice che mi fa visualizzare le miniature. Nel senso che lo script funziona che fa delle miniature poi io ci clicco sopra e visualizzo l'album con le freccine avanti indietro e indice. Ecco io vorrei avere direttamente l'album con le frecce avanti e indietro, ovviamente l'indice non avrebbe più senso..
    Non so se è semplice da fare ma lo script mi sembra molto modulare quindi mi piacerebbe toglierlo. Spero di essermi spiegata..Grazie!


  • User Newbie

    Ho girato tanto per il web e finalmente ho trovato qualcuno che ha creato uno script che fa al caso mio ma mi trovo in difficoltà.:o
    Premetto che di php non ne so quasi niente (uso di solito script già fatti e taglio le funzionalità che non mi interessano).
    Lo script l'ho inserito come da manuale ma mi restituisce l'errore:

    **Notice: Undefined variable: image in C:\Programmi\EasyPHP-5.3.3\www\main_gallery.php on line 138

    Notice: Undefined variable: image in C:\Programmi\EasyPHP-5.3.3\www\main_gallery.php on line 146

    Warning: Invalid argument supplied for foreach() in C:\Programmi\EasyPHP-5.3.3\www\main_gallery.php on line 146

    Notice: Undefined variable: image in C:\Programmi\EasyPHP-5.3.3\www\main_gallery.php on line 161

    Notice: Undefined variable: image in C:\Programmi\EasyPHP-5.3.3\www\main_gallery.php on line 166

    Warning: Division by zero in C:\Programmi\EasyPHP-5.3.3\www\main_gallery.php on line 166**

    Ps: uso Easyphp 5.3.3 come ambiente di test e ho già verificato che le librerie gd2 siano attive

    Se mi inviate lo script che avete già fatto via mail provo a capire da solo qual'è il problema...

    Ciao e grazie


  • User Newbie

    Ho provato a installare Xampp e lo stesso script mi restituisce l'errore più breve:

    **Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\main_gallery.php on line 138

    Warning: Division by zero in C:\xampp\htdocs\main_gallery.php on line 158**