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 ;-))
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.