Динамическая разбивка PHP без SQL
У меня есть сценарий, который динамически вызывает и отображает изображения из каталога, что было бы лучшим способом для этого? Я хотел бы иметь возможность контролировать количество изображений, отображаемых на странице, с помощью переменной внутри скрипта. Я думаю использовать URL varriables (т.е. – http://domain.com/page.php?page=1 ), но я не уверен, как это сделать.
Спасибо за помощь.
4 Solutions collect form web for “Динамическая разбивка PHP без SQL”
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 }
надеюсь, что вы начнете!
Это функция, которую я часто использую для разбиения на страницы. Надеюсь, поможет.
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));
} else {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 )
Со всеми этими данными вы тогда хорошо вооружены, чтобы сделать ссылки на страницы.
Если у вас есть сомнения, используйте javascript! Это также может помочь: http://www.webplicity.net/flexigrid/
Возможно, это хорошо для похожих на галерею приложений, хотя я никогда не пробовал 🙂
Если вы назовете свои изображения 01.jpg, 02.jpg, это упростит разбиение на страницы. Затем используйте glob, чтобы получить все изображения в массив и отсортировать его.