php 分页总结

来源:互联网 发布:c语言与或非逻辑符号 编辑:程序博客网 时间:2024/06/10 05:24

每天用php做的最多的事差不多就是从db里取数据,展示数据了,有时以网页的形式(分页)展示,有时以csv格式导出数据。今天就对分页去数据做个总结。

根Model

class RModel {    /**     * @param $page  array 分页对象     * @param $order string order by 排序     */    public function pagination($sql, $page, $order = null, $param = array()) {        $countSql = "select count(*) from ({$sql}) c";        $count = $this->createCommand($countSql)->queryCount($param);                if(!empty($order))            $sql .= ' order by ' . $order;                if($page) {            $start   = ($page['currentpage'] - 1) * $page['rownum'];            $pagesize = $page['rownum'];            $sql .= " limit {$start},{$pagesize} ";        }        $data = $this->createCommand($sql)->queryAll(true, $param);        return array('list' => $data, 'total' => $count);    }    /**    * 查询所有数据    */    public function listAll($sql, $order=null, $param=array()) {        if(!empty($order))            $sql .= (' order by ' . $order);        return $this->createCommand($sql)->query($param);    }}
具体业务model

class ConcreteModel extends RModel {        protected function _getQuerySql($param) {        $sql = "";        $bindParams = array();        /*        * 拼接sql        */        return array($sql, $bindParams);    }    public function listData($param, $page) {        list($sql, $bindParams) = $this->_getQuerySql($param);        return $this->pagination($sql, $page, 'id desec', $bindParams);    }    public function exportData($param) {        list($sql, $bindParams) = $this->_getQuerySql($param);        return $this->listAll($sql, 'id desec', $param);    }}

controller

class ConcreteController {    public function actionConcrete() {        $request = new Request();        $model = new ConcreteModel();        if($request->getParam('actionType') == 'export') {            $dataReader = $model->exportData($request);            $this->exportData($dataReader);            exit;        }         $page = Pagination::filterPageInfo($request);        $data = $model->listData($request, $page);        $this->render('test.html',$data);    }    /*    * 以csv格式导出数据    */    private function exportData($dataReader) {            }}
在加一个分页小工具

class Pagination {    public static function filterPageInfo($request, $defaultPagesize = 10) {;        $pagenum    = intval($request->getParam('pageno', 1));        $pagesize   = intval($request->getParam('pagesize', $defaultPagesize));        $pagenum = $pagenum > 0 ? $pagenum : 1;        $pagesize = $pagesize > 0 ? $pagesize : $defaultPagesize;        return array('currentpage' => $pagenum, 'rownum' => $pagesize);    }}

这样,我们每次要做就是就根据查询参数,拼写sql,对取出的数据做单独的格式化展示就行了

0 0
原创粉丝点击