Galerie d'image simple et facile a integrer a vos pages existantes

Soyez le premier à donner votre avis sur cette source.

Vue 44 589 fois - Téléchargée 2 410 fois

Description

Ce script permet de crrer une galerie d'image. Pour cela il suffit de creer un dossier dans lequel vous placerez vos sous dossier images. Les noms de dossiers devront etre explicite quand au contenu, car nous allons generer une liste de lien hypertext dont les noms seront ceux des sous dossiers.
Ensuite, il faudra integrer une page index a vos sous dossier image. Ce fichier index va s'occuper de tout le reste. Verifier combien de fichiers images se trouve dans son dossier, verifier si un dossier tb existe dans le dossier et le creer le cas echéant. Verifier s'il existe pour chaque image sa miniature dans le dossier tb. Ensuite il va afficher un nombre X de miniatures suivant les valeurs contenu dans la page index.
Si le dossier contient plus d'image qu'il n'en affiche, il va genrer autant de liens de page que necessaire.
Voila... tout simple, avec seulement 2 fichiers a rajouter. Le script s'occupe de tout le reste...

Source / Exemple :


//premiere page, qui va lister tout les sous-dossiers d'un répertoire choisi

<tr>
<td colspan="3" id="borduretitre"><h1>Liste des MANGAS disponible</h1></td> //l'id du tableau correspond à mon fichier css, vous pouvez supprimer la mise en forme du tableau
</tr>
<tr>
<td height="21" id="bordure"></td> // idem, vous pouvez supprimer la mise en forme de la cellule
</tr>
  <tr>
    <td colspan="3" id="tableau" align="center"> // etc
<?php
// la fonction qui suit permet de lister les sous répertoires, il est possible de demander a la fonction de lister les sous dossiers, les sous sous dossiers, etc etc, mais ici nous ne le voulons pas
function filelist ($startdir="./", $searchSubdirs=1, $directoriesonly=0, $maxlevel="all", $level=1) {
    $ignoredDirectory[] = ".";
    $ignoredDirectory[] = "..";
    $ignoredDirectory[] = "_vti_pvt";
    $ignoredDirectory[] = "_vti_cnf";
    $ignoredDirectory[] = "_private";
    global $directorylist; 
    if (is_dir($startdir)) {
        if ($dh = opendir($startdir)) {
            while (($file = readdir($dh)) !== false) {
                if (!(array_search($file,$ignoredDirectory) > -1)) {
                 if (filetype($startdir . $file) == "dir") {
                      $directorylist[$startdir . $file]['dir'] = 1;
                      $directorylist[$startdir . $file]['name'] = $file;
                   }}}
           closedir($dh);
}}
return($directorylist);
}
$files = filelist("images/",1,1); // nous demandons de scanner le repertoire images/ les valeurs qui suivent permetent de preciser si on veut compter les sous dossiers, enfin bref, on met tout a 1 ici
foreach ($files as $list) {
	echo "<a href=?page=images/" . $list['name'] . "/index>" . $list['name'] ."</a><br>"; // on affiche la liste sous forme de lien
}?>
</td>
</tr>
// fin de la premiere page, vous pouvez l appeler explorermachin.php, notez que vous devrez appeler cette page dans une de vos propres page avec un include et un lien genre <a href=?page=explorermachin>images de machin</a> si vous mettez la page explorermachin dans le meme dossier que votre page qui appelera l explorermanga tout ce passera bien comme ca

//la page index qui va faire tout le boulot, a noter que la page explorermanga va afficher la page index toujour dans votre page dans l'include que vous aurez creer.

<tr>
<td colspan="3" id="borduretitre"><h1><?php echo str_replace('images/', '',str_replace('/index', '', $_GET['page']));?></h1></td>
</tr>
<tr>
<td height="21" id="bordure"></td>
</tr>
<tr>
 <td colspan="3" id="tableau" align="center">
<table align="center"><tr>
<?php
$extensions_autorisees = array('jpg','jpeg','gif','png');
$totalimg = 0;
$page = str_replace('index', '', $_GET['page']); // on recupere le chemin du fichier index et on enleve index du nom pour en avoir que le chemin repertoire
$dir = $page;
if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
$ext = substr(strrchr($file, "."), 1);
if (in_array(strtolower($ext),$extensions_autorisees)){
           $totalimg ++;
}}}
        closedir($dh);
}
if (isset($_GET['id'])) // le  id permet de faire savoir à la page index quelle page on affiche
$id = $_GET['id'];
else
$id = 1; // si l'id ne contient rien, il s'agit alors de la premiere page
$lmax = 5; // nombre d'image par ligne
$hmax = 4; // nombre de colonnes max par page
$nbpagemax = ceil($totalimg / ($lmax * $hmax)); //on calcul le nombre de page max
function miniature($picture,$rep,$fext) // début de la fonction qui genere les miniatures
 {
  if (file_exists($rep . "tb/mini_" . $picture) == false) {
	if ($fext == "jpg")	{ $source = imagecreatefromjpeg($rep . $picture);}
	elseif ($fext == "gif")	{ $source = imagecreatefromgif($rep . $picture);}
    else { $source = imagecreatefrompng($rep . $picture);}
	$destination = imagecreatetruecolor(200, 150); // On crée la miniature vide
    $largeur_source = imagesx($source);
    $hauteur_source = imagesy($source);
    $largeur_destination = imagesx($destination);
    $hauteur_destination = imagesy($destination);
    imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source);
    imagejpeg($destination, $rep . 'tb/mini_' . $picture);
    }
 } //fin de la fonction
$page = str_replace('index', '', $_GET['page']); // on recupere le chemin du fichier index et on enleve index du nom pour en avoir que le chemin repertoire
$dir = $page;
if (file_exists($dir . "tb/") == false) { //on verifie ensuite si on possede un dossier tb dans le dossier image
mkdir ($dir . "tb/", 0777); // si ce nest pas le cas, on creer le dossier
}
if ($id > 1)
$nombreimage = ($id - 1) * ($lmax * $hmax); //si ID est superieur a 1 on reprend le compte de la variable la ou elle en etait
else
$nombreimage = 0;
$verifnbimg = 0;
$intervalle = 0;
$nbligne = 0;
$nbpage = 1;
// 2 a la variable, ce qui correspond au fichier index et le repertoire tb, attention tout de meme a ne pas avoir de fichier thunbs.db dans 
//le repertoire sous peine de fausser le compte
if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
$ext = substr(strrchr($file, "."), 1);
if (in_array(strtolower($ext),$extensions_autorisees)){
if ($nbligne !== $hmax AND $verifnbimg == $nombreimage AND $nombreimage <= $id * ($lmax * $hmax)) { //on verifie qu on affiche bien les images en fonction de la page
miniature($file, $dir, $ext); // on verifie avec la fonction que la miniature du fichier existe, sinon on la creer
//les lignes qui suivent affiches les miniatures, son nom, son extension et sa taille
	if ($ext == "jpg")	{ $source = imagecreatefromjpeg($dir . $file);}
	elseif ($ext == "gif")	{ $source = imagecreatefromgif($dir . $file);}
    else { $source = imagecreatefrompng($dir . $file);}
    echo "<td width=170 align=center>
    <a href=" . $dir . $file . " target=_blank><img src=" . $dir . "tb/mini_" . $file . " width=150 height=100 border=0></a>
    <br><img width=30 height=30 src=images/" . $ext . ".png>
    Nom: " . str_replace("." . $ext, '', $file) . "
    <br> taille : " . ceil(filesize($dir . $file)/1000) . " Ko<br>
	" . imagesx($source) . " x " . imagesy($source) . "</td>";
//fin de l affichage des miniatures
        if ($nombreimage < $totalimg) {
        $nombreimage ++;
}
    $intervalle ++;
// cette ligne permet de passer a la colonne suivante apres avoir affiche x images
        if ($intervalle == $lmax) { $nbligne ++; echo "</tr><tr>"; $intervalle = 0; } 
   }
$verifnbimg ++;
}}
        closedir($dh);
    }
}
// maintenant on va creer autant de page qu'il faudra pour afficher toutes les images
if ($nbpagemax > 1) { // si le nombre d image ne depasse pas le nombre max par page il est inutile d afficher les pages
echo "<tr><td align=right  colspan=" . $lmax .">Pages";
while ($nbpage < $nbpagemax) {
echo " <a href=?page=" . $dir ."index&id=" . $nbpage . ">" . $nbpage . ",";
$nbpage++; }
echo " <a href=?page=" . $dir ."index&id=" . $nbpage . ">" . $nbpage; } // on repete encore une fois l instruction avant d afficher la
// derniere page pour eviter de mettre la , a la fin du dernier numero
echo "<tr><td align=right  colspan=" . $lmax .">images : " . $nombreimage . "/" . $totalimg . "</td></tr>"; 
//petit plus, on affiche combien d'image est affiché par rapport au nombre max du dossier
?> 
</tr></table></td></tr>

//fin de la page index, j'ai essayé de la détailler un peu...

Conclusion :


FONCTIONNEMENT:
Je vais essayer de faire simple. Prenez une page de votre site dans lequel vous voulez afficher votre galerie d'image.
Imagions que vous ayez un cadre dans lequel vous voulez afficher la galerie.
Dans le cadre il faudra y entrer votre include. vous pouvez directement afficher la page explorermanga, ou bien utiliser le cadre pour afficher diverses autres pages, comme vos news, etcetc...
Au quel cas il faudra alors creer un lien dans votre page pour appeler l'explorateur.

Par defaut, mettez vos images dans un dossier images/ que vous mettrez dans le dossier qui contient votre page et la page de l'explorateur. (j'appel ca un explorateur a tord car il permet seulement de lister les sous repertoires du dossier images)

Dans chaque sous dossier que vous mettrez, ajouter une page index. Qu'importe le nom du sous répertoire, et qu'importe le nombre, copiez collez simplement la page index dans chaque sous répertoire.
Pour les plus débutants (comme moi, je mettrais un exemple dans le zip)

Bug connu: Aucun à ma connaissance, simplement, pour les noms d'image, ne mettez pas d'espace dans vos noms, si vous mettez des images du style: DBZ 01.jpg vous aurez des problemes, mettez DBZ01.jpg
Si vous remplacez vos images en gardant le nom de l'image remplacé, les miniatures ne seront pas remplacer. Dans le doute, supprimez simplement le répertoire TB dans le dossier image modifié.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

foyout
Messages postés
25
Date d'inscription
jeudi 25 janvier 2007
Statut
Membre
Dernière intervention
8 novembre 2008

Me revoila :-)

J'ai réussi a classer et afficher les noms par ordre alphabétique, donc je suis content, merci.

Par contre, j'ai encore un souci. Cette fois ce sont les photos que je voudrais classer par ordre alphabétiques de leur noms. Y'a un moyen de faire ça ?
Merci d'avance

Foyout
foyout
Messages postés
25
Date d'inscription
jeudi 25 janvier 2007
Statut
Membre
Dernière intervention
8 novembre 2008

bon, merci deja pour tout ca. Je vais essayer de me debrouiller.
darknessneo
Messages postés
45
Date d'inscription
samedi 6 novembre 2004
Statut
Membre
Dernière intervention
9 septembre 2007

ca remplace la partie du code qui scan le répertoire image.
Le truc c'est qu'il faut retravailler un peu le code de chaque coté et de faire aussi un petit code suplémentaire pour afficher l'array.
Et j'ai pas le temps de mettre ce code en ligne.
foyout
Messages postés
25
Date d'inscription
jeudi 25 janvier 2007
Statut
Membre
Dernière intervention
8 novembre 2008

merci de m'aider.
Par contre, je suis pas très doué. Il faut que je mette ce code ou ?
darknessneo
Messages postés
45
Date d'inscription
samedi 6 novembre 2004
Statut
Membre
Dernière intervention
9 septembre 2007

Ils se mettent de façon aléatoire, je n'ai jamais vraiment compris comment se faisait le classement.

Le problème c'est que l'on affiche le contenu du répertoire image en temps réel, c'est à dire qu'on affiche les dossiers en même temps qu'on les scans.

Il est en effet possible de trier par ordre mais il faut alors d'abord mettre tout le contenu du répertoire dans un array. Ensuite, il faut afficher le contenu de l'array.
Ainsi, il est possible de trier le contenu de l'array.

Voici une petite modif:

<?php
$dir = 'images/';
$fichier = array();
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
if(filetype($dir . $file) == "dir" AND $file !== "." AND $file !== ".." AND $file !== "tb" AND $file !== "_notes"){
$file2 = str_replace("_", " ", $file);
$debutJournee = mktime(0,0,0,date("m",filemtime('images/'.$file)),date("d",filemtime('images/'.$file)),date("Y",filemtime('images/'.$file)));
$secAvtDeb = filemtime('../'.$type.'/'.'001_v1.0_compil.doc.librairie.jpg'.'/'.$id.'/'.$file)-$debutJournee;
$diff = time() - filemtime('images/'.$file);
$nbJr= intval($diff/(24*3600));
if( (($diff%(24*3600))+$secAvtDeb) > (24*3600) ) $nbJr++;
$jrs = ($nbJr < 31) ? '' : '';
$file = '[images/'.$file.'/index.php '.$file2.'] '.$jrs;
array_push($fichier, $file);
}}
closedir($dh);
}
}
natcasesort($fichier);
?>

Voila, normalement... je dis bien... normalement... dans l'array $fichier se trouve alors dans l'ordre alphabétique.
Avec mon petit truc en plus, il y aura même un logo new pour chaque nouveau dossier image datant de moins de 30 jours.

Par contre il te faudra afficher le contenu de l'array via une boucle par exemple.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.