这里是一个helper的帮助类方法,注意CI中的helper类,命名是private的,以下划线+方法名的方法命名。这个方法是在下文中的generate()中用到的,其中主要的功能是,循环查找$this->tbl_fields中的每个字段,是否属于隐藏显示的字段,如果不属于隐藏字段,则通过$this->CI->db->select($field);将相关字段取出。另外要注意的是
这句代码中,实际的作用是,在数据表格的第一列中,加一项代表“全选/反选”功能的checkbox,这个功能可以用在对数据进行选择或删除的时候。
接下来,是生成数据表格的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一句)。
接下来,为数据表格增加表单提交按钮。为了通用起见,我们期望可以根据用户的要求,指定生成什么类型的按钮。比如,在这个例子中,期望生成一个删除的按钮,所以我们编写如下的一个生成按钮的方法:
return "";
}
在这个静态方法中,$action_name为要生成的方法名,比如我们要生成的是Delete方法,则传入的$action_name参数为delete,而label则为按钮的标签名。
而如果得知这个按钮被用户点击并提交呢?则可以用如下方法判断
if(isset($_POST['dg_action'])){
return key($_POST['dg_action']);
}
}
如果用户选择了数据表格中的多行并提交的话,可以使用如下方法去获得
if(!empty($_POST['dg_item'])){
return $_POST['dg_item'];
}
return array();
}
返回的是一个表示了用户选择多少个记录的数组。本例子中涉及的是删除按钮的功能,所以编写一个方法,用于将用户选择的数据删除,代码如下:
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语句: