2008-10-16 15 views
7

Ich habe ein Skript, das Bilder aus einem Verzeichnis dynamisch aufruft und anzeigt, was wäre der beste Weg, um dies zu paginieren? Ich möchte die Anzahl der Bilder pro Seite über eine Variable im Skript steuern können. Ich denke an die Verwendung von URL-Variablen (zB - http://domain.com/page.php?page=1), bin mir aber nicht sicher, wie das geht.PHP dynamische Paginierung ohne SQL

Danke für die Hilfe.

Antwort

9

Paginierung ist das gleiche Konzept mit oder ohne sql. Sie brauchen nur Ihre grundlegenden Variablen, dann können Sie den gewünschten Inhalt erstellen. hier ist ein Quasi-Code:

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

hoffe, dass hilft Ihnen beim Einstieg!

+0

Guter Start, danke, sehr viel Sinn macht. Ich werde sehen, was ich morgen damit machen kann. – PHLAK

0

Wenn Sie Ihre Bilder 01.jpg, 02.jpg nennen, erleichtert dies das Paginieren. Dann benutze glob, um alle Bilder in ein Array zu bekommen und es zu sortieren.

+0

Bedeutung auf jeder Seite laden Sie haben das gleiche Array von Bildern in der gleichen Reihenfolge. Eine andere Sache, die Sie tun könnten, ist eine captions.php Datei mit einem Array von Bildunterschriften, die durch image # indiziert sind. – Galen

+0

Ich verstehe, was du sagst, aber die Bilder werden nicht unbedingt so nummeriert. – PHLAK

10

Dies ist eine Funktion, die ich häufig für die Seitenumbruch benutze. Ich hoffe es hilft.

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

Dies wird zurück:

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 
) 

Mit allen Daten, die Sie dann bewaffnet ziemlich gut, um die Paginierung Links zu machen.

0

Im Zweifelsfall Javascript verwenden! Dies könnte auch helfen: http://www.webplicity.net/flexigrid/

Könnte für Galerie-ähnliche Anwendungen gut sein, obwohl ich habe nie versucht, es :)

+0

Nein ... versuchen, Javascript zu vermeiden. – PHLAK