8796 sujets

Développement web côté serveur, CMS

Bonjour,
Depuis quelque temps je suis en train de refaire intégralement mon site internet.
J’en suis au niveau le plus important du site qui est la galerie photo.

Actuellement j'utilise zen photo qui est une superbe galerie mais qui malheureusement ne s'intègre plus contrairement a ses anciennes version dans un Template d'un site existant.

Je souhaiterai donc créé une galerie du même genre mais en beaucoup moins évolué évidement.

En gros j'ai un répertoire albums dans lequel se trouve d'autres répertoires qui se retrouveront être une galerie par répertoire.

Je souhaite donc scanner grâce a PHP mon répertoire et ses sous répertoire afin de faire ma galerie et l'afficher leur contenu (les photos).

Jusqu’a présent j'arrive à scanner mes répertoire et sous répertoire et j'affiche bien mes photos.

Se que je souhaiterai faire c'est enregistrer le nom des répertoires et photos automatiquement dans MySQL afin de pouvoir ajouter des commentaires sur les galeries et sur les photos.
--> C’est la que je bloque.

Existe-t-il un moyen pour que dans une table (albums) j'enregistre le nom du répertoire, le nombre de fichiers qu'il contient et un champ ou je pourrais enregistrer une description ?
Modifié par fabrice88 (30 Jun 2009 - 19:57)
À un moment tu récupères bien ces données là (nom de l'album, nb fichiers...), non ?

Suffit de faire un "insert".

(un peu fatigué, donc je vais pas pouvoir deviner le code de ton script)
Oui un insert vers MySQL mais la requête ne risque pas d'être faite à chaque fois qu'un internaute se connecte sur la page galerie et du fait ajouter plusieurs fois le même nom de répertoire ?

j'imagine ma table :
id(clé) - albums(nom des repertoires) - commentaire (afin que j'ajoute un descriptif de la galerie)

voilà mon code à l'heure actuelle :


<?php 

// Fonction pour parcourir les dossiers 
function lireDossier($dir_nom) { 
    $dir = opendir($dir_nom) or die('Erreur de listage : le répertoire n\'existe pas'); // on ouvre le contenu du dossier courant 
    $fichier= array(); // on déclare le tableau contenant le nom des fichiers 
    $dossier= array(); // on déclare le tableau contenant le nom des dossiers 

    while($element = readdir($dir)) { 
        if($element != '.' && $element != '..') { 
            if (!is_dir($dir_nom.'/'.$element)) {$fichier[] = $element;} 
            else {$dossier[] = $element;} 
        } 
    } 

    closedir($dir); 
    return array('dossier'=>$dossier,'fichier'=>$fichier); 
} 


$dir_nom = (isset($_GET['dir'])) ? $_GET['dir'] : '../images'; // dossier listé (pour lister le répertoir courant : $dir_nom = '.'  --> ('point') 

// Récupérations des infos sur le dossier racine. 
$infosDossier = lireDossier($dir_nom); 
$dossier = $infosDossier['dossier']; 
$fichier = $infosDossier['fichier']; 

if(!empty($dossier)) { 
    sort($dossier); // pour le tri croissant, rsort() pour le tri décroissant 
    echo "Liste des dossiers accessibles dans '$dir_nom' : \n\n"; 
    echo "<br/><ul>"; 
        foreach($dossier as $lien){ 
            // Récupération des infos sur un sous dossier 
            $infosSousDossier=lireDossier($dir_nom.'/'.$lien); 
            // Pour choisir aléatoirement une de ses images 
            shuffle($infosSousDossier['fichier']); 
            // ATTENTION : Je n'ai pas traité le cas des sous dossiers vides 
            echo '<br/><li><a href="test-galerie.php?dir='.$dir_nom.'/'.$lien.'"><img width="30px" height="30px" src="'.$dir_nom.'/'.$lien.'/'.$infosSousDossier['fichier'][0].'"/></a>
			<a href="test-galerie.php?dir='.$dir_nom.'/'.$lien.'">'.$lien.'</a>
			
			
			</li><br/>'; 
        } 
    echo "</ul><br/>"; 
} 

if(!empty($fichier)){ 
    sort($fichier);// pour le tri croissant, rsort() pour le tri décroissant 
    echo "Liste des fichiers/documents accessibles dans '$dir_nom' : \n\n"; 
    echo "\t\t<ul>\n"; 
        foreach($fichier as $lien) { 
            $size = GetImageSize("$dir_nom/$lien"); 
             
    //Largeur maximale de l'image pour la cr&eacute;ation des miniatures  
    $largeur_maxi = 100;  
    if ($size[0] > $largeur_maxi)  
        {  
            $width = $largeur_maxi;  
            $theight = ($size[0]/$largeur_maxi);  
            $height = ($size[1]/$theight);  
        }  
    else  
        {  
            //Sinon on garde la taille originale  
            $width = $size[0]; $height = $size[1];  
        }  
            echo "\t\t\t<li><a href=\"$dir_nom/$lien \"><img src=\"$dir_nom/$lien \" width=".$width." height=".$height." alt=\"Photo des Vosges : $lien\" /></a></li>\n"; 
             
            echo  $size[0]. 'x' .$size[1] ; 
        } 
    echo "\t\t</ul>"; 
 } 


?> 
fabrice88 a écrit :
Oui un insert vers MySQL mais la requête ne risque pas d'être faite à chaque fois qu'un internaute se connecte sur la page galerie et du fait ajouter plusieurs fois le même nom de répertoire ?


Tu n'as pas une page réservée à l'administration ?

Sinon le mieux serait d'exécuter le code une fois et ensuite de créer (ou d'ajouter) un gestionnaire d'upload de photo.
Tant que le fichier dans lequel ce code est stocké n'est pas accessible par un visiteur ça devrait aller (faudrait pas non plus laisser le fichier sur le serveur pour autant une fois la manip effectuée).

Je n'ai pas vraiment d'idée sur "comment faire inserer tout ça dans une base de données" de manière efficace, enfin ça me prendrait trop de temps.

En gros il faut créer un table pour les dossiers, une pour les photos et une pour la relation dossier/photo.

Pour chaque dossier inséré dans la base il faut indiquer qui est le père (avec l'id du père déjà inséré, la racine aura un id_père = 0) et inséré le nom.

Ensuite lors de l'insertion des photos il faut ajouter dans la table dossier/photo quel dossier la contient (en insérant le couple id_dossier/id_photo)

Voilà l'algo est fait, je peut aider pour le code mais pas le faire entièrement (pas vraiment le temps ni l'envie)