关于分页方法paginate参数的问题

浏览:8213 发布日期:2017/01/15 分类:技术分享 关键字: 分页 paginate
本人新手.在做一个小项目.用的是5.0.4,在分页的时候发现貌似只能有一个page参数.看了下thinkphp/library/think/Paginator.php源码,其中有个获取页码对应的链接的方法 url($page):    /**
     * 获取页码对应的链接
     *
     * @param $page
     * @return string
     */
    protected function url($page)
    {
        if ($page <= 0) {
            $page = 1;
        }

        if (strpos($this->options['path'], '[PAGE]') === false) {
            $parameters = [$this->options['var_page'] => $page];
            $path       = $this->options['path'];
        } else {
            $parameters = [];
            $path       = str_replace('[PAGE]', $page, $this->options['path']);
        }
        if (count($this->options['query']) > 0) {
            $parameters = array_merge($this->options['query'], $parameters);
        }
        $url = $path;
        if (!empty($parameters)) {
            $url .= '?' . urldecode(http_build_query($parameters, null, '&'));
        }
        return $url . $this->buildFragment();
    }
这样写的话就没办法做到查询+分页:
http://127.0.0.1/nyhq/index.html?month=2016-11&status=-1?page=2
再点一次:
http://127.0.0.1/nyhq/index.html?month=2016-11&status=-1?page=2?page=3

不知这是否算BUG,还是官方有其他方法.文档里也没找到,不过我做了下小修改就ok了:     
//把
if (!empty($parameters)) {
    $url .= '?' . urldecode(http_build_query($parameters, null, '&'));
}
//改为
if (!empty($parameters)) {
    $param = urldecode(http_build_query($parameters, null, '&'));
    if(strstr($url,'&')){//先判断url是否包含&
     $url .= '&' . $param;
    }else{
        $url .= '?' .  $param;
    }
}
我点:
http://127.0.0.1/nyhq/index.html?month=2016-11&status=-1?page=2
我再点:
http://127.0.0.1/nyhq/index.html?month=2016-11&status=-1?page=3

ThinkPHP比J2EE简单好多,国内有这么优秀的框架怒赞.祝愿能越来越好
最佳答案
评论( 相关
后面还有条评论,点击查看>>