thinkphp分页+条件查询

Posted alanlamp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了thinkphp分页+条件查询相关的知识,希望对你有一定的参考价值。

最近项目上面有一个带条件查询的分页列表,一开始form用的post,点击第二页就没有跳转成功,原因是分页是get请求,post数据链接到其他页面就会被清除。

解决办法:

1、form表单method=get

2、后台代码用I(\'get.parameterName\')获取URL参数(查询条件)

3、修改thinkphp3.2.3的Page类:

第47行 改为$this->parameter  = empty($parameter) ? array_urlencode($_GET) : $parameter;

array_urlencode函数(对多维数组进行urlEncode,防止GET参数中文乱码)是全局公共函数,写在Common/Common/function.php里,

function array_urlencode($data){
    $new_data = array();
    foreach($data as $key => $val){
        // 这里我对键也进行了urlencode
        $new_data[urlencode($key)] = is_array($val) ? array_urlencode($val) : urlencode($val);
    }
    return $new_data;
}

至此完成了带条件查询的分页功能。

如果读者跟我的项目一样,要对get请求进行区分,可以在html页面的form表单加入input=hidden的区分条件,条件成立表示带查询条件的get,不成立则是普通get加载页面

给出后台代码:

public function definedTypeList(){
        if(empty(I(\'get.isSearch\'))){  //不是查询条件的get
            $count = M(\'docDefinedType\')->count("d_type_id");
            $Page = new \\Think\\Page($count, 10);
            $Page->lastSuffix = false;//最后一页不显示为总页数
            $Page->setConfig(\'header\',\'<li class="disabled hwh-page-info"><a>共<em>%TOTAL_ROW%</em>条  <em>%NOW_PAGE%</em>/%TOTAL_PAGE%页</a></li>\');
            $Page->setConfig(\'prev\',\'上一页\');
            $Page->setConfig(\'next\',\'下一页\');
            $Page->setConfig(\'last\',\'末页\');
            $Page->setConfig(\'first\',\'首页\');
            $Page->setConfig(\'theme\',\'%HEADER% %FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END%\');
            $page_show = bootstrap_page_style($Page->show());//转bootstrap样式
            $list = M(\'docDefinedType\')->limit($Page->firstRow . \',\' . $Page->listRows)
                ->order(\'doc_type desc,defined_type desc\')->select();
            $this->assign(\'definedTypeList\', $list);
            if ($count <= 10) {
                $this->assign("page", \'<b>共1页</b>\');
            } else {
                $this->assign("page", $page_show);
            }
            $this->display();
        }else{
//            header("Content-type: text/html;charset=utf-8");
            $typeCondition=$_GET[\'typeCondition\'];
            if(!empty($typeCondition)){
                $map[\'defined_type\']=array(\'like\',\'%\'.$typeCondition.\'%\');
            }
            $categoryCondition=$_GET[\'categoryCondition\'];
            if(!empty($categoryCondition)){
                $map[\'doc_type\']=array(\'like\',\'%\'.$categoryCondition.\'%\');
            }
            $count = M(\'docDefinedType\')->where($map)->count("d_type_id");
            $Page = new \\Think\\Page($count, 10);
            $Page->lastSuffix = false;//最后一页不显示为总页数
            $Page->setConfig(\'header\',\'<li class="disabled hwh-page-info"><a>共<em>%TOTAL_ROW%</em>条  <em>%NOW_PAGE%</em>/%TOTAL_PAGE%页</a></li>\');
            $Page->setConfig(\'prev\',\'上一页\');
            $Page->setConfig(\'next\',\'下一页\');
            $Page->setConfig(\'last\',\'末页\');
            $Page->setConfig(\'first\',\'首页\');
            $Page->setConfig(\'theme\',\'%HEADER% %FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END%\');
//            p($Page->parameter);
            $page_show = bootstrap_page_style($Page->show());

            $list = M(\'docDefinedType\')->where($map)->limit($Page->firstRow . \',\' . $Page->listRows)
                ->order(\'doc_type desc,defined_type desc\')->select();
//            p($list);
            $this->assign(\'definedTypeList\', $list);
            if ($count <= 10) {
                $this->assign("page", \'<b>共1页</b>\');
            } else {
                $this->assign("page", $page_show);
            }
            $searchArr[\'typeCondition\']=$typeCondition;
            $searchArr[\'categoryCondition\']=$categoryCondition;
            $this->assign(\'searchArr\',$searchArr);
            $this->display();
        }
    }

 

以上是关于thinkphp分页+条件查询的主要内容,如果未能解决你的问题,请参考以下文章

ThinkPhp框架:分页查询和补充框架知识

thinkphp 3.1 这个查询怎么进行分页

ThinkPHP分页实例

thinkphp分页二,分装到funciton.php

带分页样式的thinkphp数据查询

thinkphp3.2 子查询