par
micetf » 13 juin 2009, 12:04
Il n'y a pas de raison pour que tu ne puisses pas le faire.
Dans la boucle où tu affiches tes dossiers (foreach($dossier as $lien)),
pour chaque dossier, tu listes les images
qu'il contient comme tu l'as fait pour le dossier racine,
Note : Peut-être pourrait tu créer une fonction lireDossier($dir_nom), pour éviter de réécrire du code ?
puis au lieu d'afficher le nom du répertoire ($lien),
tu affiches une des images : <img src="'.$dir_nom.'/'.$lien.'/'.
uneImageDuSousDossier.'"/>.
Voilà ce que j'ai testé très rapidement :
// 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="affImgDir.php?dir='.$dir_nom.'/'.$lien.'"><img width="30px" height="30px" src="'.$dir_nom.'/'.$lien.'/'.$infosSousDossier['fichier'][0].'"/></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é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>";
}
Il faut nettoyer et optimiser ce code,
mais, en tout cas, ça prouve que ce que tu veux faire est possible.
Fred
Il n'y a pas de raison pour que tu ne puisses pas le faire.
Dans la boucle où tu affiches tes dossiers (foreach($dossier as $lien)),
pour chaque dossier, tu listes les images
qu'il contient comme tu l'as fait pour le dossier racine,
Note : Peut-être pourrait tu créer une fonction lireDossier($dir_nom), pour éviter de réécrire du code ?
puis au lieu d'afficher le nom du répertoire ($lien),
tu affiches une des images : <img src="'.$dir_nom.'/'.$lien.'/'.[b]uneImageDuSousDossier[/b].'"/>.
Voilà ce que j'ai testé très rapidement :
[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="affImgDir.php?dir='.$dir_nom.'/'.$lien.'"><img width="30px" height="30px" src="'.$dir_nom.'/'.$lien.'/'.$infosSousDossier['fichier'][0].'"/></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é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>";
}
[/php]
Il faut nettoyer et optimiser ce code,
mais, en tout cas, ça prouve que ce que tu veux faire est possible.
Fred