/Phpcmf/Table用于快速实现数据表的显示、增加、修改、删除等动作,适用于任何数据表的显示和操作。

    一、示例说明

    例如需要在增加一个资料表,用于录入资料数据,那么可以使用Table类快速实现数据的储存和显示。

    image.png

    1、下载Demo程序示例

    A、入门级别的Demo(推荐)

    Table操作类 - 图2Table类 入门 Test App.zip

    B、进阶级别的Demo

    Test.zip

    解压之后放到 dayrui/App目录之下,如下图所示

    image.png

    2、创建数据库,我们示例只做数据标题和数据内容的录入

    1. CREATE TABLE `dr_test` (
    2. `id` int(11) NOT NULL,
    3. `title` varchar(255) NOT NULL,
    4. `content` text NOT NULL,
    5. `inputtime` int(11) NOT NULL
    6. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    7.  
    8. ALTER TABLE `dr_test`
    9. ADD PRIMARY KEY (`id`);
    10. ALTER TABLE `dr_test`
    11. MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

    3、界面预览,admin.php?s=test&c=test,即可看到以下界面:

    image.png

    这样就可以利用Table类进行增加、删除、修改操作,根本不需要开发者写多余的sql查询语句,Table类已经帮您处理好了。

    二、解析Table类源码

    1、构造函数初始化方法

    1. public function __construct(...$params)
    2. {
    3. parent::__construct(...$params);
    4. // 表单显示名称
    5. $this->name = dr_lang('资料数据');
    6. // 模板前缀(避免混淆)
    7. $this->tpl_prefix = 'test_';
    8. // 入库字段,实例中用到两个字段录入
    9. $field = array(
    10. 'name' => array(
    11. 'ismain' => 1,
    12. 'name' => dr_lang('名称'),
    13. 'fieldname' => 'name',
    14. 'fieldtype' => 'Text',
    15. 'setting' => array(
    16. 'option' => array(
    17. 'width' => 200,
    18. ),
    19. 'validate' => array(
    20. 'required' => 1,
    21. )
    22. )
    23. ),
    24. 'content' => array(
    25. 'ismain' => 1,
    26. 'name' => dr_lang('资料内容'),
    27. 'fieldtype' => 'Ueditor',
    28. 'fieldname' => 'content',
    29. 'setting' => array(
    30. 'option' => array(
    31. 'mode' => 1,
    32. 'height' => 300,
    33. 'width' => '100%'
    34. ),
    35. 'validate' => array(
    36. 'required' => 1,
    37. )
    38. )
    39. ),
    40. );
    41. // 初始化数据表
    42. $this->_init([
    43. 'table' => 'test', // 表的名字
    44. 'field' => $field, // 设置入库字段
    45. 'show_field' => 'title', // 表的主字段
    46. 'order_by' => 'id desc', // 列表排序显示方式
    47. ]);
    48. \Phpcmf\Service::V()->assign([
    49. 'field' => $field,
    50. 'menu' => \Phpcmf\Service::M('auth')->_admin_menu(
    51. [
    52. $this->name => [APP_DIR.'/'.\Phpcmf\Service::L('Router')->class.'/index', 'fa fa-tag'],
    53. '添加' => [APP_DIR.'/'.\Phpcmf\Service::L('Router')->class.'/add', 'fa fa-plus'],
    54. '修改' => ['hide:'.APP_DIR.'/'.\Phpcmf\Service::L('Router')->class.'/edit', 'fa fa-edit'],
    55. ])
    56. ]);
    57. }

    关于初始化数据表的_init方法提供以下参数参考:

    1. table 查询主表
    2.  
    3. field 可用搜索字段列表
    4. date_field 列表搜索的时间字段,默认inputtime
    5. show_field 显示主字段,用于修改日志
    6. list_field 列表显示字段
    7.  
    8. order_by 默认排序方式
    9. order_list 默认排序方式(同上一样)
    10. where_list 默认搜索条件,每次列表都执行
    11. join_list 关联查询,格式:['member', 'member.id=admin.uid', 'left']
    12. select_list 列表查询筛选字段

    2、数据列表方法

    1. public function index() {
    2. list($tpl) = $this->_List(); // 完成table自动查询并分页显示动作
    3. \Phpcmf\Service::V()->display($tpl); // 设定显示模板
    4. }

    3、数据增加方法

    1. public function add() {
    2. list($tpl) = $this->_Post(0); // 0表示新增post数据
    3. \Phpcmf\Service::V()->display($tpl);// 设定表单模板
    4. }

    4、数据修改方法

    1. public function edit() {
    2. // 传入id到post方法表示修改此id提交的数据
    3. list($tpl) = $this->_Post(intval(\Phpcmf\Service::L('Input')->get('id')));
    4. \Phpcmf\Service::V()->display($tpl);
    5. }

    5、数据删除方法

    1. public function del() {
    2. $this->_Del(
    3. \Phpcmf\Service::L('Input')->get_post_ids(), // 获取批量删除id号
    4. null, // 删除之前的函数验证
    5. null, // 删除之后的函数处理
    6. \Phpcmf\Service::M()->dbprefix($this->init['table']) // 设定删除表名称
    7. );
    8. }

    6、数据存储格式化方法

    1. // 格式化保存数据
    2. protected function _Format_Data($id, $data, $old) {
    3. if (!$id) {
    4. // 当提交新数据时,把当前时间插入进去
    5. $data[1]['inputtime'] = SYS_TIME;
    6. }
    7. return $data;
    8. }

    7、数据存储验证及判断

    1. protected function _Save($id = 0, $data = [], $old = [], $func = null, $func2 = null) {
    2. return parent::_Save($id, $data, $old, function($id, $data, $old){
    3. // 保存之前执行的函数,并返回新的数据
    4. if (!$id) {
    5. // 当提交新数据时,把当前时间插入进去
    6. $data[1]['inputtime'] = SYS_TIME;
    7. }
    8.  
    9. return dr_return_data(1, null, $data);
    10. }, function ($id, $data, $old) {
    11. // 保存之后执行的动作
    12. });
    13. }

    如果不写此方法的话就不会对数据进行格式化操作,按照提交表单原样储存

    文档最后更新时间:2018-01-15 15:37:49