请问 动态数据库 读取出的表格 进行分页 如何实现?MVC结构
请教怎样简单的实现网页内容的分页?本帖最后由 tokyo2006 于 2015-5-18 15:18 编辑
我来贴一个我自己写的Page类吧
<?php
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
class Page {
var $page_size = DEFAULT_PAGE_SIZE;
var $start = DEFAULT_PAGE_START;
var $total_count;
var $result;
var $to_string='this is page object';
function __construct() {
}
public function init($start, $total_count, $page_size, $result)
{
$this->page_size = $page_size;
$this->result = $result;
$this->total_count = $total_count;
$this->start = $start;
return $this;
}
/**
* 取总记录数.
*/
public function getTotalCount() {
return $this->total_count;
}
/**
* 取总页数.
*/
public function getTotalPageCount() {
if ($this->total_count % $this->page_size == 0)
return intval($this->total_count / $this->page_size);
else
return intval($this->total_count / $this->page_size + 1);
}
/**
* 取每页数据容量.
*/
public function getPageSize() {
return $this->page_size;
}
/**
* 取当前页中的记录.
*/
public function getResult() {
return $this->result;
}
/**
* 取该页当前页码,页码从1开始.
*/
public function getCurrentPageNo() {
return intval($this->start / $this->page_size + 1);
}
/**
* 该页是否有下一页.
*/
public function hasNextPage() {
return ($this->getCurrentPageNo() < $this->getTotalPageCount());
}
/**
* 该页是否有上一页.
*/
public function hasPreviousPage() {
return $this->getCurrentPageNo() > 1;
}
}
?>
使用的时候你可以先载入这个类然后使用它,请确保在autoload.php中载入了这个类,下面是一个使用page的方法
/** * search area list for page
* @param type $name
* @param type $headName
* @param type $currentPostion
* @param type $limit
* @param type $orderName
* @param type $asc
* @return type
*/
public function getAreaList($name, $headName, $currentPage, $limit, $orderName, $asc) {
$currentPostion = ($currentPage-1)*$limit;
$select = 'select id,name,depth,headName,parentId ';
$from = ' from tour_area';
$where = ' where 1=1';
if ($headName != '') {
$where = $where . ' and headName='.$headName;
}
if ($name != '') {
$where = $where . ' and name like '.'\'%'.$name.'%\'';
}
if ($asc) {
$where = $where . ' order by ' . ' ' . $orderName . ' asc';
} else {
$where = $where . ' order by ' . ' ' . $orderName . ' desc';
}
$total_count = $this->db->query('select count(0) as cnt '.$from.$where)->row()->cnt;
$where = $where . ' limit ' . $currentPostion . ',' . $limit;
$result = $this->db->query($select.$from.$where)->result();
$page = new Page();
$page->init($currentPostion, $total_count, $limit,$result);
return $page;
}
虽然我的实现方法可能有些笨拙,但是基本上可以满足我的开发需求
你該先看的是 Active Record 类的 $this->db->limit(); Closer 发表于 2015-5-7 16:01
你該先看的是 Active Record 类的 $this->db->limit();
很感谢你的指点。
本帖最后由 greedefoxes 于 2015-5-9 09:53 编辑
因为动态数据库,记录数会一直变化,这种情况下将记录以表格形式进行分页展示,该怎样写代码?有高人再指点下吗?就是手册的那个pagination具体该怎么应用,谁告诉下吧。。。我可以获取到当前记录总数,就是怎么套用这个pagination不晓得。。现在只会将全部记录展示在一张网页里。。。数据量大的话很不现实。。。 greedefoxes 发表于 2015-5-9 09:48
因为动态数据库,记录数会一直变化,这种情况下将记录以表格形式进行分页展示,该怎样写代码?有高人再指点 ...
沒用過分頁類...
自己寫的彈性比較高
我已經跟你提示 limit() 了
做個分頁,Active Record 类都能幫你達成 本帖最后由 greedefoxes 于 2015-5-11 11:23 编辑
Closer 发表于 2015-5-10 02:12
沒用過分頁類...
自己寫的彈性比較高
我已經跟你提示 limit() 了
小弟不才,active record还是不太会用。直接用的sql。
function list_users($limit,$offset,$catagory)//获取限定行的函数
{
//$this->db->limit($limit,$offset);
$sql = "select * from basic_information where catagory='$catagory' &&operator=1 limit $limit,$offset;";
$res = $this->db->query($sql);
return $res->result_array();
}
可以输出限定行数,我也可以得到总行数的变量值
function get_pgnumber($catagory)//获取特定catagory的总记录数 {
$query = $this->db->query("select count(*) as total from basic_information where catagory='$catagory' &&operator=1 ;");
$result = $query->result();
return $result->total;
}
现在的问题是我怎样实现异步分页,我只会在该网页表格里显示部分行。
这是controllers的部分代码
$this->load->model("M_user");
$data['users']=$this->M_user->list_users(0,10,1);
$data['lists']=$this->M_user->get_pgnumber(1);
$this->load->view("meterial\meterial_look",$data);//将数据传到视图层
本帖最后由 Closer 于 2015-5-11 11:43 编辑
greedefoxes 发表于 2015-5-11 10:59
小弟不才,limit还是不太会用。直接用的sql。
function list_users($limit,$offset,$catagory)//获取限定 ...
我這是寫的給你參考 (Model) :
/*
* $table = 資料表名稱
* $th = 欄位
* $td = 欄位值
* $order = 排序欄位
* $mode = 排序方式
* $start = 起始筆數
*/
class Test extends CI_Model {
//搜尋指定資料表的資料,取出20筆資料,並加以排序
public function TestModel($table,$th,$td,$order,$mode,$start){
$query = $this->db->where($th,$td)->order_by($order,$mode)->limit('20',$start)->get($table);
if($query->num_rows() > 0){
return $query->result_array();
}
return;
}
}
C 端的使用方式 :
$this->load->model('Test');
$start= ($page - 1) * 20;
$get_data = $this->Test->TestModel($table,$th,$td,$order,$mode,$start);
如果你搜尋的條件比較多
只要多次執行下面兩段就好 (模糊搜尋 / 絕對搜尋)
$this->db->like();
$this->db->where();
看你有幾個欄位
多次 for OR foreach 的方式去呼叫
對了,上面只有做到 "取值"
如果你需要 < 1 2 3 >
你就依照 $page 作為參數傳入你自製的 model 方法
再回傳分頁的 HTML 語法,用這種方式連接 :
$page_html = '<a>';
$page_html .= 'test';
$page_html .= '</a>';
我觉得如果没有封装好的方法供我使用的话,分页对我来说很烦恼,按照前辈的方法我取数据是没有问题了,但是视图界面还是个困扰,对View而言,他是不知道我一共有多少页,那我页码、链接这块的代码该怎么写
頁碼大部分會用 GET 取
看看你的網址列吧 本帖最后由 greedefoxes 于 2015-5-20 08:54 编辑
原本是想着 用GET 传页码 ,只是在罗列页码时犯了难
<ul class="pagination">
<li class="disabled"><a href="#" aria-label="Previous"><span aria-hidden="true">«</span></a></li>
<li class="active"><a href="#">1 <span class="sr-only">(current)</span></a></li>
<li><a href="#">2 <span class="sr-only">(current)</span></a></li>
<li>
<a href="#" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</ul>
我就在想 我又不知道一共多少页 这怎么罗列<li> </li> 啊。然后上网搜CI的分页类,看得一头雾水,所以才来求助。
多亏前辈帮忙梳理了下头绪,还帮助我理解了Active Record的用法,Active Record帮助我理解了网上关于CI分页类使用方法的例子,我今天初步弄懂了CI的分页类的使用,只不过返回第一页的时候还是有问题,哎,我还得继续摸索。而且,单纯应用CI分页类的话,界面实在太难看了。。。而且,复杂的表格(表格里有按钮的)无法应用。我还得努力啊。。。
页:
[1]
2