Galerie de photo en trois colonnes

Résolu
mont_dani Messages postés 249 Statut Membre -  
mont_dani Messages postés 249 Statut Membre -
Bonsoir

Je prépare un mur de photo pour ma web sans utiliser de base de donnée.

J'ai trouver un script qui me conviens presque, surtout que le php et moi nous ne nous connaissons pas très bien.

En effet ce script positionne 4 photos sur une ligne <TD> de la table.
Ce qui fait qu'¡il existe des espaces vides entre deux lignes quand change le format de la photo de portrait a paysage.

Je voudrai savoir si quelqu'un pourrait m'aider pour pouvoir inclure dans le <TD> le nombre d'imge indiqué par $nb_image

Voici mon code

<?php
$files = glob("../../image/galeria/11121*.*"); // toute les images qui commence par 11121
$compteur = count($files); // nombre total d image
$nb_colonne=3; // nombre de colonnes a l'affichage
$nb_image= ceil(($compteur) / ($nb_colonne));// nombre d'image par colonne arrondi au sup

?>
 
<table>
<?php
    for ($i = 0; $i < $compteur; $i+=3) { // On augmente de 3 à chaque passage de la boucle et elle tourne tant qu'on a pas atteint le compte
        echo '<tr>';
         
        for ($j = $i; $j < ($i + 3); $j++) { // Les quatre prochains fichiers
            if (isset($files[$j])) // Vérifie qu'on n'est pas rendu trop loin
                echo '<td><img width="200px" src="' . $files[$j] . '" alt="" />
				</td>';
        }
 
        echo '</tr>';
    }
?>
</table>


Merci pour votre aide

6 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    veux-tu utiliser $nb_image, au lieu de 4, pour contrôler le nombre d'images par ligne?
    0
  2. mont_dani Messages postés 249 Statut Membre
     
    Bonjour yg_be

    Merci pour ton soutien.

    Oui se serait mieux d'utiliser $nb_image.

    Je suppose qu'il faut faire une boucle ou quelque chose comme ça.
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      tu écris "ce script positionne 4 photos sur une ligne". en es-tu certain?
      0
      1. mont_dani Messages postés 249 Statut Membre > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Oups, tu as raison le srcipt que j'ai posté met trois photos sur chaque ligne.
        J'ai fait plusieurs essais et a la fin je me suis trompée dans mon texte.
        0
      2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > mont_dani Messages postés 249 Statut Membre
         
        et donc ce script fonctionne comme tu le souhaites, non?
        0
  3. mont_dani Messages postés 249 Statut Membre
     
    Le script fonctionne mais pas comme je veux.
    Quand il met 3 ou 4 photos par ligne, il y a les espaces causés par la difference entre format portarit et paysage.
    voici le résultat:


    Je veux éviter les espaces balncs.

    C'est pourquoi j'ai pensé empilé $nb_image photos dans chaque<TD>
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Pourrais-tu exprimer en français "empilé $nb_image photos dans chaque<TD>".
      Comment souhaites-tu éviter ces espaces?
      0
      1. mont_dani Messages postés 249 Statut Membre > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Pourrais-tu exprimer en français "empilé $nb_image photos dans chaque<TD>".==>>
        Mieux vaut une photo que beaucoup de paroles.
        Ce que j'ai aujourd hui tu l'as vu dans le message précédent
        Ce que je souhaite obtenir


        Comment souhaites-tu éviter ces espaces? ===>>> ca c'est ma question
        0
      2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > mont_dani Messages postés 249 Statut Membre
         
        Bonjour,
        Pour le coup, ça n'a plus rien à voir avec le PHP....
        Ce n'est qu'une question de html/css ....
        Il faudrait que tu définisses, dans tes TD, une DIV de largeur et longeur fixes et que tu places tes images dans ces DIV ...
        Et pour les espacements entre les lignes.. il faut jouer avec le padding et le margin ...

        Question à reposer dans le forum webmaster/css si tu ne trouves pas...
        0
      3. mont_dani Messages postés 249 Statut Membre > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Bonsoir Jordane

        Je me suis trompé dans le montage que j'ai montré avant. Ce que souhaite faire c'est


        Je m'explique de manière différente.
        Pour l'intant j'ai
        <tr><td>image</td><td>image</td><td>image</td></tr>
        <tr><td>image</td><td>image</td><td>image</td></tr>
        <tr><td>image</td><td>image</td><td>image</td></tr>

        Je voudrai obtenir
        <tr><td>image1 image 2 image 3</td><td>image4 image 5 image 6</td><td>image 7 image 8</td></tr>

        en faisant quelque chose comme ca dans le php
        <?php
        $files = glob("../../image/galeria/11121*.*"); // toute les images qui commence par 11121
        $compteur = count($files); // nombre total d image
        $nb_colonne=3; // nombre de colonnes a l'affichage
        $nb_image= ceil(($compteur) / ($nb_colonne));// nombre d'image par colonne
        
        ?>
         
        <table>
        <?php
            for ($i = 0; $i < $compteur; $i+=3) { // On augmente de 3 à chaque passage de la boucle et elle tourne tant qu'on a pas atteint le compte
                echo '<tr>';
                 
                for ($j = $i; $j < ($i + 3); $j++) { // Les trois prochains photos
                    if (isset($files[$j])) // Vérifie qu'on n'est pas rendu trop loin
                        echo '<td><img width="200px"  border=" 5px solid #89B700" src="' . $files[$j] . '" alt="Image" /><br>
        				<img width="200px"  border=" 5px solid #89B700" src="' . $files[$j+1] . '" alt="Image" /><br>
        				<img width="200px"  border=" 5px solid #89B700" src="' . $files[$j+2] . '" alt="Image" /><br></td>';
                }
         
                echo '</tr>';
            }
        ?>

        Cela ne fonctionne pas parce que les photos se répètent.

        Penses-tu qu'il s'agit toujours d'un problème de css?
        0
  4. Utilisateur anonyme
     
    Bonjour
    Vous pouvez essayer avec cela UberGallery, sans base de données. Entièrement paramétrable et le PHP est facile à "modifier".
    Aperçu "généré" en carré, images portrait ou paysage..
    Mais il est préférable d'avoir des images dans la même définition/résolution.
    Bien lire la procédure d'installation simple
    A+
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. mont_dani Messages postés 249 Statut Membre
     
    Bonsoir.
    .
    Me revoivi après avoir chercher pendant deux jours.

    Je suis arrivé a cette solution qui fonctionne très bien.

    Peut etre il-y a t-il moyen d'alleger le script? je suis ouvert a toutes proposition.

    Voici le mein:
    <?php
    	
        $files = glob('../../image/galeria/11121*'); // toute les photo qui commence par
       
    	
    		echo '<table width= "80%" align="center"> <tr>	<td>';
    		
    			echo "<img  class='catimage' src='$files[3]'><br>
    			<img  class='catimage' src='$files[6]'><br>";
    			if (isset($files[9])) { echo "<img  class='catimage' src='$files[9]'><br>";}
    			if (isset($files[12])) { echo "<img class='catimage' src='$files[12]'><br>";}
    			if (isset($files[15])) { echo "<img class='catimage' src='$files[15]'><br>";}
    			if (isset($files[18])) { echo "<img class='catimage' src='$files[18]'><br>";}
    			if (isset($files[21])) { echo "<img class='catimage' src='$files[21]'><br>";}
    			if (isset($files[24])) { echo "<img class='catimage' src='$files[24]'><br>";}
    			
    			echo '</td>	<td>';
    			
    			echo "<img  class='catimage' src='$files[1]'><br>
    			<img  class='catimage' src='$files[4]'><br>
    			<img  class='catimage' src='$files[7]'><br>";
    			if (isset($files[10])) { echo "<img class='catimage' src='$files[10]'><br>";}
    			if (isset($files[13])) { echo "<img  class='catimage' src='$files[13]'><br>";}
    			if (isset($files[16])) { echo "<img class='catimage' src='$files[16]'><br>";}
    			if (isset($files[19])) { echo "<img class='catimage' src='$files[19]'><br>";}
    			if (isset($files[22])) { echo "<img  class='catimage' src='$files[22]'><br>";}
    			
    			echo '</td>	
    			<td>';
    			echo "<img  class='catimage' src='$files[2]'><br>
    			<img class='catimage' src='$files[5]'><br>
    			<img class='catimage' src='$files[8]'><br>";
    			if (isset($files[11])) { echo "<img class='catimage' src='$files[11]'><br>";}
    			if (isset($files[14])) { echo "<img class='catimage' src='$files[14]'><br>";}
    			if (isset($files[17])) { echo "<img class='catimage' src='$files[17]'><br>";}
    			if (isset($files[20])) { echo "<img class='catimage' src='$files[20]'><br>";}
    			if (isset($files[23])) { echo "<img class='catimage' src='$files[23]'><br>";}
    			echo '</td>	
    		  </tr> </table>';
           
    	?>
     


    En tout cas merci pour votre aide.
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Tu pourrais travailler avec des boucles, comme tu as fait au départ.
      0
      1. mont_dani Messages postés 249 Statut Membre > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        J'ai essayé, mais je n'y suis pas arrivé. Aurais-tu une idée?
        0
      2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > mont_dani Messages postés 249 Statut Membre
         
        qu'as-tu essayé?
        tu dois produire trois listes:
        1,4,7,...
        2,5,8, ...
        3,6,9,12, ...
        0
  7. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Tiens...
    regarde ce que donne ce code :
    <?php
     $files = glob('../../image/galeria/11121*'); // toute les photo qui commence par
      
    $nb_colonne =3; // nombre de colonnes a l'affichage
    $nb_imgCel = 3; // Nombre d'images par cellule
    
    //variable utilisées pour recréer un array organisé comme tu le souhaites
    $arrF = [];
    $row = 0;
    $col = 0;
    $K = 0;
    
    //on boucle sur chaque fichier :
    foreach($files as $F){
     if($col>0 && $col % ($nb_colonne-1) == 0 && $K>=$nb_imgCel){
       $col=0;
       $K=0;
       $row++;   
     }
      if($K>0 && $K % $nb_imgCel == 0){
       $col++;
       $K=0;
     }
     
     $arrF[$row][$col][] = $F;
     $K++;
    }
    
    //pour voir à quoi ressemble l'array
    echo "<pre>";
    print_r($arrF);
    echo "</pre>";
    exit;
    
    

    ne te reste plus qu'à boucler dessus pour recréer le tableau html que tu veux obtenir
    0
    1. mont_dani Messages postés 249 Statut Membre
       
      Merci Jordane.

      La présentation de l'array me parait parfaite.

      Je vois comment le boucler dans mon tableau html
      0