2010-06-30 7 views
1

J'essaie de récupérer des images à partir d'un dossier en utilisant glob() et je veux qu'il soit paginé de sorte qu'il n'affiche que 3 images par page. De fouiller sur Internet et ici sur S.O. J'ai le code ci-dessous. Le problème est qu'il tire seulement trois images du répertoire et quand je clique sur la page suivante il montre les mêmes 3 images.pagination PHP en utilisant glob pour récupérer des images

Quel serait le meilleur moyen d'extraire des images différentes pour chaque page en utilisant glob?

 $imagesDir = 'uploadedImages/thumbs/*'; 
    $itemsPerPage = 3; 
    $currentPage = isset($_GET['page']) ? $_GET['page'] : 1; 
    $totalItems = getTotalItems($imagesDir); 
    $totalPages = ceil($totalItems/$itemsPerPage); 

    getItemsFromPage($currentPage, $itemsPerPage, $imagesDir); 
    getPager($totalPages, $currentPage); 

    //counts the number of files in the dir 
    function getTotalItems($imagesDir) { 
     $numImages = count(glob($imagesDir)); 
     return $numImages; 
    } 

    //gets the files from the dir 
    function getItemsFromPage($page, $numItems, $dir) { 

     $x = 0; 

     //get the first 3 items from the 
     foreach(glob($dir) as $image) 
     { 
     if($x < $numItems) 
     { 
     echo "<li><img src=\"$image\" alt=\"$image\" /></li>"; 
     $x++; 
     } 
     else 
     { 
     break; 
     } 
     } 
    } 

    //creates the pages and the links 
    function getPager($totalPages, $currentPage) { 

     // if we're not on the first page, show the previous page and first page links 
     if($currentPage > 1) 
     { 
     $prevPage = $currentPage - 1; 

     echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=1'><<</a> ";  
     echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$prevPage'><</a> "; 
     } 

     $range = 1; 

     // show what page we're on and the page numbers surround this page 
     for($x = ($currentPage - $range); $x < ($currentPage + $range) +1; $x++) 
     { 
     if(($x > 0) && ($x <= $totalPages)) 
     { 
     if($x == $currentPage) 
     { 
     echo " [<b>$x</b>] "; 
     } 
     else 
     { 
     echo " <a href='{$_SERVER['PHP_SELF']}?currentPage=$x'>$x</a> "; 
     } 
     } 
     } 

     // if we're not on the last page show the next page and last page links 
     if($currentPage != $totalPages) 
     { 
     $nextPage = $currentPage + 1; 

     echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$nextPage'>></a> "; 
     echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$totalPages'>>></a> "; 
     } 
    }  

Répondre

1
function getItemsFromPage($page, $numItems, $dir) { 

    $offset = ($page - 1) * $numItems; 
    $x = 0; 

    //get the first 3 items from the 
    foreach(glob($dir) as $image) 
    { 
    if($x < $offset) 
    { 
    $x++; 
    } 
    elseif($x < $numItems + $offset) 
    { 
    echo "<li><img src=\"$image\" alt=\"$image\" /></li>"; 
    $x++; 
    } 
    else 
    { 
    break; 
    } 
    } 
} 
+0

celui-ci ajouterait de nouvelles images à la page, de plus en plus :) –

+0

Il devrait ajouter au plus des images $ numItems. – amccausl

+0

OMG l'a eu! il utilise des boucles vides –

0

le problème est dans la fonction getItemsFromPage. Il commence toujours $x = 0; alors que $ x doit être varier, dépend du numéro de page

0

si quelqu'un veut récupérer le nom de fichier d'image sans l'extension de fichier utilisation pathinfo - Retourne des informations sur un chemin de fichier.

$dirname = "cards/"; 
$images = glob($dirname . "*.png"); 
foreach ($images as $image) { 
    $title = pathinfo($image); 
    echo $title['filename']; 
} 
Questions connexes