国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

使用jQuery設計數據表格之設計表格基類

開發 前端
在本文中,將選取PHP中的著名的開發框架Codeigniter(下簡稱CI)配合jQuery去設計一個日常常見的datagrid數據表格。其中充分利用了jQuery及CI框架的特性,打造一個無刷新的數據表格。本文的閱讀對象為已經具備一定jQuery基礎知識及CI框架基礎知識的用戶。

當前在Web開發中,jQuery和PHP無疑是***的配合。其中PHP由于其簡單易用,深得開發者的喜愛,而jQuery則由于在前端開發中的靈活和簡單,功能強大,可以做出很多很眩目的效果。在本文中,將選取PHP中的著名的開發框架Codeigniter(下簡稱CI)配合jQuery去設計一個日常常見的datagrid數據表格。其中充分利用了jQuery及CI框架的特性,打造一個無刷新的數據表格。本文的閱讀對象為已經具備一定jQuery基礎知識及CI框架基礎知識的用戶。

步驟1 設計生成表格的基類

我們希望設計一個生成表格的基類,它可以針對任意數據庫中的任意表,都能自動生成對應的數據表格,比如我們只需要傳入數據庫中的表名或者表的索引字段即可生成表格。本文中的大部分時間都會圍繞這個基類展開代碼編寫,下面是代碼的片斷定義:

  1. class Datagrid{  
  2.   private $hide_pk_col = true;  
  3.   private $hide_cols = array();  
  4.   private $tbl_name = '';  
  5.   private $pk_col = '';  
  6.   private $headings = array();  
  7.   private $tbl_fields = array();  
  8. }  
  9. ?> 

這里先行定義了一些屬性變量,比如是否隱藏主鍵的列,表的名稱$tbl_name,表頭列$headings,表的字段數組$tbl_fields。這里,我們把這個基類定義為CI中的helper幫助類,因為定義為CI中的library的話,則不容易向其構造函數傳遞參數。

接下來,編寫其構造函數為代碼如:

  1. public function __construct($tbl_name, $pk_col = 'id'){  
  2.   $this->CI =& get_instance();  
  3.   $this->CI->load->database();  
  4.   $this->tbl_fields = $this->CI->db->list_fields($tbl_name);  
  5.   if(!in_array($pk_col,$this->tbl_fields)){  
  6.   throw new Exception("Primary key column '$pk_col' not found in table '$tbl_name'");  
  7.   }  
  8.   $this->tbl_name = $tbl_name;  
  9.   $this->pk_col = $pk_col;  
  10.   $this->CI->load->library('table');  
  11.   }  

在上面的代碼的構造函數中,接收了兩個參數,分別是數據庫表的名稱和主鍵(默認這里為$id)。然后初始化實例化了CI對象,然后調用其加載數據庫及加載表的幫助方法,得出的$this->tbl_fields則是其數據庫的字段了。然后判斷主鍵$pk_col是否在數據表中,如果不存在的話拋出異常,如果存在的話,使用成員變量tbl_name和pk_col分別保存數據的表名和主鍵,這樣下次就不用再訪問數據庫了。***,使用$this->CI->load->library('table')的幫助表格類,將數據庫的字段生成一個HTML的簡單表格。

而為了自定義列的標題,也有一個方法如下:

  1. public function setHeadings(array $headings){  
  2.   $this->headings = array_merge($this->headings, $headings);  
  3.   } 

比如,我們可以將原來表格的列重新自定義要顯示的名稱,比如把regdate字段改為“Registration Date”。而具體的代碼在下文中還會講解。

在數據的呈現過程中,有的時候不是所有的列都需要顯示,要根據實際情況進行隱藏或顯示,這個時候可以編寫相關的方法實現,代碼如下:

  1. public function ignoreFields(array $fields){  
  2.   foreach($fields as $f){  
  3.   if($f!=$this->pk_col)  
  4.   $this->hide_cols[] = $f;  
  5.   }  
  6.   } 

其中,$fields是需要被隱藏的列的名稱數組。代碼中還對主鍵進行了判斷,因為主鍵是必須從數據庫中獲取的。而假如不希望主鍵顯示在用戶界面上的話,可以通過以下方法設置:

  1. public function hidePkCol($bool){  
  2.   $this->hide_pk_col = (bool)$bool;  
  3.   } 

這里傳入的$bool是一個布爾值,代表是否需要在界面中顯示主鍵。

接下來,再看一個方法,代碼如下:

  1. private function _selectFields(){  
  2.   foreach($this->tbl_fields as $field){  
  3.   if(!in_array($field,$this->hide_cols)){  
  4.   $this->CI->db->select($field);  
  5.   //判斷是否隱藏了主鍵 if($field==$this->pk_col && $this->hide_pk_col) continue;  
  6.   $headings[]= isset($this->headings[$field]) ? $this->headings[$field] : ucfirst($field);  
  7.   }  
  8.   }  
  9.   if(!empty($headings)){  
  10.   array_unshift($headings,"");  
  11.   $this->CI->table->set_heading($headings);  
  12.   }  
  13.   } 

這里是一個helper的幫助類方法,注意CI中的helper類,命名是private的,以下劃線+方法名的方法命名。這個方法是在下文中的generate()中用到的,其中主要的功能是,循環查找$this->tbl_fields中的每個字段,是否屬于隱藏顯示的字段,如果不屬于隱藏字段,則通過$this->CI->db->select($field);將相關字段取出。另外要注意的是

  1.  array_unshift($headings,""); 

這句代碼中,實際的作用是,在數據表格的***列中,加一項代表“全選/反選”功能的checkbox,這個功能可以用在對數據進行選擇或刪除的時候。

接下來,是生成數據表格的generate()方法,代碼如下:

  1. public function generate(){  
  2.   $this->_selectFields();  
  3.   $rows = $this->CI->db  
  4.   ->from($this->tbl_name)  
  5.   ->get()  
  6.   ->result_array();  
  7.   foreach($rows as &$row){  
  8.   $id = $row[$this->pk_col];  
  9.   array_unshift($row, "");  
  10.   if($this->hide_pk_col){  
  11.   unset($row[$this->pk_col]);  
  12.   }  
  13.   }  
  14.   return $this->CI->table->generate($rows);  
  15.   }  

在這個方法中,首先是調用了上文中的 $this->_selectFields();

方法,以決定顯示數據庫指定表中的哪些字段。然后使用CI中的獲得數據表記錄的方法獲得數據集($rows)。然后在循環中,為每一條記錄前都生成一個checkbox(array_unshift一句)。***,判斷是否需要屏蔽顯示主鍵,如果是的話,則屏蔽顯示(unset一句)。

接下來,為數據表格增加表單提交按鈕。為了通用起見,我們期望可以根據用戶的要求,指定生成什么類型的按鈕。比如,在這個例子中,期望生成一個刪除的按鈕,所以我們編寫如下的一個生成按鈕的方法:

  1. public static function createButton($action_name, $label){  
  2.   return "";  
  3.   } 

在這個靜態方法中,$action_name為要生成的方法名,比如我們要生成的是Delete方法,則傳入的$action_name參數為delete,而label則為按鈕的標簽名。

而如果得知這個按鈕被用戶點擊并提交呢?則可以用如下方法判斷

  1. public static function getPostAction(){  
  2.   if(isset($_POST['dg_action'])){  
  3.   return key($_POST['dg_action']);  
  4.   }  
  5.   }  

如果用戶選擇了數據表格中的多行并提交的話,可以使用如下方法去獲得

  1. public static function getPostItems(){  
  2.   if(!empty($_POST['dg_item'])){  
  3.   return $_POST['dg_item'];  
  4.   }  
  5.   return array();  
  6.   } 

返回的是一個表示了用戶選擇多少個記錄的數組。本例子中涉及的是刪除按鈕的功能,所以編寫一個方法,用于將用戶選擇的數據刪除,代碼如下:

  1. public function deletePostSelection(){  
  2.   if(!empty($_POST['dg_item']))  
  3.   return $this->CI->db  
  4.   ->from($this->tbl_name)  
  5.   ->where_in($this->pk_col,$_POST['dg_item'])  
  6.   ->delete();  
  7.   } 

比如用戶在表格中選擇了若干條記錄,點delete按鈕提交,則deletePostSelection方法會等價于執行如下的SQL語句:

  1. DELETE FROM my_table WHERE id IN (1,5,7,3,etc...)。 

***,我們綜合整理一下完整的數據表格生成類,如下代碼:

  1. class Datagrid{  
  2.   private $hide_pk_col = true;  
  3.   private $hide_cols = array();  
  4.   private $tbl_name = '';  
  5.   private $pk_col = '';  
  6.   private $headings = array();  
  7.   private $tbl_fields = array();  
  8.   function __construct($tbl_name, $pk_col = 'id'){  
  9.   $this->CI =& get_instance();  
  10.   $this->CI->load->database();  
  11.   $this->tbl_fields = $this->CI->db->list_fields($tbl_name);  
  12.   if(!in_array($pk_col,$this->tbl_fields)){  
  13.   throw new Exception("Primary key column '$pk_col' not found in table '$tbl_name'");  
  14.   }  
  15.   $this->tbl_name = $tbl_name;  
  16.   $this->pk_col = $pk_col;  
  17.   $this->CI->load->library('table');  
  18.   }  
  19.   public function setHeadings(array $headings){  
  20.   $this->headings = array_merge($this->headings, $headings);  
  21.   }  
  22.   public function hidePkCol($bool){  
  23.   $this->hide_pk_col = (bool)$bool;  
  24.   }  
  25.   public function ignoreFields(array $fields){  
  26.   foreach($fields as $f){  
  27.   if($f!=$this->pk_col)  
  28.   $this->hide_cols[] = $f;  
  29.   }  
  30.   }  
  31.   private function _selectFields(){  
  32.   foreach($this->tbl_fields as $field){  
  33.   if(!in_array($field,$this->hide_cols)){  
  34.   $this->CI->db->select($field);  
  35.   if($field==$this->pk_col && $this->hide_pk_col) continue;  
  36.   $headings[]= isset($this->headings[$field]) ? $this->headings[$field] : ucfirst($field);  
  37.   }  
  38.   }  
  39.   if(!empty($headings)){  
  40.   array_unshift($headings,"");  
  41.   $this->CI->table->set_heading($headings);  
  42.   }  
  43.   }  
  44.   public function generate(){  
  45.   $this->_selectFields();  
  46.   $rows = $this->CI->db  
  47.   ->from($this->tbl_name)  
  48.   ->get()  
  49.   ->result_array();  
  50.   foreach($rows as &$row){  
  51.   $id = $row[$this->pk_col];  
  52.   array_unshift($row, "");  
  53.   if($this->hide_pk_col){  
  54.   unset($row[$this->pk_col]);  
  55.   }  
  56.   }  
  57.   return $this->CI->table->generate($rows);  
  58.   }  
  59.   public static function createButton($action_name, $label){  
  60.   return "";  
  61.   }  
  62.   public static function getPostAction(){  
  63.   if(isset($_POST['dg_action'])){  
  64.   return key($_POST['dg_action']);  
  65.   }  
  66.   }  
  67.   public static function getPostItems(){  
  68.   if(!empty($_POST['dg_item'])){  
  69.   return $_POST['dg_item'];  
  70.   }  
  71.   return array();  
  72.   }  
  73.   public function deletePostSelection(){  
  74.   if(!empty($_POST['dg_item']))  
  75.   return $this->CI->db  
  76.   ->from($this->tbl_name)  
  77.   ->where_in($this->pk_col,$_POST['dg_item'])  
  78.   ->delete();  
  79.   }  
  80.   } 

我們把這個類保存為datagrid_helper.php,保存在application/helper目錄下。

原文:http://tech.it168.com/a2011/1024/1262/000001262979_all.shtml

【編輯推薦】

  1. 10月10款有趣強大的jQuery插件推薦
  2. 當jQuery遭遇CoffeeScript——妙不可言
  3. 10個新鮮的Ajax相關的jQuery插件
  4. 20個教你得到酷炫效果的jQuery教程
  5. jQuery插件開發實戰場
責任編輯:陳貽新 來源: it168
相關推薦

2011-10-28 14:01:30

jQuery

2017-08-10 13:43:00

大數據數據表格優化設計

2011-05-19 11:01:14

ERWin數據庫設計

2010-12-13 10:36:45

CSS表格

2022-01-14 10:34:59

B端表格設計APP

2011-01-26 08:59:11

jQueryjavascriptweb

2013-09-03 09:55:42

iOS無線客戶端框架設計

2015-09-08 11:06:46

設計編輯窗體

2010-07-05 16:23:39

UML類圖

2022-06-29 08:28:58

數據可視化數據可視化平臺

2023-07-26 12:38:42

PyGWalker數據類型

2011-06-30 16:38:07

Qt QTableWidg

2013-03-20 13:25:53

數據庫數據庫設計

2013-03-20 11:25:47

數據庫數據庫設計

2013-03-20 13:35:12

數據庫數據庫設計

2013-03-20 11:33:31

2012-04-28 10:07:43

數據庫數據庫設計

2011-07-26 15:30:32

jQuery

2025-10-27 01:36:00

C#數據模型

2021-11-09 08:15:18

Grafana 數據可視化運維
點贊
收藏

51CTO技術棧公眾號

亚洲男人天堂久| 北条麻妃在线观看| 国产免费区一区二区三视频免费 | 黄色在线论坛| 天天影视色香欲综合网老头| 亚洲 欧美 综合 另类 中字| 美日韩精品视频| 亚洲一区二区三| 日本一区二区高清不卡| 亚洲2020天天堂在线观看| 国产亚洲精aa在线看| 精品国偷自产在线视频| 亚洲第一会所| 亚洲欧美在线免费观看| 丝袜老师在线| 亚洲天堂av网| 精品日韩视频| 久久精品视频在线播放| 伊人亚洲精品| 亚洲97在线观看| 欧美男男gaytwinkfreevideos| 国产成人精品久久亚洲高清不卡| 日本在线中文字幕一区| 久久久久久久久爱| 婷婷精品在线| 国产色视频一区| 欧美日一区二区在线观看 | 亚洲精品国产精品久久| 日本特黄久久久高潮| 一级二级三级欧美| 国产精品18久久久久久久久 | 久久成人精品视频| 欧美精品三级在线| 136fldh精品导航福利| 成人女性视频| 免费在线国产精品| 国产风韵犹存在线视精品| 国产 日韩 欧美在线| 国产精品国产三级国产aⅴ无密码| 午夜影院免费| 欧美日韩日日摸| 91九色美女在线视频| 色午夜这里只有精品| 成人在线超碰| 成人精品在线视频| 日韩成人av影视| 亚洲色成人一区二区三区小说| 亚洲欧洲三级电影| 97电影在线看视频| 夜夜嗨av一区二区三区免费区 | 人人在线97| 欧美精品自拍偷拍| 91tv亚洲精品香蕉国产一区| 97福利一区二区| 亚洲国产激情| 国产美女作爱全过程免费视频| 国产精品乱码一区二区三区软件| 最近中文字幕在线| 精品国产一区二区三区久久久蜜月| 国产亚洲一区二区手机在线观看 | 亚洲欧洲日产国码二区| 可以直接在线观看的av| 亚洲国产中文字幕久久网| av在线精品| 亚洲一区制服诱惑| 国产乱人伦精品一区二区在线观看| 日本a级片免费| 精品第一国产综合精品aⅴ| www.丝袜精品| 亚洲高清在线观看一区| 17c精品麻豆一区二区免费| 免费在线看a| 久久人人爽人人爽人人片av高清| 一级成人国产| av高清资源| 亚洲人在线观看| 中文字幕人成人乱码| 国产中文字幕视频在线观看| 色av综合在线| 风间由美性色一区二区三区四区| 久久亚洲免费| 亚洲日本在线看| 欧美a级在线观看| 91精品国产综合久久香蕉| 国产精品一级在线| 色综合888| 欧美激情在线有限公司| 日韩中文字幕一区二区三区| 成人高清在线观看免费| 日韩成人在线免费观看| 一区二区电影| 激情综合色综合啪啪开心| 日韩欧美成人区| 我要色综合中文字幕| 日产精品高清视频免费| 亚洲宅男天堂在线观看无病毒| 亚洲四虎影院| 日韩欧美三级一区二区| 欧美日韩亚洲一区二| 男人的天堂久久| 国自产拍偷拍精品啪啪一区二区| 日韩免费高清av| 国内自拍一区| 爽爽免费视频| 欧美精品九九久久| 国产不卡一区视频| 超碰在线公开| 欧美亚洲另类久久综合| 91久久精品一区二区三区| 免费看成人哺乳视频网站| 中国丰满人妻videoshd | 97久久超碰国产精品| 日本大片在线播放| 高清视频一区二区三区| 亚洲精品一卡二卡| 亚洲三级av| 国产福利视频在线播放| 国产小视频国产精品| 另类欧美日韩国产在线| 青青影院在线观看| 成人精品水蜜桃| 色综合亚洲欧洲| 中文一区一区三区免费在线观看| 三级ai视频| 国产精品免费看久久久香蕉| 日韩一区欧美小说| julia中文字幕一区二区99在线| 日韩免费毛片视频| 日韩视频一区在线| 不卡视频一二三| 麻豆久久久久| 国产精品无码专区av在线播放| 精品国偷自产在线视频99| av欧美精品.com| 成人日韩视频| 亚洲这里只有精品| 9.1国产丝袜在线观看| 国产精品国产精品国产专区不蜜 | 污黄色在线观看| 97视频中文字幕| 欧美日韩一区二区在线观看视频| 欧美在线高清| 一区二区三区视频播放| 男人午夜天堂| 欧美黑人巨大| 91精品在线免费视频| 深夜精品寂寞黄网站在线观看| 激情懂色av一区av二区av| 久久爱www久久做| 免费在线亚洲| 亚洲男人天堂2023| 欧美久久在线观看| 在线heyzo| av在线亚洲一区| 亚洲高清自拍| 国产成人精品免费网站| 伊人狠狠色j香婷婷综合| av永久不卡| 久久综合五月婷婷| 美女av一区| 日本在线电影一区二区三区| 欧美男女视频| 黄色永久免费网站| 在线观看黄网| 国产成人免费| 美腿丝袜一区二区三区| 精品国产百合女同互慰| 国产原创欧美精品| 97超级碰碰碰| 欧美午夜精品久久久久久蜜| 亚洲国产精品毛片av不卡在线| 老牛影视免费一区二区| 黄色大片中文字幕| 国产在线黄色| 青青影院在线观看| 成人免费淫片| 天天综合网日韩| 黄色一级免费大片| 一级在线免费视频| 尤蜜粉嫩av国产一区二区三区| 久久综合久久网| 在线视频1区2区| 日本一本在线免费福利| 免费永久网站黄欧美| 久久久久国产精品人| 精品1区2区在线观看| 色噜噜久久综合伊人一本| 亚洲天堂久久av| 精品欧美日韩在线| 日本福利视频一区| 蜜臀av在线| 自拍偷拍欧美| 韩国v欧美v亚洲v日本v| 国产精品麻豆欧美日韩ww| 欧美一区二区精品在线| 国产精品免费电影| 日本中文字幕视频在线| 蜜桃精品wwwmitaows| 亚洲高清二区| 日本韩国欧美一区二区三区|