/Phpcmf/Table用于快速实现数据表的显示、增加、修改、删除等动作,适用于任何数据表的显示和操作。
一、示例说明
例如需要在增加一个资料表,用于录入资料数据,那么可以使用Table类快速实现数据的储存和显示。
1、下载Demo程序示例
A、入门级别的Demo(推荐)
Table类 入门 Test App.zip
B、进阶级别的Demo
Test.zip
解压之后放到 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) {
// 保存之后执行的动作
});
}
如果不写此方法的话就不会对数据进行格式化操作,按照提交表单原样储存