ThinkPHP分页带入二维数组的实现方法

程序人生
最近跳槽到新公司,用的PHP框架是国内大名鼎鼎的ThinkPHP
这几天在开发一个项目,有个功能因搜索类别比较多,所以就以数组形式提交,后台也好接收处理。
<select name='search[province]' title="选择省份"></select>
<select class="input" name="search[grade]"></select>
<select class="input" name="search[job_title]"></select>
...
搜索提交后的URL是这种样式的:
?search[grade]=1&search[job_title]=2&search[province]=
分页用的是框架内置的分页类
$page = new \Think\Page($totalRows, $pageSize);
但分页后的URL是这样的:
/search//search_flag/1/page/2
很明显,分页跳转时相关的搜索参数没传到后台,造成分页失败。

查看分页类源码后发现是因为没有针对数姐类的参数进行处理,解决方法如下:
找到针对URL处理的U方法,U方法位于ThinkPHP/Common/functions.php,修改如下代码:
if(!empty($vars)) { // 添加参数
    foreach ($vars as $var => $val){
        if('' !== trim($val)){
            $url .= $depr . $var . $depr . urlencode($val);
        }
    }
}
修改后:
if(!empty($vars)) { // 添加参数
    $s = array();
    foreach ($vars as $var => $val){
        //对数组类参数进行处理
        if(is_array($val)){
            foreach($val as $k => $v){
                $s[$var . '[' . $k . ']'] = $v;
            }
        }else{
            if('' !== trim($val)){
                $url .= $depr . $var . $depr . urlencode($val);
            }
        }
    }
    //拼合数组参数
    if($s){
        $url .= '?' . http_build_query($s);
    }
}
再进行搜索分页时,URL已带上了相关的参数:
/search_flag/1/page/2?search[grade]=1&search[job_title]=2&search[province]=


Tags: ThinkPHP
  • 还没有评论,沙发等你来抢
*         

正在加载验证码......