8768 sujets

Développement web côté serveur, CMS

Bonjour,

je cherche a lister des fichier d'un répertoire avec une pagination.

le code suivant fonctionne au niveau pagination mais quand je dit par exemple 5 maximum par page et bien j'en n'ai 3 si je mets 4 et bien je n'ai pas 2 mais 5 enfin rien de normal ....



<?
// On indique au script ou se trouve les images a lister par rapport a l emplacement de ce script
$dir = opendir("uploads/audio/club/".$_GET["id"]."/");
// remplacer 10 par le nombre d'images par page souhaité
$nbimages = 6;  
// On donne le nom du dossier ou sont présente les images par rapport au script en précisant l extension des fichier à lister
$images_sur_le_serveur = glob("uploads/audio/club/".$_GET["id"]."/*.mp3");
// On compte le nombre d image
$combien_d_images_sur_le_serveur = count($images_sur_le_serveur);  
// On déclare la pagination
$pagei = isset($_GET['pagei']) ? intval($_GET['pagei']) : 1;
if ($_GET['pagei'] == "") { $_GET['pagei'] = 1; }
$debut = ($_GET['pagei'] - 1)  * $nbimages;
$i = $debut;
$j = 1;
 
     while ($Fichier = readdir($dir))
     {
     $files[] = $Fichier;
 
     }
 
     while ($i >= $debut and $j <= $nbimages)
     {
         if ( $files[$i] != ".." && $files[$i] != "." && $files[$i] != "" && ereg("(.mp3)",$files[$i]) )
         {
 

      	  echo "<tr>";
           echo "<td><div style=\"text-align: left\"><a href='uploads/audio/club/".$_GET["id"]."/'.$files[$i].''>";
           echo $files[$i];           
           echo '</a></div></td>';
           echo "<tr>"; 
}
     $i++;
     $j++;
 
     }
 $derniere_page = ceil($combien_d_images_sur_le_serveur / $nbimages);
    if ($pagei > 1) {
        echo '<a  href="?page=club-sets&id='.$_GET["id"].'" ><span>Début</span></a>&nbsp;&nbsp;<a href="?page=club-sets&id='.$_GET["id"].'&pagei=' . ($pagei - 1) . '" ><span>Précédent</span></a>';
    }
 
// MAX_NB_PAGE est égal au nombre de lien vers les pages a afficher au maximum (ex: pour 10 pages a afficher il y aura <<<< - 1 - 2 - 3 - 4 - 5 - 6 - >>>>)
define('MAX_NB_PAGES', 5); // Nombre maximal de pages apparaissant pour la navigation    
for ($i = max(1, min(max($pagei - MAX_NB_PAGES / 2, 1), $derniere_page - MAX_NB_PAGES)), $j = 0; $j <= MAX_NB_PAGES && $i <= $derniere_page; $i++, $j++) {
 
 if ($i == $pagei) {
        if ($pagei > 1) {echo '&nbsp;&nbsp;'; }
            echo '<span >&nbsp;&nbsp;' . $i . '&nbsp;&nbsp;</span>';
        } else {
            echo '&nbsp;&nbsp;<a href="?page=club-sets&id='.$_GET["id"].'&pagei=' . $i . '"><span>' . $i . '</span></a>';
        }
    }
    if ($pagei < $derniere_page) {
        echo '&nbsp;&nbsp;<a href="?page=club-sets&id='.$_GET["id"].'&pagei=' . ($pagei + 1) . '" ><span>Suivant</span></a>&nbsp;&nbsp;<a  href="?page=club-sets&id='.$_GET["id"].'&pagei=' . ($derniere_page) . '" ><span >Fin</span></a>';
    }
 
 
    echo '</p>';
 
     closedir($dir);
?>




Merci d'avance pour votre aide Smiley cligne
Salut,
J'ai l'impression qu'il y a des erreurs entre les $_GET['pagei'] et $pagei.
De plus cela me semble un peu compliqué pour pas grand chose... Je verrais bien une solution du genre (je n'ai pas test mais ça me semble plus simple : je connais le début, si le compteur est avant le debut, je ne fais rien, si il est entre le début et le (debut+le nombre d'image à afficher) j'affiche le fichier, si j'ai affiché le nombre d'image qu'il faut je sors de la boucle.)

// On indique au script ou se trouve les images a lister par rapport a l emplacement de ce script
$dir = opendir("uploads/audio/club/".$_GET["id"]."/");
// On donne le nom du dossier ou sont présente les images par rapport au script en précisant l extension des fichier à lister
$images_sur_le_serveur = glob("uploads/audio/club/".$_GET["id"]."/*.mp3");
// On compte le nombre d image
$combien_d_images_sur_le_serveur = count($images_sur_le_serveur);  

// On déclare la pagination
// remplacer 10 par le nombre d'images par page souhaité
$nbimages = 6;
$pagei = isset($_GET['pagei']) ? intval($_GET['pagei']) : 1;
if ($_GET['pagei'] == "") { $pagei = 1; }


$debut = ($pagei - 1)  * $nbimages;
$compteur = 0;
 
while ($Fichier = readdir($dir))
{
    if($compteur>=$debut and $compteur<($debut+$nbimages))
    {
        if ( $Fichier != ".." && $Fichier != "." && $Fichier != "" && ereg("(.mp3)",$Fichier) )
        {
            echo "<tr>";
            echo "<td><div style=\"text-align: left\"><a href='uploads/audio/club/".$_GET["id"]."/'.$Fichier.''>";
            echo $Fichier;           
            echo '</a></div></td>';
            echo "<tr>";
            
        }
    }
    else if($compteur>=($debut+$nbimages)) //pas besoin de lire tous les fichiers si on a deja atteint la fin de ceux que l'on affiche
    {
        break; 
    }
    
    $compteur++;
}

Modifié par mathieu1004 (14 Dec 2015 - 13:03)
Bonjour,

merci de ta réponse, mais cela ne fonctionne pas enfin si mais j'ai tous mes fichiers sur la 1er page et quand je clic sur la 2eme ou autre page il son vide, il prend bien la variable nbimage pour le calcul de la pagination m'est pas pour se qui est afficher.
Hum en relisant je viens de voir que j'ai fais des erreurs en oubliant les $ devant la variable compteur, je viens d’édité la réponse. Tu avais corrigé ce problème ?
Je n'ai pas test mais je ne vois pas pourquoi il afficherait tout :s (au pire il aurait du rien écrire mais pas tout Smiley ohwell )