Affichage aléatoire d'une série d'image

Petit nouveau ! | 9 Messages

30 oct. 2009, 11:09

Bonjour à tous,
J'ai trouvé dans la partie contribution du forum, un script permettant l'affichage aléatoire d'une image.
<?php

        ########################################
        #
        # Affichage image aléatoire //manucci.info
        #
        ########################################

        //On indique le dossier images
        $chem_img = "./images";

        //On ouvre le dossier images
        $handle  = opendir($chem_img);

      
        //On parcoure chaque élément du dossier
        while ($file = readdir($handle))
                {
                        //Si les fichiers sont des images
                        if(preg_match ("!(\.jpg|\.jpeg|\.gif|\.bmp|\.png)$!i", $file))
                                {
                                        $listef&#91;&#93; = $file;
                                }
                }
       
        $random_img = rand(0, count($listef)-1); //permet de prendre une image totalement au hasard (RANDom) parmi toutes les images trouvées.
       
        //On calcule la largeur et la hauteur de l'image aléatoire
        $size = getimagesize($chem_img."/".$listef&#91;$random_img&#93;);
       
        //Largeur maximale de l'image pour la création des miniatures
        $largeur_maxi = 180;
        //Si la largeur dépasse la limite autorisée...
        if ($size&#91;0&#93; > $largeur_maxi)
                {
                        //...la nouvelle largeur est égale à la limite à ne pas dépasser
                        $width = $largeur_maxi;
                        //La largeur d'origine divisée par la largeur limitée (on obtient un chiffre qui sert à faire la même proportion pour la hauteur)
                        $theight = ($size&#91;0&#93;/$largeur_maxi);
                        //La hauteur originale est divisée par le chiffre obtenu précédemment afin que l'image conserve les mêmes proportions que l'originale (mais en mode vignette)
                        $height = ($size&#91;1&#93;/$theight);
                }
        else
                {
                        //Sinon on garde la taille originale
                        $width = $size&#91;0&#93;; $height = $size&#91;1&#93;;
                }
        //On affiche l'image aléatoire (en respectant les standards ! <img src="./images/smilies/icon_smile.gif" alt=":)" title="Smile" /> )
        echo "<a href=\"".$chem_img."/".$listef&#91;$random_img&#93;."\" onclick=\"window.open(this.href,'_blank');return false;\"><img style=\"border: one; width: ".$width."px; height: ".$height."px\" src=\"".$chem_img."/".$listef&#91;$random_img&#93;."\" alt=\"".$listef&#91;$random_img&#93;."\" /></>";
        //On ferme le dossier
        closedir($handle);
?>
Ce que je souhaiterais, c'est afficher 3 images de façon aléatoire. Apparemment il faudrait faire une boucle et un test pour vérifier qu'une image ne s'affiche pas 2 fois...

Est-ce que quelqu'un pourrait m'aider?

Merci d'avance
Laurent
Modifié en dernier par l.dardanelli le 05 nov. 2009, 02:06, modifié 1 fois.

ViPHP
ViPHP | 3607 Messages

30 oct. 2009, 17:17

Essaye plutôt de faire un shuffle() sur ton tableau d'images, ensuite, tu prends les trois premières et le tour est joué ;)

l.dardanelli1
Invité n'ayant pas de compte PHPfrance

04 nov. 2009, 01:33

Bonsoir,
Merci pour ces éléments, j'ai finalement réussi à faire cet affichage aléatoire...
Maintenant, la question que je me pose concerne les liens sur les images. Je ne souhaite pas que les liens pointent vers mes images mais vers différentes pages de mon site, chaque lien étant bien sur fonction de l'image. Y a t'il un moyen de paramétrer cela dans un fichier .txt placé dans le répertoire des images (je parle de la correspondance image/lien)?
Puis de faire référence à ce fichier .txt dans mon script?

Merci d'avance
Laurent

Eléphant du PHP | 453 Messages

04 nov. 2009, 03:58

Hello,

Bien vu Jojolapine. Arf, j'aurai fait un array_rand() :q

Pour rester dans l'idée de jojolapine et te donner un bout de piste, tu vas faire un tableau à deux dimensions :
$mes_images = array(
	array(
		"0" => "image.jpg",
		"1" => "www.liens.com"
	),
	array(
		"0" => "image2.jpg",
		"1" =>"www.liens2.com"
	),
	array(
		"0" => "image3.jpg",
		"1" => "www.liens3.com"
	),
	array(
		"0" => "image4.jpg",
		"1" => "www.liens4.com"
	),
	// etc.
);
shuffle($mes_images);

for($i = 0 ; $i < 3 ; $i++){
	echo $mes_images[$i][0]."<br />";
	echo $mes_images[$i][1]."<hr />";
}
code fait de tête. Je peux m'être trompé.

Bon code à toi
La Tux attitude avec les kiw'z syou plait
Komodo Edit - Inkscape - Dia

Petit nouveau ! | 9 Messages

05 nov. 2009, 02:07

Impeccable, merci pour votre aide
Laurent