分页实现后端逻辑

由于项目需要,写了个提供给h5,还有客户端的分页接口。而公司使用的框架 laravel 自带的框架paginate套用不方便,因为paginate的分页是原理是在对数据库进行query的时候分页,相当于在sql语句里面多加了几个动态的 limit参数;而我的需求则是根据页码的不同动态的拿出一些商品ids,然后根据这些商品 ids 去获取当前这一页所有的商品列表信息;

本文这里仅介绍根据不同页码去获取当前页的商品ids的实现:

经典分页设计的概念:

1 per_num每页多少条纪录数量;

2 total_count总共的纪录条数;

3 max_page最大页码;

4 page客户端请求的当前页码


首先我设定每页纪录数量:

$per_num = 20;

其次,我根据业务逻辑计算总共的纪录条数:

$total_count = count($sku_ids);

然后,我根据前两个值计算出最大有数据的页码:

$max_page = floor($total_count/$per_num);


接下来;

根据实际上的产品设计做出对应的异常处理:

总纪录为0处理:

        if ($total_count == 0) {
            return $columns;
        }


根据业务逻辑去处理一些异常页码,假如我的第一页客户端请求的页码为0,需要考虑的异常页码有;1小于0的异常输入,2大于最大页码的异常输入,3最大页码出纪录条数不足per_num时候的处理;

根据我的业务逻辑,做出如下处理


大于最大页码的异常输入

        if ($page > $max_page) {
            return $columns;
        }


小于0的异常输入

        if ($page < 0) {
            $page = 0;
        }
最大页码出纪录条数不足per_num时候的处理:判断是否是最后一页,如果是最后一页,当前页的纪录条数位 总纪录数除以设定的每页纪录数取余数,如果不是最后一页,当前页的纪录条数为设定的每页纪录数;

        $current_sku_ids = [];

        //当页纪录条数
        $current_num = ($page == $max_page) ? ($total_count % $per_num) : $per_num;

接下来,根据拿到的当前页码,每页纪录数,从已经获取的数据中拿到当前的商品ids 

        for ($i = 0; $i < $current_num; $i++) {
            $key = $page * $per_num + $i;
            $current_sku_ids[] = $sku_ids[$key];
        }

最后,根据当前页的商品ids拿到当前页所有的商品信息;并做后续的业务逻辑处理

        //取得当页的 sku_ids 的商品信息
        $goodsList = \App::make('SProductItemsSkus')->dailyActivitiesFormatData($current_sku_ids);


然后前端可以使用此接口实现可维护的分页加载商品列表效果





  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值