Faire apparaître la première photo d'un dossier

Eléphant du PHP | 161 Messages

23 mars 2017, 12:09

Bonjour à tous,

Je suis en train d'élaborer l'administration d'un site internet de A à Z, et je ne parviens à faire quelque chose :
Je suis en train de permettre à mon client de gérer ses albums photos et photos dans une galerie, et, lorsqu'il s'agit d'un répertoire|dossier, plutôt que d'afficher une image d'album photo par défaut -ce que je ne trouve pas très cohérent avec le travail très rigoureux fourni en matière de design ; j'aimerai afficher la première image comprise dans l'album même (on peut voir cela sur facebook par exemple). et puis je jouerai ensuite moi même avec le design (je pensais rajouter un attribut class et le travailler).

Toutefois, après plusieurs tentatives, je ne parviens pas à faire ce que je veux...

Voici mon code (je pense que le PHP devrait suffire) :

<?php
$chemin = './pics/';
$repertoire = opendir($chemin);
while($elements = readdir($repertoire)) {
$liste[] = $elements;
}
natsort($liste);
$nbcol=5;
$liste = array_values($liste);
$nombre = count($liste);
if($nombre != 0)
{
echo "<table class=\"gallery\">";
for ($i=0; $i<$nombre; $i++) {
if($i%$nbcol==0){echo '<tr>';}
if ($liste[$i] != "." && $liste[$i] != "..") {
if(is_dir($chemin.$liste[$i])){
echo "<td><a href=\"details-album.php?name=".$liste[$i]."\">
<div class=\"lienAlbum\">
<img src=\"../img/rep.png\" alt=\"Image\" width=\"200\" height=\"200\">
</div>
<div class=\"infosAlbum\"><h5>".$liste[$i]."</h5></div></a></td>";
}
else echo "<td><img src=\"./pics/". utf8_encode($liste[$i]) ."\" alt=\"Image\" width=\"200\" height=\"200\" /></td>";
}
if($i%$nbcol==($nbcol-1)){echo '</tr>';}
}
echo "</table>";
}
else echo "<div class=\"textInfo valign-wrapper\"><p>- Aucune média à afficher -</p></div>";
if (isset($erreur)) echo "<br />" , $erreur;
closedir ($repertoire);
?>

(Je ne sais pourquoi, l'indentation ne fonctionnait à priori par correctement, j'ai donc mis le code en texte pour éviter d’abîmer les yeux !)

Comme je vous le dis, j'ai essayé plusieurs choses (scandir, des boucles while..), mais cela est sans succès.. Du coup, j'ai préféré laissé le code original ici.
Pourriez-vous m'aider s'il vous plaît ?
Modifié en dernier par lucieemtl le 23 mars 2017, 12:32, modifié 1 fois.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

23 mars 2017, 12:26

Bonjour Lucieemtl,

Pourrais-tu modifier le titre de ton message pour retirer les crochets et les majuscules, stp ?
Cela permettra une meilleure lisibilité de la liste des sujets.
Quand tout le reste a échoué, lisez le mode d'emploi...

ynx
Mammouth du PHP | 586 Messages

24 mars 2017, 15:18

Salut,

Tu peux utiliser la fonction glob() pour récupérer les fichiers d'un dossier.
Dans la boucle qui parcours les dossiers gallerie, tu peux donc utiliser cette fonction pour en récupérer les photos et vérifier si le dossier contient au moins une photo. Si oui on l'affiche, si non on affiche l'image par défaut.

Un exemple simplifié (code non testé, le chemin dans la fonction glob() et dans l'attribut src de l'image sera p-e à corriger) :
$filesImage = glob($chemin . $liste[$i] . '/*.{jpg,png,JPG,PNG}', GLOB_BRACE);
if (isset($filesImage[0])) {
    echo '<img src="' . $filesImage[0] . '" alt="Nom gallerie">';
} else {
    echo '<img src="../img/rep.png" alt="Nom gallerie">';
}

Bonne journée,