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 ?

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
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épertoire ' . $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 !

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 ?