Listage fichier par pagination

Petit nouveau ! | 4 Messages

09 déc. 2015, 12:12

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

Mammouth du PHP | 1967 Messages

09 déc. 2015, 12:29

hello,

pourquoi 2 fois $j++; ?
Je pense que tu devrais le mettre dans ta condition et non pas après. car pour le moment il compte les ligne non affichée comme .. et .

Sinon je te propose de mettre en place un cache, à chaque affichage d'une page il y a une lecture de tout le dossier, donc une lourde charge pour ton serveur. Tu peux par exemple sauver ton tableaux $Fichier en session

Pourrais tu utiliser la balise
 pour ton code, celui-ci sera beaucoup plus lisible
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Petit nouveau ! | 4 Messages

09 déc. 2015, 13:41

Bonjour et merci pour ta réponse.

les variable $i++; & $j++; ne sont pas les même i et j ;-)

pour l'inclure dans la condition elle n'est pas pris en compte.

pour mettre en session je pense que d’abord je devrais régler se bug puis oui ;-)
<?php

// 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 = 5;  
// 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++;
 
     }
 
 echo ''; 
 
 
 
?>
																
</div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
									</tr>
								</tfoot>
							</table>
<?
echo '<br><br><p align="center" >';
 
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////Pagination des résultats/////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
    $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);
?>

Mammouth du PHP | 1967 Messages

09 déc. 2015, 14:08

J'ai lu trop vite, mais je plussoie ton $j++ doit être inclus dans ta condition pour compter les images affichées et non pas les images parcourue par ta boucle et éventuellement omise par ta condition. Du coup le début ne pourra pas être calculé de cette manière.

Tout bien réfléchi, tu ferai mieux d'exclure tes lignes dans ta boucle précédente, celle qui rempli ton tableau $fichier
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Petit nouveau ! | 4 Messages

09 déc. 2015, 15:54

Merci pour ta réponce,

mais impossible il me liste bien mais fichier mais alors n'utilise plus la variable $nbimages


J'ai lu trop vite, mais je plussoie ton $j++ doit être inclus dans ta condition pour compter les images affichées et non pas les images parcourue par ta boucle et éventuellement omise par ta condition. Du coup le début ne pourra pas être calculé de cette manière.

Tout bien réfléchi, tu ferai mieux d'exclure tes lignes dans ta boucle précédente, celle qui rempli ton tableau $fichier

Mammouth du PHP | 1967 Messages

09 déc. 2015, 16:04

Pourquoi n'utilise tu pas le résultat de ta fonction glob $images_sur_le_serveur
D'après http://php.net/glob elle te retourne la liste des fichiers que tu désire non ?
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Petit nouveau ! | 4 Messages

09 déc. 2015, 17:01

je l'ulise deja dans le script,

$images_sur_le_serveur = glob("uploads/audio/club/".$_GET["id"]."/*.mp3");
$combien_d_images_sur_le_serveur = count($images_sur_le_serveur);

$combien_d_images_sur_le_serveur est count de $images_sur_le_serveur qui est lui le glob de uploads/audio/club/".$_GET["id"]."/*.mp3 ;-)

mais j'ai remarquer que le code est vraiment fiable a partir de 2 fichier dans le dossier surement du au ".." et "." qui son pris dans le count des fichiers

Mammouth du PHP | 1967 Messages

09 déc. 2015, 17:36

Donc utilise cette variable là plutot que opendir et et readdir
tu parcours ce tableau là de $debut à $debut + $nbimages (avec un for)
et tu affiche ces fichiers là.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube