Tableau pour afficher des miniatures

Eléphant du PHP | 148 Messages

13 nov. 2006, 22:03

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 ! ;)
Et hop !

Eléphant du PHP | 148 Messages

13 nov. 2006, 22:24

Oups,

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

Mammouth du PHP | 19672 Messages

13 nov. 2006, 23:02

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 148 Messages

13 nov. 2006, 23:04

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
Et hop !

Mammouth du PHP | 19672 Messages

13 nov. 2006, 23:06

Alors un tuto basique sur les tableaux peut-être :?:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 148 Messages

13 nov. 2006, 23:18

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++;
			}
		}
	}
?>
Modifié en dernier par Zurg le 14 nov. 2006, 04:09, modifié 1 fois.
Et hop !

Mammouth du PHP | 19672 Messages

13 nov. 2006, 23:45

Ça, il n'y a que toi qui le sait : est-ce que ça te retourne le résultat attendu ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 148 Messages

14 nov. 2006, 04:10

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...
Et hop !

Eléphant du PHP | 312 Messages

14 nov. 2006, 09:14

Essaye de faire :
echo "<pre>"; print_r($tab); echo "</pre>";
Habituellement, ça aide beaucoup pour savoir ce qui va de travers.

ViPHP
ViPHP | 1961 Messages

14 nov. 2006, 09:55

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)) 
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 148 Messages

14 nov. 2006, 18:03

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...
Et hop !

ViPHP
ViPHP | 1961 Messages

14 nov. 2006, 18:34

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>'; 
?>
Modifié en dernier par Ajoloca le 14 nov. 2006, 18:45, modifié 1 fois.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 148 Messages

14 nov. 2006, 18:42

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
Et hop !

ViPHP
ViPHP | 1961 Messages

14 nov. 2006, 18:49

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
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 148 Messages

14 nov. 2006, 19:03

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 ?
Et hop !