我正在处理一个项目,在那里我扫描一个目录并从显示图库图像的目录中提取所有图像。问题是,一些画廊有300多个图像,这导致滞后。我环顾四周,但没有找到一种方法让我的代码分页。这是我的代码片段,其中我运行foreach循环并从目录中获取每个图像源:
/** get the model's gallery
===================================================== **/
if(isset($_GET['count'])){
$photo_count = $_GET['count'];
}
if(isset($_GET['model_dir'])){
$model_dir = $_GET['model_dir'];
/** get the higres gallery images
===================================================== **/
$root_directory = $_SERVER['DOCUMENT_ROOT'];
$photo_directory = "{$root_directory}/members/content/model_gallery/{$model_dir}";
$gallery_list = scandir($photo_directory);
$gallery_list = array_diff($gallery_list, array('.', '..'));
foreach($gallery_list as $gallery){
echo "
<a href='{$index_url}join.php'>
<img alt='' src='{$site_url}members/content/model_gallery/{$model_dir}/{$gallery}'
data-image='{$site_url}members/content/model_gallery/{$model_dir}/{$gallery}'
data-description=''>
</a>
";
}
}
我将非常感谢有关如何对此代码进行分页的任何想法。
答案 0 :(得分:1)
/** get the model's gallery
===================================================== **/
if(isset($_GET['count'])){
$photo_count = mysqli_real_escape_string($_GET['count']);
}
if(isset($_GET['model_dir'])){
$model_dir = mysqli_real_escape_string($_GET['model_dir']);
/** get the higres gallery images
===================================================== **/
$root_directory = $_SERVER['DOCUMENT_ROOT'];
$photo_directory = "{$root_directory}/members/content/model_gallery/{$model_dir}";
$gallery_list = scandir($photo_directory);
$gallery_list = array_diff($gallery_list, array('.', '..'));
$photo_count = $photo_count;
$gallery_limit = 35;
$qty_pages = ceil($photo_count / $gallery_limit);
if (isset($_GET["page"])) { $page = $_GET["page"]; } else { $page=1; }
$start_from = $page * $gallery_limit - $gallery_limit ;
$gallery_list = array_slice($gallery_list,$start_from,$gallery_limit);
echo "<div id='gallery'>";
foreach($gallery_list as $gallery){
echo "
<a href='{$index_url}join.php'>
<img alt='' src='{$site_url}members/content/model_gallery/{$model_dir}/{$gallery}'
data-image='{$site_url}members/content/model_gallery/{$model_dir}/{$gallery}'
data-description=''>
</a>
";
}
echo "</div>";
echo "<div class='contain_pagination'>";
if($photo_count != 0){
echo "<nav class='contain_model_nav'><ul class='pagination'>";
for ($i = 1; $i <= $qty_pages; $i++){
echo "<li><a href='{$index_url}pages.php?id=gallerytour&model_dir={$model_dir}&count={$photo_count}&total={$total_photo_count}&page={$i}'></a>";
echo "</ul></nav>";
}
}
echo "</div>";
}
?>
<script type="text/javascript">
$(document).ready(function(){
$('.pagination').pagination({
items: <?php echo $photo_count;?>,
itemsOnPage: <?php echo $gallery_limit;?>,
cssStyle: 'light-theme',
currentPage: <?php echo $page;?>,
hrefTextPrefix: '<?php echo $index_url ?>pages.php?id=gallerytour&model_dir=<?php echo $model_dir; ?>&count=<?php echo $photo_count; ?>&total=<?php echo $total_photo_count; ?>&page='
});
});
</script>
这就是我能够对foreach循环进行分页的方式。我将nogad的想法用于array_slice函数,然后我使用这个开源来实现分页功能: here
从那里我确定我有$ photo_count,其中包含目录中所有图像的计数,以及我将要分页的内容。
然后我在每页设置$ gallery_limit,这是35。从那里,我确定了$ qty_pages的页数,除以总$ photo_count /和$ gallery_limit
接下来我检查页面是否设置,如果是,那么$ page is ==到$ _GET [page]否则它是$ page is == 1.
接下来,我通过乘以$ page * $ gallery_limit获得$ start_from值,然后减去$ gallery_limit
接下来我为$ gallery_list创建一个数组= array_slice($ gallery_list,$ start_from,$ gallery_limit);
因此我在函数中的参数是$ gallery_list的整个src图像数组,从哪里开始的整数,以及$ gallery_limit的整数,在这种情况下我将其设置为默认值35。 / p>
接下来,我检查$ photo_count是否为!= 0,然后运行我的正常for循环。网址的网址中的参数显然取决于您的网站。需要注意的一件事是,只需将&amp; page = {$ i}参数添加到网址的末尾即可。
最后,您使用分页插件为分页功能编写一个小的jQuery脚本。你应该能够破译我在jQuery脚本中所做的事情。我希望这可以帮助别人,因为我已经查看了其他答案,但没有人得到满意的结果。他们几乎像OlegLoginov回复你的问题一样愚蠢。