[RESOLU] Diaporama php

alain488
Invité n'ayant pas de compte PHPfrance

22 oct. 2016, 15:43

Bonjour

J'utilise ce script pour afficher mon diaporama.

Code : Tout sélectionner

<?php error_reporting(E_ALL &~E_NOTICE); $b_diapo = false; $texte = ''; $filtre = '\.(jpg|gif|png)'; // régex d'identification des extensions de diapo $largeur = '920'; // largeur d'affichage des diapo en pixels permet d'ajuste l'image dans le cadre ************************* if ( (isset($_GET['dir'])) && (isset($_GET['nr'])) ) { $dir = $_GET['dir']; $nr = $_GET['nr']; $b_diapo = true; } if (!($b_diapo)) { $texte .= '<form action="'.$_SERVER['PHP_SELF'].'" method="get" name="diaporama">' .'<input type="hidden" name="nr" value="0" />' .'<input type="text" name="dir" value=""/>' .'<input type="submit" value="Valider"/>' .'</form>' ; } else { if ( $handle = opendir($dir) ) { while (false !== ($file = readdir($handle))) { if (preg_match('/'.$filtre.'/s',strtolower($file))) { $diapos[] = $file; // élément 0 du tableau puis suivants ; } } closedir($handle); } else {echo $dir.' NON TROUVE ';} // 2. Si j'ai des diapos if (isset($diapos[0])) { $max = count($diapos); // nombre de diapo trouvées if (!($nr<$max)) { // au cas ou on m'a oté des diapos entre-temps, je réduit le N° $nr = $max-1; } $texte .= '<ul>'; $texte .= '<li><span class="pre"><a href="' .$_SERVER['PHP_SELF'].'?dir='.$dir.'&nr='.strval(($nr+($max-1))%$max).'" >' .'<< &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Précédente &nbsp;' .'</a></span></li>'; $texte .= ' &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '; // Retour au module d'où je venais (event. modifier l'url) $texte .= '<li><span class="re"><a href=" http://www.lesvieuxtracteursdescollines.be/index.php" >' .'&nbsp; &nbsp; ^ ^ &nbsp; &nbsp; Retour &nbsp; &nbsp; ^ ^ &nbsp; &nbsp;' .'</a></span></li>'; $texte .= ' &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '; // (nr + 1) modulo max = n° suivant $texte .= '<li><span class="sui"><a href="' .$_SERVER['PHP_SELF'].'?dir='.$dir.'&nr='.strval(($nr+1)%$max).'" >' .'&nbsp; Suivante &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;>>' .'</a></span></li>'; $texte .= '</ul>'; $texte .= '<ol>'; // 3. J'affiche la diapo $texte .= '<img src="'.$dir.'/'.$diapos[$nr].'" alt="" width="'.$largeur.'" />'; $texte .= '</ol>'; } else { echo $_GET['dir'].' vide';} // NB. l'utilisation de $_SERVER['PHP_SELF'] (moi-même) comme url // permet de faire fonctionner ce script quelque soit son nom } ?>
voici le résultat http://www.lesvieuxtracteursdescollines ... hotos&nr=0
il fonctionne très bien, mais ne tient pas compte de l'ordre des photos.

je ne sais pas donner un ordre de défilement a mes photos, j'ai même essayer de remplacer les noms des fichiers photos par des chiffres, rien ne marche

est il possible d'ordonner les photos ?

merci d'avance
alain

Mammouth du PHP | 2703 Messages

22 oct. 2016, 15:54

voir si cela fait l'affaire :
asort($diapos);
à ajouter une fois que $diapos contient la liste des fichiers.

alain488
Invité n'ayant pas de compte PHPfrance

22 oct. 2016, 17:05

merci de t'intéresser a mon problème

j'ai cherché dans la documentation des infos sur cette fonction ( asort($xxxx); ), apparemment elle s'associe a un tableau (array ), mais dans mon script je n'ai pas d'array.

peut elle quand même fonctionné ?

si comment ?

alain488
Invité n'ayant pas de compte PHPfrance

22 oct. 2016, 23:49

pour ceux qui voudraient la solution

rajoutez ceci
usort($diapos, "strnatcmp");
entre ces deux lignes
$max = count($diapos); // nombre de diapo trouvées
if (!($nr<$max)) { // au cas ou on m'a oté des diapos entre-temps, je réduit le N°
dans mon script

merci a toi OR1 de m'avoir mit sur la piste

bien a vous
alain