ThinkPHP示例:ajax分頁操做
ThinkPHP示例之ajax分頁操做,演示瞭如何進行數據分頁操做,須要使用表單示例中的數據表,或者直接建立數據表以下:
- CREATE TABLE IF NOT EXISTS `think_form` (
- `id` smallint(4) unsigned NOT NULL AUTO_INCREMENT,
- `title` varchar(255) NOT NULL,
- `content` varchar(255) NOT NULL,
- `create_time` int(11) unsigned NOT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
複製代碼
修改項目配置文件中的數據庫鏈接信息,打開示例頁面後顯示:
若是沒有看到數據的話,請首先往該數據表裏面手動添加一些數據來測試分頁效果。
本分頁類已被修改,用的是github上最新的分頁類,經過實例化page類時直接傳入html裏的ajax列表容器和分頁div所在的容器id,配合相應模板,便可輕鬆實現ajax分頁。
另外,對分頁調用作了
數據無關的封裝
,能夠
數組分頁也可sql分頁
,詳情描述看action中的註釋,爲了項目中的使用方便,分頁方法傳入的參數用
數組
傳入。
關鍵代碼:
- public function index() {
- import("@.ORG.Page"); //導入分頁類
- $Form = M('Form');
- $list = $Form->select();
- // $list = range(2,51);
- $param = array(
- 'result'=>$list, //分頁用的數組或sql
- 'listvar'=>'list', //分頁循環變量
- 'listRows'=>10, //每頁記錄數
- 'parameter'=>'search=key&name=thinkphp',//url分頁後繼續帶的參數
- 'target'=>'content', //ajax更新內容的容器id,不帶#
- 'pagesId'=>'page', //分頁後頁的容器id不帶# target和pagesId同時定義才Ajax分頁
- 'template'=>'Index:ajaxlist',//ajax更新模板
- );
- $this->page($param);
- $this->display();
- }
-
- /**
- +----------------------------------------------------------
- * 分頁函數 支持sql和數據集分頁 sql請用 buildSelectSql()函數生成
- +----------------------------------------------------------
- * @access public
- +----------------------------------------------------------
- * @param array $result 排好序的數據集或者查詢的sql語句
- * @param int $totalRows 每頁顯示記錄數 默認21
- * @param string $listvar 賦給模板遍歷的變量名 默認list
- * @param string $parameter 分頁跳轉的參數
- * @param string $target 分頁後點連接顯示的內容id名
- * @param string $pagesId 分頁後點連接元素外層id名
- * @param string $template ajaxlist的模板名
- * @param string $url ajax分頁自定義的url
- +----------------------------------------------------------
- */
- public function page($param) {
- extract($param);
- import("@.ORG.Page");
- //總記錄數
- $flag = is_string($result);
- $listvar = $listvar ? $listvar : 'list';
- $listRows = $listRows? $listRows : 21;
- if ($flag)
- $totalRows = M()->table($result . ' a')->count();
- else
- $totalRows = ($result) ? count($result) : 1;
- //建立分頁對象
- if ($target && $pagesId)
- $p = new Page($totalRows, $listRows, $parameter, $url,$target, $pagesId);
- else
- $p = new Page($totalRows, $listRows, $parameter,$url);
- //抽取數據
- if ($flag) {
- $result .= " LIMIT {$p->firstRow},{$p->listRows}";
- $voList = M()->query($result);
- } else {
- $voList = array_slice($result, $p->firstRow, $p->listRows);
- }
- $pages = C('PAGE');//要ajax分頁配置PAGE中必須theme帶%ajax%,其餘字符串替換統一在配置文件中設置,
- //能夠使用該方法前用C臨時改變配置
- foreach ($pages as $key => $value) {
- $p->setConfig($key, $value); // 'theme'=>'%upPage% %linkPage% %downPage% %ajax%'; 要帶 %ajax%
- }
- //分頁顯示
- $page = $p->show();
- //模板賦值
- $this->assign($listvar, $voList);
- $this->assign("page", $page);
- if ($this->isAjax()) {//判斷ajax請求
- layout(false);
- $template = (!$template) ? 'ajaxlist' : $template;
- exit($this->fetch($template));
- }
- return $voList;
- }
複製代碼
注意page方法返回值是爲了獲取當前頁記錄的數量。
放入官方的示例目錄中訪問便可
歡迎關注本站公眾號,獲取更多信息