Listage des images d'un répertoire avec pagination

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

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.