2008-10-16 4 views
7

У меня есть сценарий, который динамически вызывает и отображает изображения из каталога, что было бы лучшим способом для этого? Я хотел бы иметь возможность контролировать количество изображений, отображаемых на странице, с помощью переменной внутри скрипта. Я думаю об использовании URL varriables (т.е. - http://domain.com/page.php?page=1), но я не уверен, как это сделать.PHP Динамическая разбивка на страницы без SQL

Спасибо за помощь.

ответ

9

pagination - это та же концепция с или без sql. вам просто нужны ваши основные переменные, тогда вы можете создать необходимый контент. вот какой-то квазикод:

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

Надеюсь, что вам поможет!

+0

хорошего старта, спасибо, делает много смысла. Я посмотрю, что я могу с этим сделать завтра. – PHLAK 2008-10-16 03:38:47

0

Если вы назовете ваши изображения 01.jpg, 02.jpg, это упростит разбиение на страницы. Затем используйте glob, чтобы получить все изображения в массив и отсортировать его.

+0

Значение для каждой загрузки страницы имеет одинаковый массив изображений в том же порядке. Еще одна вещь, которую вы можете сделать, это иметь файл captions.php с массивом титров, индексированных по изображению #. – Galen 2008-10-16 04:14:49

+0

Я получаю то, что вы говорите, но изображения не обязательно будут пронумерованы так. – PHLAK 2008-10-16 07:37:00

10

Это функция, которую я часто использую для разбиения на страницы. Надеюсь, поможет.

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

Это вернет:

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 
) 

Со всем, что данные, которые вы затем довольно хорошо вооружены, чтобы сделать ссылки разбивки на страницы.

0

Если у вас есть сомнения, используйте javascript! Это тоже может помочь: http://www.webplicity.net/flexigrid/

Может быть полезен для Galery подобных приложений, хотя я никогда не пробовал :)

Смежные вопросы