2008-10-16 7 views
7

Tôi có một tập lệnh tự động gọi và hiển thị hình ảnh từ một thư mục, cách tốt nhất để phân trang này là gì? Tôi muốn có thể kiểm soát số lượng hình ảnh được hiển thị trên mỗi trang thông qua một biến trong tập lệnh. Tôi đang nghĩ đến việc sử dụng các biến URL (tức là - http://domain.com/page.php?page=1) nhưng tôi không chắc chắn về cách thực hiện điều này.Phân trang động PHP Nếu không có SQL

Cảm ơn sự giúp đỡ.

Trả lời

9

phân trang là cùng một khái niệm có hoặc không có sql. bạn chỉ cần các biến cơ bản, sau đó bạn có thể tạo nội dung bạn muốn. đây là một số mã bán hàng:

$itemsPerPage = 5; 

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

function getTotalItems() { 
// since they're images, perhaps we'll scan a directory of images to determine 
// how many images we have in total 
} 

function getItemsFromPage($page, $itemsPerPage) { 
// function to grab $itemsPerPage based on which $page we're on 
} 

function getPager($totalPages, $currentPage) { 
// build your pager 
} 

hy vọng sẽ giúp bạn bắt đầu!

+0

Khởi đầu tốt, cảm ơn, làm cho rất nhiều ý nghĩa. Tôi sẽ xem những gì tôi có thể làm với điều đó vào ngày mai. – PHLAK

0

Nếu bạn đặt tên cho hình ảnh của mình là 01.jpg, 02.jpg sẽ dễ dàng phân trang hơn. Sau đó sử dụng glob để có được tất cả các hình ảnh vào một mảng và sắp xếp nó.

+0

có nghĩa là trên mỗi lần tải trang, bạn có cùng một mảng hình ảnh theo cùng một thứ tự. Một điều bạn có thể làm là có một tệp captions.php với một mảng phụ đề được lập chỉ mục bằng hình ảnh #. – Galen

+0

Tôi nhận được những gì bạn đang nói, nhưng những hình ảnh không nhất thiết phải được đánh số như thế. – PHLAK

10

Đây là chức năng tôi thường sử dụng để thực hiện phân trang. Hy vọng nó giúp.

function paginate($page, $total, $per_page) { 
    if(!is_numeric($page)) { $page = 1; } 
    if(!is_numeric($per_page)) { $per_page = 10; } 
    if($page > ceil($total/$per_page)) $page = 1; 
    if($page == "" || $page == 0) { 
     $page = 1; 
     $start = 0; 
     $end = $per_page; 
    } else { 
     $start = ($page * $per_page) - ($per_page); 
     $end = $per_page; 
    } 

    $prev_page = ""; 
    $next_page = ""; 
    $all_pages = array(); 
    $selected = ""; 
    $enabled = false; 

    if($total > $per_page) { 
     $enabled = true; 
     $prev = $page - 1; 
     $prev_page = ($prev == 0) ? 0 : $prev; 

     $next = $page + 1; 
     $total_pages = ceil($total/$per_page); 

     $next_page = ($next <= $total_pages) ? $next : 0; 

     for($x=1;$x<=$total_pages;$x++) { 
      $all_pages[] = $x; 
      $selected = ($x == $page) ? $x : $selected; 
     } 
    } 

    return array(
     "per_page" => $per_page, 
     "page" => $page, 
     "prev_page" => $prev_page, 
     "all_pages" => $all_pages, 
     "next_page" => $next_page, 
     "selected" => $selected, 
     "start" => $start, 
     "end" => $end, 
     "enabled" => $enabled 
    ); 
} 

// ex: we are in page 2, we have 50 items, and we're showing 10 per page 
print_r(paginate(2, 50, 10)); 

này sẽ trở lại:

Array 
(
    [per_page] => 10 
    [page] => 2 
    [prev_page] => 1 
    [all_pages] => Array 
     (
      [0] => 1 
      [1] => 2 
      [2] => 3 
      [3] => 4 
      [4] => 5 
     ) 
    [next_page] => 3 
    [selected] => 2 
    [start] => 10 
    [end] => 10 
    [enabled] => 1 
) 

Với tất cả những dữ liệu bạn đang sau đó khá tốt trang bị để làm cho các liên kết pagination.

0

Khi nghi ngờ sử dụng javascript! Điều này có thể giúp quá: http://www.webplicity.net/flexigrid/

Có thể là tốt cho các ứng dụng galery giống như, mặc dù tôi chưa bao giờ thử nó :)

+0

Không ... cố gắng tránh xa Javascript. – PHLAK