Page 1 sur 1
Afficher la première photo d'un dossier
Posté : 03 juil. 2006, 01:59
par jpsartre
Bonjour,
J'ai ce code qui m'affiche le contenu d'un dossier :
if ($voir == 1) {
$rep = "../abonnes/images/".$id."/";
$numimage = 1;
$dir = opendir($rep);
while ($f = readdir($dir)) {
if(is_file($rep.$f)) {
echo "<div class=\"flottante\">";
echo "<div><a href=\"ajout_photo.php?voir=1&vignette=1&newname=".$f."&id=".$id."&numero=".$numimage++."\"><img src=\"../abonnes/images/".$id."/".$f."\" width=\"120\" height=\"120\" border=0></a></div>";
echo "<div class=\"fd-gris_fonce\">".$f."</div>";
echo "</div>";
}
}
}
else
{
echo " ";
}
Mais j'aimerais avoir la possibilité de faire en sorte qu'il m'affiche seulement la première image. J'ai essayé d'enlever la boucle mais ça ne marche pas.
Si quelqu'un peut m'aider,
Merci
Posté : 03 juil. 2006, 07:36
par Cyrano
Procède autrement. De la manière dont tu t'y prends, la première condition ne bloquera pas le nombre de tours de boucles. Proposition:
<?php
$rep = "../abonnes/images/".$id."/";
$numimage = 1;
$dir = opendir($rep);
/* On crée un compteur */
$i = 1;
while ($f = readdir($dir))
{
if(is_file($rep.$f))
{
/* On vérifie le compteur, s'il dépasse le maximum souhaité, on quitte la boucle */
if($i > 1)
{
break;
}
else
{
echo "<div class=\"flottante\">";
echo "<div><a href=\"ajout_photo.php?voir=1&vignette=1&newname=". $f ."&id=". $id ."&numero=". $numimage++ ."\"><img src=\"../abonnes/images/". $id ."/". $f ."\" width=\"120\" height=\"120\" border=0></a></div>";
echo "<div class=\"fd-gris_fonce\">".$f."</div>";
echo "</div>";
}
}
}
?>
Posté : 03 juil. 2006, 10:40
par jpsartre
Merci pour ton aide mais je n'ai pas réussi à le faire marcher.
Et j'ai essayé autre chose de plus court pour n'afficher que la première photo du dossier (si dossier existe alors vérifier que photo existe, si photo existe afficher la première, sinon afficher la photo par défaut :
$rep = "../annonces/".$Record->id."/";
$dir = @opendir($rep);
$f = @readdir($dir);
if(is_file($rep.$f)) {
echo "<img src=\"../annonces/".$Record->id."/".$f."\" alt=\"photo\" width=\"60\" height=\"60\" class=\"image\" />";
}
else
{
echo "<img src=\"../images/image.gif\" alt=\"photo\" width=\"60\" height=\"60\" align=\"top\" class=\"image\" />";
}
Mais ça ne marche pas non plus,
dans ce cas j'ai toujours la photo par défaut.
Si vous pouvez m'aider,
Merci d'avance
Posté : 03 juil. 2006, 12:45
par Ryle
Il te faut nécessairement passer par la boucle, dans la mesure ou tu n'auras pas nécessairement un fichier en premier élément (il existe deux dossiers protégés du system qui sont "." et "..")
En revanche, il te suffit après avoir affiché le premier fichier que tu as trouvé utiliser l'instruction break pour sortir de ta boucle. La solution de
Cyrano est interessante car elle te permet de paramétrer le nombre de fichier que tu veux récupérer (il a juste oublié d'incrémenter $i dans sa boucle

)
Mais si tu ne veux qu'un seul fichier, tu peux simplement ajouter le break dans ton premier code :
while ($f = readdir($dir)) {
if(is_file($rep.$f)) {
echo "...";
break;
}
}
Posté : 03 juil. 2006, 17:56
par jpsartre
Merci pour votre aide,
J'ai maintenant ce code :
$rep = "../annonces/".$Record->id."/";
$dir = @opendir($rep);
while ($f = @readdir($dir)) {
if(is_file($rep.$f)) {
echo "<img src=\"../annonces/".$Record->id."/".$f."\" alt=\"photo\" width=\"60\" height=\"60\" align=\"top\" class=\"image\" />";
break;
}
else
{
echo "<img src=\"../images/image.gif\" alt=\"photo\" width=\"60\" height=\"60\" align=\"top\" class=\"image\" />";
}
}
Il me semblait incorrect parceque j'avais l'impression que l'image par défaut ne pouvais s'afficher, et, surprise, j'ai deux fois la photo par défaut qui s'affiche et ensuite la photo du dossier si présente.
Si quelqu'un peut m'expliquer,
Merci encore, c'est déjà chouette de voir quelque chose à l'écran

Posté : 03 juil. 2006, 18:12
par jpsartre
Là j'ai essayé un autre système :
$nb_f = 0;
$rep = "../annonces/".$Record->id."/";
$opdir = opendir($rep);
while ($c = readdir($opdir))
{
if (!is_dir($c)) $nb_f++;
}
closedir($opdir);
if ($nb_f > 0) {
echo "<img src=\"../annonces/".$Record->id."/".$c."\" alt=\"photo\" width=\"60\" height=\"60\" align=\"top\" class=\"image\" />";
}
else
{
echo "<img src=\"../images/image.gif\" alt=\"photo\" width=\"60\" height=\"60\" align=\"top\" class=\"image\" />";
}
C'est juste que je n'arrive pas à récupérer le nom du premier fichier du dossier.
Si quelqu'un peut m'aider,
Merci
Posté : 03 juil. 2006, 20:53
par jpsartre
Merci pour vos indications, le code fonctionne :
<code> $rep = "../annonces/".$Record->id."/";
$dir = @opendir($rep);
if ($dir) {
while ($f = @readdir($dir)) {
if(is_file($rep.$f)) {
echo "<img src=\"../annonces/".$Record->id."/".$f."\" alt=\"photo\" width=\"60\" height=\"60\" align=\"top\" class=\"image\" />";
break; }
}
}
else
{
echo "<img src=\"../images/image.gif\" alt=\"photo\" width=\"60\" height=\"60\" align=\"top\" class=\"image\" />";
}</code>
A bientôt
Posté : 04 juil. 2006, 07:54
par Ryle
j'ai deux fois la photo par défaut qui s'affiche et ensuite la photo du dossier si présente.
Si quelqu'un peut m'expliquer
C'est parce que dans ta boucle, tu commences par lire les deux dossiers cachés "." et "..". Comme il ne s'agit pas de fichiers, il rentrait dans le else et t'affichait ton image par défaut avant de trouver la premiere image du dossier

Posté : 04 juil. 2006, 16:38
par jpsartre
Merci pour l'explication,
Sinon, le code marche mais il ne me paraît pas très net par exemple à cause des @ pour cacher les messages d'erreurs et de mes \ en peu partout,
Si quelqu'un peut me conseiller
Merci
Posté : 04 juil. 2006, 16:53
par Ryle
Pour les @ suffit de les virer et de t'assurer que $rep est bien un dossier, et puis pour les \ personnellement j'ai tendance à mettre mes chaines html entre apostrophes pour ne pas avoir à protéger les guillemets qui sont généralement beaucoup plus nombreuses
Suggestion :
$rep = "../annonces/".$Record->id."/";
if(is_dir($rep)) {
$dir = opendir($rep);
while ($f = readdir($dir)) {
if(is_file($rep.$f)) {
echo '<img src="../annonces/'.$Record->id.'/'.$f.'" alt="photo" width="60" height="60" align="top" class="image" />';
break;
}
}
}
else {
echo '<img src="../images/image.gif" alt="photo" width="60" height="60" align="top" class="image" />';
}
Posté : 04 juil. 2006, 17:14
par jpsartre
vraiment bien comme ça, et je ne connaissais pas le is_dir, bien pratique, et aussi le coup des guillemets

comme on dit, l'enfer est pavé de bonnes intentions
Je trouve toutes les réponses à mes questions sur ce forum , c'est vraiment super d'aider les gens comme ça,
Merci encore
A bientôt
Posté : 04 juil. 2006, 17:22
par Ryle
Y a pas de quoi
Je trouve toutes les réponses à mes questions sur ce forum
Et encore, t'as pas essayé de poser des questions du style "que faire à manger ce soir ?" ou "comment soigner mes géraniums ?", mais je suis certain que tu aurais des réponses interessantes également 