2008-10-16 17 views
7

Tengo un script que llama dinámicamente y muestra imágenes de un directorio, ¿cuál sería la mejor manera de paginar esto? Me gustaría poder controlar el número de imágenes que se muestran por página a través de una variable dentro del script. Estoy pensando en utilizar variables de URL (es decir, http://domain.com/page.php?page=1) pero no estoy seguro de cómo hacerlo.PHP Dynamic Pagination Sin SQL

Gracias por la ayuda.

Respuesta

9

paginación es el mismo concepto con o sin sql. solo necesita sus variables básicas, entonces puede crear el contenido que desee. aquí hay un cuasi-código:

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

Espero que lo ayude a comenzar!

+0

Buen comienzo, gracias, hace mucho sentido. Veré qué puedo hacer con eso mañana. – PHLAK

0

Si nombra sus imágenes 01.jpg, 02.jpg, facilita la paginación. Luego usa glob para obtener todas las imágenes en una matriz y ordenarla.

+0

significa que en cada carga de página tiene la misma matriz de imágenes en el mismo orden. Otra cosa que podría hacer es tener un archivo captions.php con una serie de títulos indexados por la imagen #. – Galen

+0

Entiendo lo que dices, pero las imágenes no necesariamente se numerarán así. – PHLAK

10

Esta es una función que a menudo uso para hacer paginación. Espero eso ayude.

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

Esto devolverá:

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 
) 

Con todo lo que está a continuación, los datos bastante bien armado para hacer los enlaces de paginación.

0

En caso de duda, utilice javascript! Esto podría ayudar también: http://www.webplicity.net/flexigrid/

podría ser bueno para aplicaciones galeria similar, aunque nunca he probado :)

+0

Nah ... tratando de mantenerse alejado de Javascript. – PHLAK