如何正确分页foreach循环

时间:2017-10-29 20:12:07

标签: php pagination

我正在处理一个项目,在那里我扫描一个目录并从显示图库图像的目录中提取所有图像。问题是,一些画廊有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>
        "; 
    }  
}

我将非常感谢有关如何对此代码进行分页的任何想法。

1 个答案:

答案 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回复你的问题一样愚蠢。