Exemplo n.º 1
0
 /**
  * 
  * @param type $perPage
  */
 public function findPage($perPage = 10)
 {
     $total = $this->count();
     if ($total) {
         $data = $this->page(intval($_REQUEST['p']), $perPage)->select();
         $page = new \COM\Page($total, $perPage, $REQUEST);
         if ($total > $listRows) {
             $page->setConfig('theme', '%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END% %HEADER%');
         }
         $p = $page->show();
     }
     return array('data' => $data, 'html' => $p);
 }
Exemplo n.º 2
0
 /**
  * 通用分页列表数据集获取方法,获取的数据集主要供tableList()方法用来生成表格列表
  *
  *  可以通过url参数传递where条件,例如:  index.html?name=asdfasdfasdfddds
  *  可以通过url空值排序字段和方式,例如: index.html?_field=id&_order=asc
  *  可以通过url参数r指定每页数据条数,例如: index.html?r=5
  *
  * @param sting|Model  $model   模型名或模型实例
  * @param array        $where   where查询条件(优先级: $where>$_REQUEST>模型设定)
  * @param array|string $order   排序条件,传入null时使用sql默认排序或模型属性(优先级最高);
  *                              请求参数中如果指定了_order和_field则据此排序(优先级第二);
  *                              否则使用$order参数(如果$order参数,且模型也没有设定过order,则取主键降序);
  *
  * @param array        $base    基本的查询条件
  * @param boolean      $field   单表模型用不到该参数,要用在多表join时为field()方法指定参数
  * @author 朱亚杰 <*****@*****.**>
  *
  * @return array|false
  * 返回数据集
  */
 protected function lists($model, $where = array(), $order = '', $base = array('status' => array('egt', 0)), $field = true)
 {
     $options = array();
     $REQUEST = (array) I('request.');
     if (is_string($model)) {
         $model = M($model);
     }
     $OPT = new \ReflectionProperty($model, 'options');
     $OPT->setAccessible(true);
     $pk = $model->getPk();
     if ($order === null) {
         //order置空
     } else {
         if (isset($REQUEST['_order']) && isset($REQUEST['_field']) && in_array(strtolower($REQUEST['_order']), array('desc', 'asc'))) {
             $options['order'] = '`' . $REQUEST['_field'] . '` ' . $REQUEST['_order'];
         } elseif ($order === '' && empty($options['order']) && !empty($pk)) {
             $options['order'] = $pk . ' desc';
         } elseif ($order) {
             $options['order'] = $order;
         }
     }
     unset($REQUEST['_order'], $REQUEST['_field']);
     $options['where'] = array_filter(array_merge((array) $base, $REQUEST, (array) $where), function ($val) {
         if ($val === '' || $val === null) {
             return false;
         } else {
             return true;
         }
     });
     if (empty($options['where'])) {
         unset($options['where']);
     }
     $options = array_merge((array) $OPT->getValue($model), $options);
     $total = $model->where($options['where'])->count();
     if (isset($REQUEST['r'])) {
         $listRows = (int) $REQUEST['r'];
     } else {
         $listRows = C('LIST_ROWS') > 0 ? C('LIST_ROWS') : 10;
     }
     $page = new \COM\Page($total, $listRows, $REQUEST);
     if ($total > $listRows) {
         $page->setConfig('theme', '%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END% %HEADER%');
     }
     $p = $page->show();
     $this->assign('_page', $p ? $p : '');
     $this->assign('_total', $total);
     $options['limit'] = $page->firstRow . ',' . $page->listRows;
     $model->setProperty('options', $options);
     return $model->field($field)->select();
 }
Exemplo n.º 3
0
 /**
  * 显示指定模型列表数据
  * @param  String $model 模型标识
  * @author 麦当苗儿 <*****@*****.**>
  */
 public function lists($model = null, $p = 0)
 {
     $model || $this->error('模型名标识必须!');
     $page = intval($p);
     $page = $page ? $page : 1;
     //默认显示第一页数据
     //获取模型信息
     $model = M('Model')->getByName($model);
     $model || $this->error('模型不存在!');
     //解析列表规则
     $fields = array();
     $grids = preg_split('/[;\\r\\n]+/s', $model['list_grid']);
     foreach ($grids as &$value) {
         // 字段:标题:链接
         $val = explode(':', $value);
         // 支持多个字段显示
         $field = explode(',', $val[0]);
         $value = array('field' => $field, 'title' => $val[1]);
         if (isset($val[2])) {
             // 链接信息
             $value['href'] = $val[2];
             // 搜索链接信息中的字段信息
             preg_replace_callback('/\\[([a-z_]+)\\]/', function ($match) use(&$fields) {
                 $fields[] = $match[1];
             }, $value['href']);
         }
         if (strpos($val[1], '|')) {
             // 显示格式定义
             list($value['title'], $value['format']) = explode('|', $val[1]);
         }
         foreach ($field as $val) {
             $array = explode('|', $val);
             $fields[] = $array[0];
         }
     }
     // 过滤重复字段信息
     $fields = array_unique($fields);
     // 关键字搜索
     $map = array();
     $key = $model['search_key'] ? $model['search_key'] : 'title';
     if (isset($_REQUEST[$key])) {
         $map[$key] = array('like', '%' . $_GET[$key] . '%');
         unset($_REQUEST[$key]);
     }
     // 条件搜索
     foreach ($_REQUEST as $name => $val) {
         if (in_array($name, $fields)) {
             $map[$name] = $val;
         }
     }
     $row = empty($model['list_row']) ? 10 : $model['list_row'];
     //读取模型数据列表
     if ($model['extend']) {
         $name = get_table_name($model['id']);
         $parent = get_table_name($model['extend']);
         $fix = C("DB_PREFIX");
         $key = array_search('id', $fields);
         if (false === $key) {
             array_push($fields, "{$fix}{$parent}.id as id");
         } else {
             $fields[$key] = "{$fix}{$parent}.id as id";
         }
         /* 查询记录数 */
         $count = M($parent)->join("INNER JOIN {$fix}{$name} ON {$fix}{$parent}.id = {$fix}{$name}.id")->where($map)->count();
         // 查询数据
         $data = M($parent)->join("INNER JOIN {$fix}{$name} ON {$fix}{$parent}.id = {$fix}{$name}.id")->field(empty($fields) ? true : $fields)->where($map)->order("{$fix}{$parent}.id DESC")->page($page, $row)->select();
     } else {
         in_array('id', $fields) || array_push($fields, 'id');
         $name = parse_name(get_table_name($model['id']), true);
         $data = M($name)->field(empty($fields) ? true : $fields)->where($map)->order('id DESC')->page($page, $row)->select();
         /* 查询记录总数 */
         $count = M($name)->where($map)->count();
     }
     //分页
     if ($count > $row) {
         $page = new \COM\Page($count, $row);
         $page->setConfig('theme', '%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END% %HEADER%');
         $this->assign('_page', $page->show());
     }
     $this->assign('model', $model);
     $this->assign('list_grids', $grids);
     $this->assign('list_data', $data);
     $this->meta_title = $model['title'] . '列表';
     $this->display($model['template_list']);
 }