Page 1 sur 2

Tableau pour afficher des miniatures

Posté : 13 nov. 2006, 22:03
par Zurg
Bonsoir à tous,
ou bonjour, ça dépend...

voici ma question :

Je voudrais créer un tableau pour afficher des miniatures, 5 par colonnes si possible.

J'ai fait ça pour créer le tableau
->
<?php 
$rep = "/photos";
$rep2 = opendir($rep);
$i = 0;

$tofs = "";

$tab = array (
	$tofs => array()
	);
	
while($file = readdir($rep2))
	{
	if($file != "." && $file != "..")
		{
		if (substr($file, -3) == "JPG")
			{
			$tofs[$i] = $file." ";
			$tab = $tab.$tofs[$i];
			$i++;
			}
		}
	}
?>
Bon, je ne sais pas si c'est très propre, mais en tous cas, j'ai bien un tableau avec tout ce qu'il faut dedans.

Maintenant mon problème, c'est d'afficher par 5 colonnes les photos dont les noms sont contenus dans mon tableau...

Une chtite idée ?

MERCI ! ;)

Posté : 13 nov. 2006, 22:24
par Zurg
Oups,

déjà mon tableau ne marche pas... Où est l'erreur ? :oops:

Posté : 13 nov. 2006, 23:02
par Cyrano
Tu devrais lancer une petite recherche dans le forum avec le mot clé "modulo", tu vas trouver pas mal de choses intéressantes qui vont répondre à ton problème.

Posté : 13 nov. 2006, 23:04
par Zurg
Salut Cyrano !

Oui, j'y pensais déjà, mais je ne sais pas trop comment l'utiliser dans mon
cas...

Et puis je viens de me rendre compte que mon tableau ne marchait pas, je ne dois pas le remplir correctement, vois tu pourquoi ?

Merci

Posté : 13 nov. 2006, 23:06
par Cyrano
Alors un tuto basique sur les tableaux peut-être :?:

Posté : 13 nov. 2006, 23:18
par Zurg
Oui, merci, c'est déjà ça...

je pense que comme ça, c'est mieux non ?
<?php 
$rep = "/photos";
$rep2 = opendir($rep);
$i = 0;

$tofs = "";

$tab = array ();
	
while($file = readdir($rep2))
	{
	if($file != "." && $file != "..")
		{
		if (substr($file, -3) == "JPG")
			{
			$tofs[$i] = $file." ";
			$tab[] = $tab.$tofs[$i];
			$i++;
			}
		}
	}
?>

Posté : 13 nov. 2006, 23:45
par Cyrano
Ça, il n'y a que toi qui le sait : est-ce que ça te retourne le résultat attendu ?

Posté : 14 nov. 2006, 04:10
par Zurg
ben pas tout à fait, j'obtiens une liste qui compte 44 entrées, ce à quoi je m'attendais, mais lorsque je fais un echo, il m'écrit array en premier...

Posté : 14 nov. 2006, 09:14
par Hermès
Essaye de faire :
echo "<pre>"; print_r($tab); echo "</pre>";
Habituellement, ça aide beaucoup pour savoir ce qui va de travers.

Posté : 14 nov. 2006, 09:55
par Ajoloca
Bonjour,

Si je comprends bien ce que tu veux faire, c'est de remplir un tableau avec le nom des fichiers images d'un répertoire.

Tu as un souci dans la construction de ton tableau(tu fais une concaténation au lieu d'ajouter un poste)

Essaie ceci
<?php 
$rep = "/photos";
$tab = array ();
if($handle = opendir($rep)){
	while($file = readdir($handle)){
		if($file != "." && $file != ".."){
			if (strtoupper(substr($file, -3)) == "JPG"){
				// Ajout d'un poste en fin de tableau
				array_push($tab, $file);
			}
		}
	}
}
else{
	exit('Impossible d\'ouvrir le r&eacutepertoire ' . $rep);
}
// Pour afficher le résultat
$tab_len = count($tab);
for($i = 0; $i < $tab_len; $i++) echo $tab[$i];
?>
EDIT :
la condition
if($file != "." && $file != "..")
n'est pas nécessaire vu que ça ne remplit pas la condition
if (strtoupper(substr($file, -3)) 

Posté : 14 nov. 2006, 18:03
par Zurg
Merci beaucoup !

ça marche !

Je peux afficher le tableau correctement, donc je dois pouvoir m'en servir pour afficher des images dans un tableau sur un nombre de colonnes choisies.

Comment puis-je me servir de ce fameux modulo ?

J'ai fait un truc comme ça :
for ($i = 0; $i < count($tab); $i++) {
	if (($i % $nb_col) == 0)
		{
		echo $tab[$i];
		$i++;
		}
	else
		{
		echo "marche pas";
		}
	}
Mais évidemment ça ne marche pas... enfin j'ai vu qq exemples en faisant la recherche, mais j'ai du mal à cerner le pb...

Posté : 14 nov. 2006, 18:34
par Ajoloca
Re,
Une version sans 'modulo' et le strict nécessaire en HTML
<?php
	$photos_ligne = 3; // Nombre de photos par ligne
	$total_img = count($tab); // Nombre total d'images
	// Creation de la table
	echo '<table>';
	for($i = 0; $i < $total_img; $i++){
		// debut de ligne
		echo '<tr>';
		for($j = 0; $j < $photos_ligne; $j++){
			// afficher l'image, à toi de voir les autres params
			echo '<td><img src="' . $tab[$i + $j] '" /></td>';
		}
		// Fermeture de la ligne
		echo '</tr>';
	}
	// Fermeture de la table
	echo '</table>'; 
?>
Et une avec 'modulo'
<?php
	$photos_ligne = 3; // Nombre de photos par ligne
	$total_img = count($tab); // Nombre total d'images
	// Creation de la table
	echo '<table><tr>';
	for($i = 0; $i < $total_img; $i++){
		if($i % $photos_ligne == 0 && $i != 0){
			echo '</tr><tr>';
		}
		// afficher l'image, à toi de voir les autres params
		echo '<td><img src="' . $tab[$i] '" /></td>';
	}
	// Fermeture de la ligne et  de la table
	echo '</tr></table>'; 
?>

Posté : 14 nov. 2006, 18:42
par Zurg
Re pareil !

Bon, alors j'ai un peu avancé, je viens de voir ton code, merci beaucoup.

Avant de le reprendre, voici ce que j'ai à peu près réussi à faire :
<?for ($i = 0; $i < count($tab); $i++) {
    // valeur à afficher
    $nom_tof = $tab[$i];
	$nom_tof2 = substr($nom_tof,0,-4);
    if (($i % $nb_col) == 0)
        {
		echo '';
		$aff = "<a href=\"".$rep."/".$nom_tof."\"><img src=\"".$rep2."/".$nom_tof."\" >".$nom_tof2."</a>";
    	echo $aff;
		}
    if (($i % $nb_col) == ($nb_col - 1))
        echo '';
}
?>
Le problème c'est que ça m'affiche bien qq images, mais pas toutes, vois-tu d'où ça vient ?

Merci encore !
:D

Posté : 14 nov. 2006, 18:49
par Ajoloca
Re,
Regarde bien la difference entre le code que j'ai fait (avec modulo) et le tien.

Comme tu vois tu n'affiches l'image que si la condition est vraie, donc une image sur $nb_col

Posté : 14 nov. 2006, 19:03
par Zurg
Bon, alors là, je l'ai mis un peu à ma sauce, de cette manière :
$nb_col = 5; // Nombre de photos par ligne
$total_img = count($tab); // Nombre total d'images
$nom_tof = $tab[$i]; //nom de l'image
$nom_tof2 = substr($nom_tof,0,-4); //nom de l'image sans extension

echo '<table><tr>';
for($i = 0; $i < $total_img; $i++)
	{
    if($i % $nb_col == 0 && $i != 0)
		{
        echo '</tr><tr>';
        }
 	 // afficher l'image, à toi de voir les autres params
	$aff = "<td><img src=\"".$rep2."/".$nom_tof."\" ></td>";
	echo $aff;
    }
 // Fermeture de la ligne et  de la table
echo '</tr></table>'; 
Mais j'ai comme affichage 49 fois la même image (mon tableau comporte 44 images)... où cela pèche-t-il ?