/Phpcmf/Table用于快速实现数据表的显示、增加、修改、删除等动作,适用于任何数据表的显示和操作。
一、示例说明
例如需要在增加一个资料表,用于录入资料数据,那么可以使用Table类快速实现数据的储存和显示。
1、下载Demo程序示例
A、入门级别的Demo(推荐)
B、进阶级别的Demo
解压之后放到 dayrui/App目录之下,如下图所示
2、创建数据库,我们示例只做数据标题和数据内容的录入
CREATE TABLE `dr_test` ( `id` int(11) NOT NULL, `title` varchar(255) NOT NULL, `content` text NOT NULL, `inputtime` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ALTER TABLE `dr_test` ADD PRIMARY KEY (`id`); ALTER TABLE `dr_test` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
3、界面预览,admin.php?s=test&c=test,即可看到以下界面:
这样就可以利用Table类进行增加、删除、修改操作,根本不需要开发者写多余的sql查询语句,Table类已经帮您处理好了。
二、解析Table类源码
1、构造函数初始化方法
public function __construct() { parent::__construct(); // 表单显示名称 $this->name = dr_lang('资料数据'); // 模板前缀(避免混淆) $this->tpl_prefix = 'test_'; // 入库字段,实例中用到两个字段录入 $field = array( 'name' => array( 'ismain' => 1, 'name' => dr_lang('名称'), 'fieldname' => 'name', 'fieldtype' => 'Text', 'setting' => array( 'option' => array( 'width' => 200, ), 'validate' => array( 'required' => 1, ) ) ), 'content' => array( 'ismain' => 1, 'name' => dr_lang('资料内容'), 'fieldtype' => 'Ueditor', 'fieldname' => 'content', 'setting' => array( 'option' => array( 'mode' => 1, 'height' => 300, 'width' => '100%' ), 'validate' => array( 'required' => 1, ) ) ), ); // 初始化数据表 $this->_init([ 'table' => 'test', // 表的名字 'field' => $field, // 设置入库字段 'show_field' => 'title', // 表的主字段 'order_by' => 'id desc', // 列表排序显示方式 ]); \Phpcmf\Service::V()->assign([ 'field' => $field, 'menu' => \Phpcmf\Service::M('auth')->_admin_menu( [ $this->name => [APP_DIR.'/'.\Phpcmf\Service::L('Router')->class.'/index', 'fa fa-tag'], '添加' => [APP_DIR.'/'.\Phpcmf\Service::L('Router')->class.'/add', 'fa fa-plus'], '修改' => ['hide:'.APP_DIR.'/'.\Phpcmf\Service::L('Router')->class.'/edit', 'fa fa-edit'], ]) ]); }
关于初始化数据表的_init方法提供以下参数参考:
table 查询主表 field 可用搜索字段列表 date_field 列表搜索的时间字段,默认inputtime show_field 显示主字段,用于修改日志 list_field 列表显示字段 order_by 默认排序方式 order_list 默认排序方式(同上一样) where_list 默认搜索条件,每次列表都执行 join_list 关联查询,格式:['member', 'member.id=admin.uid', 'left'] select_list 列表查询筛选字段
类的联动条件变量:
$this->edit_where = ''; 修改数据时候的条件判断 $this->delete_where = ''; 删除数据时候的条件判断 $this->list_where = ''; 数据列表时候的条件判断
2、数据列表方法
public function index() { list($tpl) = $this->_List(); // 完成table自动查询并分页显示动作 \Phpcmf\Service::V()->display($tpl); // 设定显示模板 }
3、数据增加方法
public function add() { list($tpl) = $this->_Post(0); // 0表示新增post数据 \Phpcmf\Service::V()->display($tpl);// 设定表单模板 }
4、数据修改方法
public function edit() { // 传入id到post方法表示修改此id提交的数据 list($tpl) = $this->_Post(intval(\Phpcmf\Service::L('Input')->get('id'))); \Phpcmf\Service::V()->display($tpl); }
5、数据删除方法
public function del() { $this->_Del( \Phpcmf\Service::L('Input')->get_post_ids(), // 获取批量删除id号 null, // 删除之前的函数验证 null, // 删除之后的函数处理 \Phpcmf\Service::M()->dbprefix($this->init['table']) // 设定删除表名称 ); }
6、数据存储格式化方法
// 格式化保存数据 protected function _Format_Data($id, $data, $old) { if (!$id) { // 当提交新数据时,把当前时间插入进去 $data[1]['inputtime'] = SYS_TIME; } return $data; }
7、数据存储验证及判断
protected function _Save($id = 0, $data = [], $old = [], $func = null, $func2 = null) { return parent::_Save($id, $data, $old, function($id, $data, $old){ // 保存之前执行的函数,并返回新的数据 if (!$id) { // 当提交新数据时,把当前时间插入进去 $data[1]['inputtime'] = SYS_TIME; } return dr_return_data(1, null, $data); }, function ($id, $data, $old) { // 保存之后执行的动作 }); }
如果不写此方法的话就不会对数据进行格式化操作,按照提交表单原样储存