ThinkPHP3.2.3 模糊搜索分页功能实现

ThinkPHP3.2.3的分页类页面跳转时支持携带参数

ThinkPHPLibraryThinkPage.class.php

clipboard.png

但是分页类在传入参数时只支持数组条件且只能是普通查询

因为分页类内部调用了U函数来拼装URL,但是U函数不支持参数是多重数组的形式

clipboard.png

因此考虑区分传入分页类、传入数据库的参数数组

clipboard1.png

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {

    public function index(){

        # ThinkPHP自帶的分页类传参时只接受字符串类型,因此当参数是数组类型时创建两个数字来传参
        # ThinkPHP的分页类通过在URL中传参来实现查询分页

        # page_search用作Page类传参使用
        $page_search = array();
        # sql_search用作数据库查询时使用的条件
        $sql_search = array();
        foreach (I('param.') as $key => $value) {
            if (empty($value)) {
                continue;
            }
            # 公司名使用模糊搜索
            if ($key == 'company_name') {
                $page_search['company_name'] = $value;
                $sql_search['company_name'] = array('like', '%'.$value.'%');
            # 其他参数使用全匹配
            }else{                
                $page_search[$key] = $value;
                $sql_search[$key] = $value;
            }
        }

        $Company = M('corp_info');
        $count = $Company -> where($sql_search) -> count();
        $pagesize = 10;
        # Page类使用page_search来保证分页跳转时需要的参数
        $Page = new \Think\Page($count, $pagesize, $page_search);
        $show = $Page -> show();

        $all_company_info = $Company
                            -> where($sql_search)
                            -> limit($Page->firstRow.','.$Page->listRows)
                            -> select();
        $this -> assign('all_company_info', $all_company_info);
        $this -> assign('page', $show);
        $this -> display();
    }
}

clipboard2.png