2008-10-16 20 views
7

Mam skrypt, który dynamicznie wywołuje i wyświetla obrazy z katalogu, jaki byłby najlepszy sposób na ich paginację? Chciałbym móc kontrolować liczbę obrazów wyświetlanych na stronie za pomocą zmiennej w skrypcie. Zastanawiam się nad używaniem varriables adresów URL (np. - http://domain.com/page.php?page=1), ale nie jestem pewien, jak to zrobić.Dynamiczna paginacja PHP Bez SQL

Dzięki za pomoc.

Odpowiedz

9

Pagynacja to ta sama koncepcja z lub bez sql. potrzebujesz tylko podstawowych zmiennych, możesz utworzyć żądaną zawartość. oto jakiś quasi-kod:

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

nadzieję, że pomoże Ci to zacząć!

+0

dobry początek, dzięki sprawia, że ​​wiele sensu. Zobaczę, co mogę z tym zrobić jutro. – PHLAK

0

Jeśli wymienisz swoje zdjęcia 01.jpg, 02.jpg, ułatwi to stronicowanie. Następnie użyj globu, aby umieścić wszystkie obrazy w tablicy i posortuj ją.

+0

oznacza, że ​​przy ładowaniu każdej strony masz tę samą tablicę obrazów w tej samej kolejności. Inną rzeczą, którą możesz zrobić, jest plik captions.php z tablicą napisów indeksowanych obrazem #. – Galen

+0

Dostaję to, co mówisz, ale zdjęcia niekoniecznie będą numerowane w ten sposób. – PHLAK

10

Jest to funkcja, której często używam do tworzenia stronicowania. Mam nadzieję, że to pomoże.

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

ten powróci:

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 
) 

Ze wszystkimi tymi danymi jesteś wtedy dość dobrze uzbrojony, aby linki paginacji.

0

W razie wątpliwości użyj javascript! To może pomóc też: http://www.webplicity.net/flexigrid/

może być dobre dla Galery podobny apps, chociaż nigdy nie próbowałem go :)

+0

Nah ... próbuje omijać JavaScript. – PHLAK