Page 1 sur 1

Affichage 4 par 4

Posté : 01 déc. 2005, 14:03
par Moker
bonjour,

Grace à votre aide j'ai reussit à coder ces deux fonctions :
function scandir($curdir) {
	$dir = opendir($curdir);
	$id = 0;
	
	while($p = readdir($dir)) {
		if(is_dir($curdir."/".$p) && ($p != ".") && ($p != "..")) {
			$id++;
			$rep[$id] = $p;
			}
		}
	closedir($dir);
	return $rep;
	}
function scanfile($curdir) {
	$dir = opendir($curdir);
	$id = 0;
	
	while($p = readdir($dir)) {
		if(is_file($curdir."/".$p)) {
			$ext = strtolower(substr($p, strrpos($p, '.') + 1));
			if(($ext=="jpg") || ($ext=="jpeg") || ($ext=="gif") || ($ext=="bmp") || ($ext=="png")) {
				$id++;
				$file[$id] = $p;
				}
			}
		}
	closedir($dir);
	return $file;
	}
?>
d'ailleur je vous en remercie encore :wink:

je les utilise pour afficher des miniature d'une gallerie photo :
if(isset($_GET['cat']))	{
	foreach($rep as $id=>$p) {
		if($_GET['cat'] == $id)	{
			$curdir .= '/'.$p;
			$file = scanfile($curdir);
			foreach($file as $id=>$p) {
				print "
				<a href='?page=".$_GET['page']."&cat=".$_GET['cat']."&img=".$id."'><img src='".$curdir."/".$p."' height='60' border='0'></a>\n
				";
				}
			}
		}
	}
j'aimerait maintenant modifier ce code de maniere a ce que seulement 4 miniatures à la fois soit affichée.

j'ai lu pas mal de tuto ou l'on declare une variable $limite et $debut mais impossible de les adapter à ce dernier :oops:

pouvez vous me guider encore un peu afin de resoudre ce probleme ?

ps : j'espere que cette fois-ci mon identification est meilleure :roll:

Merci à vous.

Posté : 01 déc. 2005, 15:58
par jobherzt
j'ai pas les noms des fonctions en tete, mais tu dois pouvoir compter le nombre d'element dans le tableau $file, et apres tu fais un :

for($i=$debut ; ($i <$debut +4) && ($i < $nombre_de_fichier) ; $i++)
......
$debut +=4

et ainsi de suite.

Re: Affichage 4 par 4

Posté : 01 déc. 2005, 19:59
par Truc
j'espere que cette fois-ci mon identification est meilleure :roll:
indenter, indentation :wink:
bof bof, chacun sa façon, perso je n'aime pas indenter comme ça.

tu as deja tous les fichiers dans un tableau ($file) suffit donc de fixer un début d'affichage et une fin (qui dans ton cas sera de "début+4" (tant que tu ne dépasse pas le tableau))
$file = scanfile($curdir); 

$debut= isset($_POST['suiv']) ? $_POST['suiv'] : 0;

for($i=$debut; $i<$debut+4 ; $i++)
{
	print "<a href='?page=".$_GET['page']."&cat=".$_GET['cat']."&img=".$i."'>
	<img src='".$curdir."/".$file[$i]."' height='60' border='0'></a>\n"; 
}
sans oublier de mettre un lien pour passer a la page suivante (donc 4 nouvelles images) href="?suiv=$debut+4".

ce code n'est pas terminé mais pourra servir d'exemple
:wink:

Posté : 01 déc. 2005, 22:34
par Moker
merci pour vos reponse :wink:

j'ai juste une petite question je ne comprend pas la ligne suivante :
$debut= isset($_POST['suiv']) ? $_POST['suiv'] : 0;
du coup impossible pour moi de travailler sur ce code qui me parait trés interessant.

peut tu me l'expliquer s'il te plait ?

Posté : 01 déc. 2005, 23:05
par Truc
$debut= isset($_POST['suiv']) ? $_POST['suiv'] : 0;
fait un test comme if .. else .. appellé "opérateur ternaire" ( ? : ). C'est une autre façon d'écrire ces test:
if (isset($_POST['suiv'])) 
  { $debut=$_POST['suiv'];  }
else
  { $debut=0; }

Posté : 01 déc. 2005, 23:39
par Moker
ok merci pour cette explication :wink: je note ca elle est bien pratique cette ligne :lol:

j'ai tenté ton code mais s'il y as moins de 4 image dans le repertoire ca me renvoi une erreur, donc je me suis penché sur la question et j'ai modifié mon code comme ceci :
$file = scanfile($curdir);
$debut = 1;
			
foreach($file as $id=>$p)
    {
    if($id<$debut+4)
        {
        print "<a href='?page=".$_GET['page']."&cat=".$_GET['cat']."&img=".$id."'>
        <img src='".$curdir."/".$file[$id]."' height='60' border='0'></a>\n";
        }
    }
    print "<a href='?page=".$_GET['page']."&cat=".$_GET['cat']."&suiv=".$debut+4."'>suivant</a>";
j'ai bien un affichage de 4 images voire moins de 4, mais $debut+4 ne fonctionne pas.

alors je me demande comment faire pour changer la valeur d'une variable a partir de l'url et si cela n'est pas dangereux d'afficher cette variable directement ?

merci encore :)

Posté : 02 déc. 2005, 00:29
par jobherzt
le code que je t'ai donne prevoit le cas ou il y a moins de 4 images ou si le nombre d'image n'est pas un multiple de 4. il faut ajouter la condition : && ($i < $nombre_de_fichier) dans la boucle for.

Posté : 02 déc. 2005, 01:24
par Moker
merci jobherzt

pour les conditions je pense, j'insiste sur le 'je pense' :lol: , avoir comprit comment faire.

par contre je ne voit vraiment pas comment incrementer ma variable $debut via l'url, meme un $debut += 4; je ne voit pas comment le passer par l'url.

je m'en remet à vos connaisance.

merci beaucoup :wink:

Posté : 02 déc. 2005, 01:33
par Truc
je ne voit vraiment pas comment incrementer ma variable $debut via l'url, meme un $debut += 4; je ne voit pas comment le passer par l'url.
Mais tu la passe deja par l'url:
print "<a href='?page=".$_GET['page']."&cat=".$_GET['cat']."[b]&suiv=".($debut+4)."[/b]'>suivant</a>";
suffit de la récupérer en t'aidant de ce fameux "opérateur ternaire" :wink:

Posté : 02 déc. 2005, 21:31
par Moker
Merci truc t'est trop fort :wink:

heureusement que vous etes la pour nous aider !!

j'ai enfin reussi a coder mon affichage 4 par 4 et tout ca grace à vous :)

voila à quoi ressemble mon script maintenant :
$file = scanfile($curdir);

$debut= isset($_GET['suiv']) ? $_GET['suiv'] : 0;

if($debut >= 4)
	{
	print "<a href='?page=".$_GET['page']."&cat=".$_GET['cat']."&suiv=".($debut-4)."'><<</a>";
	}

foreach($file as $id=>$p)
	{
	if(($id > $debut) && ($id <= $debut+4))
		{
		print "
		<a href='?page=".$_GET['page']."&cat=".$_GET['cat']."&img=".$id."'>
		<img src='".$curdir."/".$file[$id]."' height='60' border='0' align='absmiddle'></a>\n
		";
		}
	}

if($debut <= 4)
	{
	print "<a href='?page=".$_GET['page']."&cat=".$_GET['cat']."&suiv=".($debut+4)."'>>></a>";
	}
il n'est pas terminer il faut encore que je prenne en compte l'affichage ou non du lien "suivant" lorsqu'il n'y a plus d'images à afficher qui deconne encore un peu.

en tout je ne serait jamais arrivé la sans vous !!

alors Milles merci les gars :wink: