技术开发 频道

使用jQuery设计数据表格:设计表格基类

  这里是一个helper的帮助类方法,注意CI中的helper类,命名是private的,以下划线+方法名的方法命名。这个方法是在下文中的generate()中用到的,其中主要的功能是,循环查找$this->tbl_fields中的每个字段,是否属于隐藏显示的字段,如果不属于隐藏字段,则通过$this->CI->db->select($field);将相关字段取出。另外要注意的是

 array_unshift($headings,"");

  这句代码中,实际的作用是,在数据表格的第一列中,加一项代表“全选/反选”功能的checkbox,这个功能可以用在对数据进行选择或删除的时候。

  接下来,是生成数据表格的generate()方法,代码如下:

 public function generate(){

  $this
->_selectFields();

  $rows
= $this->CI->db

  
->from($this->tbl_name)

  
->get()

  
->result_array();

  foreach($rows
as &$row){

  $id
= $row[$this->pk_col];

  array_unshift($row,
"");

  
if($this->hide_pk_col){

  unset($row[$this
->pk_col]);

  }

  }

  return $this
->CI->table->generate($rows);

  }

  在这个方法中,首先是调用了上文中的 $this->_selectFields();

  方法,以决定显示数据库指定表中的哪些字段。然后使用CI中的获得数据表记录的方法获得数据集($rows)。然后在循环中,为每一条记录前都生成一个checkbox(array_unshift一句)。最后,判断是否需要屏蔽显示主键,如果是的话,则屏蔽显示(unset一句)。

  接下来,为数据表格增加表单提交按钮。为了通用起见,我们期望可以根据用户的要求,指定生成什么类型的按钮。比如,在这个例子中,期望生成一个删除的按钮,所以我们编写如下的一个生成按钮的方法:

public static function createButton($action_name, $label){

  return
"";

  }

  在这个静态方法中,$action_name为要生成的方法名,比如我们要生成的是Delete方法,则传入的$action_name参数为delete,而label则为按钮的标签名。

  而如果得知这个按钮被用户点击并提交呢?则可以用如下方法判断

public static function getPostAction(){

  
if(isset($_POST['dg_action'])){

  return key($_POST[
'dg_action']);

  }

  }

  如果用户选择了数据表格中的多行并提交的话,可以使用如下方法去获得 

public static function getPostItems(){

  
if(!empty($_POST['dg_item'])){

  return $_POST[
'dg_item'];

  }

  return
array();

  }

  返回的是一个表示了用户选择多少个记录的数组。本例子中涉及的是删除按钮的功能,所以编写一个方法,用于将用户选择的数据删除,代码如下:

public function deletePostSelection(){

  
if(!empty($_POST['dg_item']))

  return $this
->CI->db

  
->from($this->tbl_name)

  
->where_in($this->pk_col,$_POST['dg_item'])

  
->delete();

  }

  比如用户在表格中选择了若干条记录,点delete按钮提交,则deletePostSelection方法会等价于执行如下的SQL语句:

DELETE FROM my_table WHERE id IN (1,5,7,3,etc...)。
0
相关文章