Ciao a tutti!
Essendo sempre al lavoro per ottimizzare la mia fotogallery, questa volta ne è nata una nuova e mi sembrava doveroso renderla disponibile a chi, come me, avesse bisogno di una cosa semplice che, senza tanti fronzoli, ridimensioni le immagini, creandone le anteprime, e divida le foto in categorie (se lo si vuole).
Features:
• Resize automatico delle foto in una data cartella, sia delle foto originali che delle anteprime mantenendo inalterate le proporzioni
• Visualizzazione foto tramite Lightbox 2
• Possibile divisione delle foto in infinite categorie
• Paginazione delle anteprime
Demo:
http://www.sanpaolosassari.it/fotoga...hp?mode=choose
Script:
http://rapidshare.com/files/20842259...llery.zip.html
Il cuore dello script sta nella pagina script.fotogallery.php in cui è necessario modificare le prime 5 variabili secondo le proprie esigenze:
Il resto poi vien da se. Bisogna includere lo script nella pagina in cui si vogliono mostrare le anteprime con un include:Codice PHP:
<?php
##########################################
## EasyPhotogallery ##
## Script by Inverter ##
## ##
## Per info: michele.brianda@gmail.com ##
## Lo script è liberamente modificabile ##
##########################################
##
## Variabili di Configurazione.
## Settarle secondo il proprio utilizzo
##
$SizeTh = 130; //Grandezza dell'anteprima
$SizePh = 580; //Grandezza della foto originale
$DirGallery = "foto"; //Nome della cartella in cui sono contenute le sottocartelle o le foto
$MaxPhoto = 20; //Numero massimo di foto per pagina. 0 = tutte.
$Compression = 100; //Compressione dell'immagine
##
## Inizio dello script
##
ini_set("memory_limit", "128M"); //Settaggio a 128mb del limite imposto dal php.ini
set_time_limit(3000); //Prolungamento del limite imposto dal timer del php.ini
/**
* Controllo dell'esistenza di eventuali categorie e sottocattegorie passate via GET (col nome £cat1, $cat2, ...) i cui nomi sono inseriti nell'array $cat
*/
$link_cat = ""; //Valorizzazione della variabile link_cat utilizzata per creare il link in caso siano usate le categorie
if(isset($_GET['cat1']))
{
$var_cat = "";
$i = 1;
while ($i < 100)
{
$cat[$i] = $_GET['cat'.$i];
$var_cat .= $cat[$i]."/";
$link_cat .= "cat".$i."=".$cat[$i]."&";
$i = $i + 1;
if (!isset($_GET['cat'.$i]))
break;
}
}
/**
* Creazione delle variabili $photo_path ed $thumb_path
*/
if (!empty($var_cat))
{
$photo_path = $DirGallery."/".$var_cat;
$thumb_path = $DirGallery."/".$var_cat."thumbnails";
}
else
{
$photo_path = $DirGallery."/";
$thumb_path = $DirGallery."/thumbnails";
}
/**
* Controllo dell'esistenza della cartella thumbnails all'interno della categoria scelta.
* Se non esiste verrà creata
*/
if (!file_exists($thumb_path))
mkdir($thumb_path);
/**
* Apertura cartella e inserimento delle foto nell'array $photos solo se la foto è in formato jpeg
*/
if ($handle = opendir($photo_path)) {
while (false !== ($file = readdir($handle))) {
if ($file != '.' && $file != '..' && $file != "Thumbs.db" && $file != "thumbnails")
{
list($width, $height, $type) = getimagesize($photo_path.$file) or die("Impossible to get the file data");
if ($type == 2)
$photos[] = $file;
}
}
closedir($handle);
}
else
echo "Impossibile aprire la cartella";
/**
* Recupero della pagina passata via GET
*/
if (isset($_GET['page']))
$page_num = $_GET['page'];
else
$page_num = 1;
/**
* Resize delle foto da visualizzare nella pagina mantenendo le proporzioni.
*/
//Calcolo dell'indice di inizio delle foto da ridimensionare
if ($page_num == 1 || $MaxPhoto == 0)
$z = 0; //Indice della prima foto per il loop
else
$z = $MaxPhoto * ($page_num - 1);
//Controllo del numero di foto per pagina. Se $MaxPhoto = 0 verrrano ridimensionate tutte le foto in una volta sola.
$MaxPhoto = ($MaxPhoto == 0) ? count($photos) : $MaxPhoto;
//Calcolo dell'indice dell'ultima foto da ridimensionare
$last = (($MaxPhoto * $page_num) >= count($photos)) ? count($photos) : $MaxPhoto * $page_num;
//Inizio ciclo per il ridimensionamento della foto originale e della relativa anteprima
for ($i = $z; $i < $last; $i++)
{
//Ritorna le dimensioni della foto originale
list($width, $height, $type) = getimagesize($photo_path.$photos[$i]) or die("Impossible to get the file data");
//Calcolo delle nuove dimensioni per la foto originale.
if($width > $height)
{
$new_width = $SizePh;
$new_height = ($SizePh * $height) / $width;
$new_height = number_format($new_height, 0);
}
elseif($height > $width)
{
$new_height = $SizePh;
$new_width = ($SizePh * $width) / $height;
$new_width = number_format($new_width, 0);
}
elseif($height == $width)
{
$new_width = $SizePh;
$new_height = $SizePh;
}
//Controllo se è già stata ridimensionata la foto. In caso contrario procedo con il ridimensionamento
//La foto ridimensionata verrà sovrascritta a quella originale
if ($new_width != $width && $new_height != $height)
{
$destimg = imagecreatetruecolor($new_width,$new_height) or die("Problemi nelle creazioni dell'immagine");
$srcimg = ImageCreateFromJPEG($photo_path.$photos[$i]) or die("Problemi nell'aprire l'immagine");
ImageCopyResampled($destimg,$srcimg,0,0,0,0,$new_width,$new_height,ImageSX($srcimg),ImageSY($srcimg)) or die("Problemi nel ridimensionamento");
ImageJPEG($destimg, $photo_path.$photos[$i], $Compression) or die("Problemi nel salvataggio");
}
//Ritorna le dimensioni della foto originale utili per creare l'anteprima
list($width, $height, $type) = getimagesize($photo_path.$photos[$i]) or die("Impossible to get the file data");
//Calcolo delle dimensioni dell'anteprima
if($width > $height)
{
$new_width = $SizeTh;
$new_height = ($SizeTh * $height) / $width;
$new_height = number_format($new_height, 0);
}
elseif($height > $width)
{
$new_height = $SizeTh;
$new_width = ($SizeTh * $width) / $height;
$new_width = number_format($new_width, 0);
}
elseif($height == $width)
{
$new_width = $SizeTh;
$new_height = $SizeTh;
}
//Controllo se esiste già l'anteprima della foto.
//Se non esiste verrà creata e salvata nella cartella di destinazione delle anteprime
if (!file_exists($thumb_path."/".$photos[$i]))
{
$destimg = imagecreatetruecolor($new_width,$new_height) or die("Problemi nelle creazioni dell'immagine");
$srcimg = ImageCreateFromJPEG($photo_path.$photos[$i]) or die("Problemi nell'aprire l'immagine");
ImageCopyResampled($destimg,$srcimg,0,0,0,0,$new_width,$new_height,ImageSX($srcimg),ImageSY($srcimg)) or die("Problemi nel ridimensionamento");
ImageJPEG($destimg, $thumb_path."/".$photos[$i], $Compression) or die("Problemi nel salvataggio");
}
}
/**
* Stampa a video delle foto in base al numero di foto per pagina scelto.
*/
// Inizio del ciclo per stampare a video le foto
$i = 0;
foreach ($photos as $key => $value) {
//Creazione del titolo della foto dal nome della stessa
$title = explode('.' , $value);
$title = str_replace('_' , ' ' , $title[0]);
//Se l'indice iniziale è minore dell'indice della prima anteprima da mostrare, viene stampato a video solo il link nascosto della foto, utile per la lightbox
if ($i < $z)
echo "<a href=\"".$photo_path.$value."\" rel=\"lightbox[roadtrip]\" title=\"".$title."\" style=\"display:none;\"> </a>\n";
// Se l'indice iniziale è maggiore o uguale dell'inidce della prima foto da mostrare ed è anche minore dell'indice dell'ultima foto, allora stampo a video l'anteprima
elseif ($i >= $z && $i < $last)
echo " <a href=\"".$photo_path.$value."\" rel=\"lightbox[roadtrip]\" title=\"".$title."\"><img src=\"".$thumb_path."/".$value."\" title=\"".$title."\" border=\"0\" alt=\"".$title."\" class=\"img-indice\" /></a> \n";
// Se l'indice iniziale è maggiore o uguale dell'ultima foto da mostrare, allora stampo solo il link nascosto per la lightbox
elseif ($i >= $last)
echo "<a href=\"".$photo_path.$value."\" rel=\"lightbox[roadtrip]\" title=\"".$title."\" style=\"display:none;\"> </a>\n";
$i++;
}
/**
* Paginazione dell'array $photos
*/
$maxPage = ceil(count($photos)/$MaxPhoto); //Conteggio delle pagine
$self = $_SERVER['PHP_SELF'];
//Navbar
$nav = '';
for($page = 1; $page <= $maxPage; $page++) {
if ($page == $page_num) // Se siamo nella pagina corrente, allora non verra mostrato il link allla stessa pagina
$nav .= " $page ";
else // altrimenti viene mostrato
$nav .= " <a href=\"".$self."?".$link_cat."page=".$page."\" title=\"Pagina $page di $maxPage\">$page</a> ";
}
//Previous Link
if ($page_num > 1) {
$page = $page_num - 1;
$prev = " <a href=\"".$self."?".$link_cat."page=".$page."\" title=\"Pagina $page di $maxPage\"><< precedente</a> ";
}
else {
$prev = ''; // Il link non verrà mostrato se siamo nella prima pagina
}
//Next Link
if ($page_num < $maxPage) {
$page = $page_num + 1;
$next = " <a href=\"".$self."?".$link_cat."page=".$page."\" title=\"Pagina $page di $maxPage\">successivo >></a> ";
}
else {
$next = ''; // Il link non verrà mostrato se siamo nell'ultima pagina
}
//Mostra i Links di paginazione
echo "<br />Pagine: ", $prev . $nav . $next ;
?>
fotogallery.php
All'interno della quale, nel tag head, vanno inseriti i link relativi alla lightbox (che, se volete la versione più aggiornata, potete scaricare QUI):Codice PHP:
<?php include 'script.fotogallery.php'; ?>
A questo punto non vi resta che mandare un link alla pagina fotogallery.php. Se avete diviso le foto in tante cartelle (che devono stare dentro la cartella principale settata con la variabile $DirGallery), aggiugete al link il valore cat1 più il nome della cartella. Se le categorie sono a loro volta divise in altre sottocategorie dovete passare anche il vaolre cat2 più il nome della sottocartella (e così via per tutte le sotto cartelle all'infinito).Codice HTML:<script type="text/javascript" src="lightbox/js/prototype.js"></script> <script type="text/javascript" src="lightbox/js/scriptaculous.js?load=effects,builder"></script> <script type="text/javascript" src="lightbox/js/lightbox.js"></script> <link rel="stylesheet" href="lightbox/css/lightbox.css" type="text/css" media="screen" />
Se non avete categorie quindi il link punterà semplicemente alla pagina fotogallery.php, altrimenti sarà una cosa del genere:
Spero vi sia utile!Codice:<a href="fotogallery.php?cat1=NomeCartella&cat2=NomeSottoCartella&cat3=NomeSottoSottoCartella">Fotogallery</a>
Ciao!