Listage des images d'un répertoire avec pagination

Soyez le premier à donner votre avis sur cette source.

Vue 13 450 fois - Téléchargée 1 265 fois

Description

Permet d'afficher les images d'un répertoire avec pagination.

J'ai commencé par télécharger la source : http://www.phpcs.com/codes/LISTER-IMAGES-REPERTOIRE_13459.aspx et j'ai modifié à ma sauce.
Vous avez donc la possibilité de parametrer :
- Le nombre max d'images par page
- Les couleurs des liens (utilisation de style CSS - non intégré ici car ce n'est pas le sujet)
- Les extensions des images à prendre en compte

Source / Exemple :

<?php
/*!
 *
 * @author Magaly Clément 
 *
 *
 **/

class listage {
    
 	private $strRep;  // Repertoire à explorer
 	private $tabExt;  // Extensions images à afficher
 	private $strFic;  // Tableau des fichiers
 	
	
	/*!
	 *   constructeur de la classe
	 */
	function __construct($strRep, $tabExt) {
		
		$this->strRep = $strRep;
		$this->tabExt = $tabExt;
		
		$this->tabFic = $this->_creeTableauFichiers();
		
		
	}
			

	
	/*!
	 *   récupère l'extension d'un nom de fichier
	 *
	 *   \param str $strFichier   Nom du fichier
	 * 
 	 *   \return str extension du fichier
     *
	 *
	 */
	public function getExtension($strFichier) {
	
		$intPos = strrpos($strFichier,".");
		
		if (!$intPos) {
			$strExt = "";
		} else {
			$strExt = substr($strFichier,$intPos+1,strlen($strFichier)-$intPos);		
		}

		return $strExt;
	}
	
	
	
	
	
	
	/*!
	 *   Listage d'un répertoire d'images avec pagination
	 * 
	 * 	 \param $nbMax		Nombre d'images maximun à afficher par page
	 *	 \param $intDebut   Numéro de l'image ou l'on débute
	 *		
	 */
	 public function afficheImagesPage($intDebut, $intMax){
	 		

		$i = $intDebut; 
		
	
		while (isset($this->strFic[$i]) && $i < ($intMax + $intDebut)) { 
		   if ( $this->strFic[$i] != ".." && $this->strFic[$i] != "." && $this->strFic[$i] != "" ) { 
		   		?>
		   		<img src="<?php echo $this->strRep . $this->strFic[$i];?>" width="100" height="100" alt="<?php echo $this->strFic[$i];?>" />
		   		<?php 
		   } 
		   $i++; 
		} 
		
		
	 	
	 }

	
	 /*!
	 *   Affichage des numéros des pages
	 * 
	 *	 \param $intPage	Numéro de la page en cours
	 * 	 \param $nbMax		Nombre d'images maximun à afficher par page
	 *		
	 */
	 public function afficheNumerosPages($intPage, $lien, $nbMax, $couleurLien, $couleurNonLien, $couleurTexte){
	 	
	 	$nbTotal = count($this->strFic);
	 	
	 	$nb_pages = ceil($nbTotal / $nbMax); 

	  	$i = 1; 
 
 	    $debut = 0; 

  		// Si il y a plusieurs pages
 	    if ($nbTotal > $nbMax) { 
		
				
			// On affiche 5 lien autour du lien de la page actuelle
			$min = $intPage - 5;
			$max = $intPage + 5; 
			
			if ($min < 1) {
			    
				$min = 1;
				
			} 
			if ($max >= floor($nb_pages)) {
		    
				$max = floor($nb_pages) - 1;
				
			}
			
			$debut = ($min - 1) * $nbMax;
			
			if ($min > 1) {
				// On affiche "premiere page"
				$this->_afficheLienPage($lien, $intPage, 1, 0, $couleurLien, $couleurNonLien, $couleurTexte, "debut");
			}
			
			// Page précédente
			if ($intPage > 1) {
				
				$intPagePrec 	= $intPage;
				$numLienPrec 	= $intPagePrec - 1;
				$debutPagePrec  = $intPage * $nbMax;
				
				$this->_afficheLienPage($lien, $intPagePrec, $numLienPrec, $debutPagePrec, $couleurLien, $couleurNonLien, $couleurTexte, "Page précédente");
				    
			}
			
			?>
			<span class="<?php echo $couleurTexte?>"> - </span>	 	
			<?php
			for ($num_lien=$min;$num_lien<=$max+1;$num_lien++) {
				
				$this->_afficheLienPage($lien, $intPage, $num_lien, $debut, $couleurLien, $couleurNonLien, $couleurTexte);

				// debut
    			$debut = $debut + $nbMax; 	 
				 
			} // fin for
			
			$dernier = floor($nb_pages) - 1; 
			
			if ($intPage <= $dernier) {
				// Page suivante
				$intPageSuiv 	= $intPage;
				$numLienSuiv 	= $intPageSuiv + 1;
				$debutPageSuiv  = $intPage * $nbMax;
				
				$this->_afficheLienPage($lien, $intPageSuiv, $numLienSuiv, $debutPageSuiv, $couleurLien, $couleurNonLien, $couleurTexte, "Page suivante");
			}			    		
			
			if ($max < $dernier) {
				// On affiche "derniere page"
				$numLienFin         = floor($nb_pages);
				$debutPourLienFin   = ($numLienFin - 1)  * $nbMax;
				
				$this->_afficheLienPage($lien, $intPage, $numLienFin, $debutPourLienFin, $couleurLien, $couleurNonLien, $couleurTexte, "fin");
			}	
				
			
   		} 
	 	
	 }
	 
	 
	
	// ************************
	// *   Interface privée   *
	// ************************
	
	/*!
	 *   Création d'un tableau trié contenant tous les fichiers du répertoire
	 * 
	 *	 \param	$tabExt		Tableau des extensions autorisées
	 *		
	 */
	 private function _creeTableauFichiers(){
	 		
	 	$dossier = opendir($this->strRep); 
	 	
	 	$this->strFic = array();
	 	
		while ($fichier = readdir($dossier)) {
			
			if (in_array($this->getExtension($fichier), $this->tabExt)){
				array_push($this->strFic, $fichier);
			}
		} 

		sort($this->strFic); 
	 	
	 }
	
	
	
	/*!
	 *   Affichage d'un lien de page
	 * 
	 *   \param  $intPage		         Numéro de la page en cours (1 par défaut)
	 * 	 \param  $num_lien               Numéro du lien
	 *	 \param  $debut              	 Début de la numérotation
	 * 	 \param  $couleurLien            Style des liens
	 * 	 \param  $couleutNonLien         Style du texte du numero de la page en cours
	 * 	 \param  $couleurTexte           Couleur du texte (en dehors des numeros)
	 * 	 \param  $texte           		 Texte du lien
	 */
	private function _afficheLienPage($lien, $intPage, $num_lien, $debut, $couleurLien, $couleurNonLien, $couleurTexte, $texte=""){
		
		if (strstr($lien, "?")){
			$sep = "&";
		} else {
			$sep = "?";
		}
		
		if ($texte != "") {
		    // Lien de debut ou lien de fin
	
			if ($texte == "debut") {
			    
				$title = "Allez au début";
				$texte = "<< ";
				
			} else if ($texte == "fin") {
			
				$title = "Allez à la fin";
				$texte = " >>";
				
			} else if ($texte == "Page suivante") {
			
				$title = "Allez à la page suivante";
				$texte = " >";
				
			} else if ($texte == "Page précédente") {
			
				$title = "Allez à la page précédente";
				$texte = "< ";
			}
			
   			?>
			<a class="<?php echo $couleurLien?>" href="<?php echo $lien . $sep;?>deb=<?php echo $debut?>" title="<?php echo $title?>"><?php echo $texte?></a>
			<?php	
			
		} else {
			
			$title = "Allez à la page " . $num_lien;
			
			if ($intPage != $num_lien) { 
	   			?>
				<a class="<?php echo $couleurLien?>" href="<?php echo $lien . $sep;?>deb=<?php echo $debut?>" title="<?php echo $title?>"><?php echo $num_lien;?></a>
				<span class="<?php echo $couleurTexte?>"> - </span>			
				<?php	
  			} else { 
	   			?>                
	   			<span class="<?php echo $couleurNonLien?>"><?php echo $num_lien; ?></span>
	 			<span class="<?php echo $couleurTexte; ?>"> - </span>
	  			<?php 
  			} 
		
		}
	}
	
}
?>

Conclusion :

Vous pouvez bien sûr modifier le nombre de liens à afficher au maximum (ici c'est 10 i.e 5+5) et la taille de vos images (ici 100 par 100).

Attention, le fichier index.php ne contient pas d'entête HTML, ce sera à vous de l'ajouter (je ne l'ai pas mise pour que ça soit plus facilement intégrable dans une page existante : il n'y aura qu'à faire un include ;-))

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
120
Date d'inscription
lundi 19 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2017

Bonjour :

Attention, Pour que ça fonctionne vers les pages précédentes, il faut changer la ligne (135) de ‘’listage.php’’ comme suivant :
$debutPagePrec = (($intPage * $nbMax)-($nbMax*2));
Si non ça va monter vers les pages suivantes. !!

Salut.
Messages postés
1
Date d'inscription
lundi 30 juin 2008
Statut
Membre
Dernière intervention
5 mars 2010

Bonjour, ce code est vraiment bien, j'ai fais quelques personnalisations assez simples et j'en suis pas mal content, je te remercie pour cela,

si ce n'est pas trop te demander, j'aimerais savoir si cela était possible d'inverser l'ordre d'affichage, j'utilise un script d'upload d'image qui renomme l'image envoyée avec le timestamp (un truc du style $nom = time().extension) et lorsque je liste les images avec ton script, les images les plus anciennes s'affichent avant les nouvelles, c'est cela que je voudrais inverser,

merci bien !
Messages postés
1
Date d'inscription
lundi 4 février 2008
Statut
Membre
Dernière intervention
14 mai 2008

bonjour
malgré le temps déja passé j'espère qu'il y a toujours moyen d'avoir une réponse à ce post

ce script est exactement ce que je cherche
malheureusement je ne maitrise pas la poo et j'ai un souci
j'utilse wamp en local
j'ai changé la ligne du nom du dossier en ajoutant getcwd() pour avoir le dossier actuel
tout marche sauf les images qui n'apparaissent pas mais leurs noms apparaissent à leurs places
les 2 fichiers php et les images sont tous dans le même dossier (pour info)

merci d'avance
Messages postés
7
Date d'inscription
jeudi 24 mars 2005
Statut
Membre
Dernière intervention
28 janvier 2008

wow je remarque que le code a ete posté ya un an deja !
alors son commentaire !
Messages postés
7
Date d'inscription
jeudi 24 mars 2005
Statut
Membre
Dernière intervention
28 janvier 2008

meme avis que les autres, revois ton code
Afficher les 15 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.