开发者

PHP pagination using glob to retrieve images

开发者 https://www.devze.com 2023-01-05 08:52 出处:网络
I\'m trying to retrieve images from a folder using glob() and i want it to be paginated so it only displays 3 images per page.

I'm trying to retrieve images from a folder using glob() and i want it to be paginated so it only displays 3 images per page.

From digging around on the internet and here on S.O. i've got the code below. The problem is that it only pulls three images from the directory and when i click on the next page it shows the same 3 images.

What would be the best way to fetch different images for each page using 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($to开发者_开发问答talPages, $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> ";
      }
     }    


 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;
   }
  }
 }


the problem is in the getItemsFromPage function. It always starts from $x = 0; while $x should be vary, depends on the page number


if someone wants to retrieve the image filename without the file extension use pathinfo - Returns information about a file path.

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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号