Pagination de ma galerie sans base de données

Pagination de ma galerie sans base de données - PHP - Programmation

Marsh Posté le 19-12-2006 à 09:08:23    

Bonjour,
 
j'utilise actuellement un script permettant d'afficher une galerie d'images à partir des fichiers contenus dans un dossier.
 
Le script donne aussi le nombre de fichiers contenus dans le dossier et donc dans la galerie via cette fonction : count_files($folder, $ext, $subfolders)
 
J'aimerais mettre en place un système de pagination (par exemple 20 images par page) qui se fasse automatiquement... Le problème est que je ne sais pas comment faire, tous les scripts que j'ai pu trouver sur le net ne faisaient pas ce que je voulais et le seul que jai trouvé et qui me semblait parfait (il affiche le nombre de pages en fonction du nombre de lignes dans un tableau) n'avait pas de lien pour le télécharger... :(
J'ai réellement besoin d 'une pagination car le chargement d'une galerie est trop long quand les images sont nombreuses et je ne souhaite pas passer par la base de données...
 
J'ai donc décidé de venir vous demander, au cas où quelqu'un pourrait m'aider, et j'espère que ce sera le cas. ^^'
 
Merci d'avance.

Reply

Marsh Posté le 19-12-2006 à 09:08:23   

Reply

Marsh Posté le 19-12-2006 à 15:33:44    

ben un petit fichier de paramétrage (pour fixer entre autre le nb de photos par page) et ensuite dans ton script php, tu fais un while() sur le répertoire à afficher + un compteur qui s'incrémente à chaque fois que tu affiche une photo. Dès que t'as atteint le nombre max fixé, tu arrêtes le while().
Par ailleurs, il faut savoir à quelle photo tu commences (offset). Pour ça, tu utilises une variable genre "page" que tu mets dans l'url pour faire défiler les pages (comme dans google par ex) :
ex : http://www.monsite.fr/galerie.php?page=1
 
Pour connaître l'offset, tu fais page*(max photos par page). Après dans ton while(), tu n'affiche pas la photo tant que t'a pas atteint l'offset. Une fois atteint, tu affiches les photos jusqu'à ce que le compteur atteigne le nb max de photos par page.

Reply

Marsh Posté le 19-12-2006 à 15:38:10    

tien sinon, y'a ça de tout fait : http://www.mywebmymail.com/
 
EasyPHPAlbum, je m'en sers quand je veux rapidement partager des photos. Y'a qu'1 seul fichier, très simple et très rapide à mettre en oeuvre ;)

Reply

Marsh Posté le 19-12-2006 à 15:42:15    

wow... o_o je saurais pas faire tout ça moi... while c'est pas uniquement pour els bases de données ? <_<
 
désolé moi j'ai juste repris un script trouvé sur le net et modifié des trucs mais pour ajouter des fonctions comme ça je suis dans le brouillard... =/
 
pour le script de galerie que tu me montres là c'set trop d'options pour ce que je veux faire ! je ne veux pas de catégorie, je veux afficher le contenu d'un seul répertoire donc pas besoin de tout ça. le must serait juste une pagination en fonction du nombre de lignes dans mon tableau ! ^^
 
je peux te montrer mon script si tu veux <_<

Message cité 1 fois
Message édité par Heartless le 19-12-2006 à 15:43:30
Reply

Marsh Posté le 19-12-2006 à 15:46:46    

rufo a écrit :

ben un petit fichier de paramétrage (pour fixer entre autre le nb de photos par page) et ensuite dans ton script php, tu fais un while() sur le répertoire à afficher + un compteur qui s'incrémente à chaque fois que tu affiche une photo. Dès que t'as atteint le nombre max fixé, tu arrêtes le while().
Par ailleurs, il faut savoir à quelle photo tu commences (offset). Pour ça, tu utilises une variable genre "page" que tu mets dans l'url pour faire défiler les pages (comme dans google par ex) :
ex : http://www.monsite.fr/galerie.php?page=1
 
Pour connaître l'offset, tu fais page*(max photos par page). Après dans ton while(), tu n'affiche pas la photo tant que t'a pas atteint l'offset. Une fois atteint, tu affiches les photos jusqu'à ce que le compteur atteigne le nb max de photos par page.


tout pareil :)
http://photos.manga-torii.com/gale [...] d=4&page=2
 
(là j'ai juste un fichier xml en plus, histoire de savoir dans quel répertoire chercher quelle galerie)
 
mais c'est pas du php [:magicbuzz]


Message édité par MagicBuzz le 19-12-2006 à 15:46:59
Reply

Marsh Posté le 19-12-2006 à 15:57:28    

bon je sais pas trop comment expliquer mais le répertoire dans lequel on affiche les images est sélectionné via $_GET['truc'] <_< voilà mon script complet :

Code :
  1. <?php
  2. $titrerub = str_replace("_","&nbsp;",$_GET['rub']);
  3. $titrepage = str_replace("_","&nbsp;",$_GET['page']);
  4. echo '<span class="grand_titre b">'.$titrerub.'</span>'.$hr;
  5. // --------------------- variables du nombre de fichiers
  6. $folder = 'img/'.$_GET['rub'].'/'.$_GET['page'].'/'; // adresse du dossier à lister.
  7. $ext = 'jpg'; // extention des images à compter.
  8. $subfolders = '0'; // 1 = compter ceux des sous-dossiers / 0 = compter uniquement dans ce dossier.
  9. $nb_files = 'Cette galerie contient <b>'.count_files($folder, $ext, $subfolders).'</b> '.$titrepage.'. (Classés du plus récent au plus ancien)';
  10. // Lire la taille des images
  11.    function imgt($imgs){
  12. $imgt = getimagesize($imgs);
  13. echo $imgt[0]." x ".$imgt[1];
  14. }
  15. // ------------------------------------------------------------------------- //
  16. // Album photos à partir des images miniatures                               //
  17. // ------------------------------------------------------------------------- //
  18. // Information sur le fonctionnement de ce prog //
  19. //
  20. // 1) Mettre les photos 'grand-format' dans un  
  21. //    Répertoire (par Exemple : Photos) de votre site Web
  22. //    Les photos sont visibles à l'adresse suivante:
  23. //    http://www.monsite.fr/Photos/
  24. //
  25. // 2) Créer un répertoire 'mini' dans 'Photos'
  26. //    accés aux mini-photos à partir de :
  27. //    http://www.monsite.fr/Photos/mini/
  28. //
  29. // 4) Générer les mini-photos à partir des photos
  30. //    grand-format et les placer dans le répertoire
  31. //    'mini' (http://www.monsite.fr/Photos/mini/)
  32. // Configuration et Définition des variables
  33. // Titre de votre Album
  34.   $titreAlbum = "---";
  35.   $soustitreAlbum = "---";
  36.  
  37. // nom du répertoire où se trouve les mini images (répertoire "mini" par défaut)
  38.   $mini = "img/".$_GET['rub']."/".$_GET['page']."/miniatures/"; // (n'oubliez pas le '/' à la fin... :o)
  39. // Nombre de Photos par ligne (5 par défaut)
  40.   $nbPhotosParLigne = 3;
  41. // Largeur d'une diapo (100 par défaut)
  42.   $largeurDiapo = 150;
  43. // Extention des photos ('.jpg' par défaut ou '.gif')
  44.   $extPhotos=".jpg";
  45. */
  46. // ------------------------------------------------------------------------- //
  47. // Début du Programme
  48.   $repertoire = opendir($mini);
  49.   while ($entree = readdir($repertoire))
  50.   {
  51.     if ($entree != "." && $entree != ".." )
  52.       // Attention: Les mini-photos sont détectées qu'avec les
  53.       // extensions ".jpg" et ".gif"
  54.       if (($ExtImg = strtolower(substr($entree, -4))==".jpg" ) ||
  55.           ($ExtImg = strtolower(substr($entree, -4))==".gif" ))
  56.       {
  57.         // Methode pour trier par date
  58.         $tFichiers[] = filemtime($mini.$entree)."+".$entree;
  59.         // NbImages = sizeof($tFichiers);
  60.       }
  61.   }
  62.   closedir($repertoire);
  63.   // ------------------------------------------------------------------------------------ le tri décroissant des dates ! Supprimer le "r" pour trier dans l'ordre croissant.
  64.   rsort($tFichiers);
  65.   // Creation des tableaux synchro 'NomImage' et 'DateImage'
  66.   for ($cpt = 0; $cpt < sizeof($tFichiers); $cpt++)
  67.   {
  68.     // Découpage
  69.     $tVals = explode("+", $tFichiers[$cpt]);
  70.     // génère 2 tableaux synchronisés
  71.     $tImages[] = $tVals[1];
  72.     $tDates[] = "[".date("d m Y",$tVals[0])."]<br />";
  73.   }
  74.   // generation de la partie HTML
  75. // --------------------------------------------------------------------------------------- fonction du nombre de fichiers
  76. function count_files($folder, $ext, $subfolders)
  77. {
  78.      // on rajoute le / à la fin du nom du dossier s'il ne l'est pas  
  79.      if(substr($folder, -1) != '/')
  80.         $folder .= '/';
  81.      
  82.      // $ext est un tableau?  
  83.      $array = 0;
  84.      if(is_array($ext))
  85.         $array = 1;
  86.      // ouverture du répertoire  
  87.      $rep = @opendir($folder);
  88.      if(!$rep)
  89.         return -1;
  90.        
  91.      $nb_files = 0;
  92.      // tant qu'il y a des fichiers  
  93.      while($file = readdir($rep))
  94.      {
  95.         // répertoires . et ..  
  96.         if($file == '.' || $file == '..')
  97.          continue;
  98.        
  99.         // si c'est un répertoire et qu'on peut le lister  
  100.         if(is_dir($folder . $file) && $subfolders)
  101.             // on appelle la fonction  
  102.          $nb_files += count_files($folder . $file, $ext, 1);
  103.         // vérification de l'extension avec $array = 0  
  104.         else if(!$array && substr($file, -strlen($ext))== $ext)
  105.          $nb_files++;
  106.         // vérification de l'extension avec $array = 1     
  107.         else if($array && in_array(substr($file, -strlen($ext)), $ext))
  108.          $nb_files++;
  109.      }
  110.      
  111.      // fermeture du rep  
  112.      closedir($rep);
  113.      return $nb_files;
  114. }
  115. // ------------------------------------------------------------------------ affichage du nombre de fichiers
  116. echo $nb_files . $hr.'<br />';
  117. // ------------------------------------------------------------------------ listage des images dans un tableau
  118.   // définition du tableau HTML
  119.   echo "<table width='100%' border='0'>";
  120.  
  121.   reset($tImages);
  122.   reset($tDates);
  123.   $ligne=0;
  124.   while (($ligne*$nbPhotosParLigne)<(sizeof($tImages)))
  125.   {
  126.     echo "<tr>";
  127.     for ($pos = 0; $pos < $nbPhotosParLigne; $pos++)
  128.     {
  129.       $ind=$ligne*$nbPhotosParLigne+$pos;
  130.       if ($tImages[$ind]!="" )
  131.       {
  132.           $NomImg=substr($tImages[$ind],0,strlen($tImages[$ind])-4);
  133.           echo "<td align='center' valign='bottom'>";
  134.           echo "<span class='images'><a target='_blank' href='img/img.php?img=./".$_GET['rub']."/".$_GET['page']."/".$NomImg."$extPhotos'><img alt='".$_GET['page']." Nom du site' title='".$_GET['page']." Nom du site' border='0' src='";
  135.           echo $mini.$tImages[$ind];
  136.           echo "'></a></span><br />";
  137.           echo "<b>";
  138. // Afficher la taille de l'image
  139. imgt("img/".$_GET['rub']."/".$_GET['page']."/".$NomImg.".jpg" );
  140.   
  141.    echo "</b><br />".$tDates[$ind]."<br /><br /></td>";
  142.       }
  143.       else
  144.       {
  145.           echo "<td valign='middle' align='center'></td>";
  146.       }
  147.     }
  148.     print "</tr>";
  149.     $ligne++;
  150.   }
  151.   echo "</table>";
  152.   // echo "[".date("Y-m-d H:i",$tVals[0])."] <B>".$tVals[1]."</B><BR>\n";
  153.   // $tVals[1] est le fichier image
  154. ?>

Voyez-vous un moyen simple de faire une pagination avec ça ? (sans passer par un autre album photo, quoi...)


Message édité par Heartless le 19-12-2006 à 15:59:18
Reply

Marsh Posté le 19-12-2006 à 16:02:22    

Heartless a écrit :

wow... o_o je saurais pas faire tout ça moi... while c'est pas uniquement pour els bases de données ? <_<
 
désolé moi j'ai juste repris un script trouvé sur le net et modifié des trucs mais pour ajouter des fonctions comme ça je suis dans le brouillard... =/
 
pour le script de galerie que tu me montres là c'set trop d'options pour ce que je veux faire ! je ne veux pas de catégorie, je veux afficher le contenu d'un seul répertoire donc pas besoin de tout ça. le must serait juste une pagination en fonction du nombre de lignes dans mon tableau ! ^^
 
je peux te montrer mon script si tu veux <_<


 
bon, déjà, le while, c'est pas du tout pour les BD, c'est une instruction de boucle qu'on trouve dans la plupart des langages de programmation (dont PHP). Donc, tout ce que je t'ai décrit, c'est à faire dans le code source de php.
 
Pour le script que je t'ai passé, y'a juste à le mettre direct dans le répertoire et c'est tout, ça fonctionne (à moins que depuis la version que j'utilise, le concepteur ait compliqué son script).

Reply

Marsh Posté le 19-12-2006 à 16:35:04    

bon j'ai testé le script et je m'y perd... y'a beaucoup trop de choses pour moi ! XD
 
mais si quelqu'un trouvait un moyen avec mon script juste au dessus, ça serait le top ! ^^

Reply

Marsh Posté le 19-12-2006 à 17:00:52    

normalement, y'a que les premières lignes qui sont intéressantes. et même,  en ne touchant à rien, ça doit fonctionner. Le reste, c'est pour personnaliser...

Reply

Marsh Posté le 19-12-2006 à 17:07:14    

ahhhhhh j'ai rien touché et t'as raison ça marche... mais <_< ile ts plus long que le mien à charger les miniatures o_o

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed