common_lists

说明

豆信3在/App/Common/Controller/CommonController.class.php中封装了一个common_lists()方法,用于数据的通用显示。在任意直接继承或者间接继承了CommonController的控制器中,使用$this->common_lists()写法可以调用通用的数据列表模板显示数据。

示例

common_lists - 图1

上图所示的公众号管理系统中的粉丝列表页面,对应的是/App/Mp/Controller/FansController.class.php中的lists()方法。

代码实现

  1. /**
  2. * 粉丝列表
  3. * @author 艾逗笔<765532665@qq.com>
  4. */
  5. public function lists() {
  6. $this->addCrumb('公众号管理', U('Mp/Index/index'), '')
  7. ->addCrumb('粉丝管理', U('Mp/Fans/lists'), '')
  8. ->addCrumb('粉丝列表', '', 'active')
  9. ->addNav('粉丝列表', '', 'active')
  10. ->addNav('功能配置', U('Mp/Fans/setting'), '')
  11. ->setModel('mp_fans')
  12. ->setListMap(array('mpid'=>get_mpid()))
  13. ->addListItem('openid', '粉丝OPENID', 'hidden')
  14. ->addListItem('headimgurl', '头像', 'image', array('attr'=>'width=50 height=50','placeholder'=>__ROOT__ . '/Public/Admin/img/noname.jpg'))
  15. ->addListItem('nickname', '昵称', '', array('placeholder'=>'匿名'))
  16. ->addListItem('sex', '性别', 'enum', array('options'=>array(''=>'未知',0=>'未知',1=>'男',2=>'女')))
  17. ->addListItem('is_subscribe', '是否关注', 'enum', array('options'=>array(0=>'未关注',1=>'已关注')))
  18. ->addListItem('id', '操作', 'custom', array('options'=>array('edit_fans'=>array('编辑粉丝资料', U('Mp/Fans/edit_fans', array('openid'=>'{openid}')),'btn btn-primary btn-sm icon-edit',''))))
  19. ->common_lists();
  20. }

通过addCrumbaddNav等连贯操作可以定义数据列表页面的面包屑导航和功能导航,通过setModelsetListModel等连贯操作可以设置数据列表要显示的数据源,通过addListItem可以设置要显示的字段并对数据进行格式化后显示,格式化数据采用的方式通过addListItem的第三及第四个参数指定。最后通过common_lists方法以通用的数据列表形式把通过连贯操作设置的内容显示出来。连贯操作涉及到的方法及参数定义请参考自定义模型章节的详细介绍

通过模型自定义显示数据列表

说明

除了上面演示的通过$this->addCrumb()->common_lists()等连贯操作来显示数据列表外,豆信3也支持使用模型自定义的方式来显示数据。模型自定义的方式在代码美观上面来说可能没有连贯操作简洁,但是如果是在插件控制器中使用通用的数据列表显示数据,推荐使用模型自定义方式。一方面是因为模型可以在插件信息文件进行定义,在控制器中通过get_addon_model('model_name')的方式引用,做到了视图定义与控制器业务逻辑分离。另一方面如果是通过云平台安装的插件,模型自定义信息写入数据库后插件信息文件自动删除,可以降低插件被盗版的可能性。

示例

common_lists - 图2

代码实现

1、在插件的info.php中定义模型

  1. return array(
  2. 'model' => array(
  3. 'idou_guestbook_list' => array(
  4. 'name' => 'idou_guestbook_list',
  5. 'title' => '留言表',
  6. 'lists' => array(
  7. array(
  8. 'name' => 'id',
  9. 'title' => '主键',
  10. 'format' => 'hidden'
  11. ),
  12. array(
  13. 'name' => 'openid',
  14. 'title' => '留言者头像',
  15. 'format' => 'function',
  16. 'extra' => array(
  17. 'function_name' => 'get_fans_headimg',
  18. 'params' => '###'
  19. ),
  20. ),
  21. array(
  22. 'name' => 'nickname',
  23. 'title' => '留言者昵称'
  24. ),
  25. array(
  26. 'name' => 'content',
  27. 'title' => '留言内容'
  28. ),
  29. array(
  30. 'name' => 'create_time',
  31. 'title' => '留言时间',
  32. 'format' => 'function',
  33. 'extra' => array(
  34. 'function_name' => 'date',
  35. 'params' => 'Y-m-d H:i:s,###'
  36. )
  37. ),
  38. array(
  39. 'name' => 'status',
  40. 'title' => '留言状态',
  41. 'format' => 'enum',
  42. 'extra' => array(
  43. 'options' => array(
  44. 0 => '<font color="blue">未审核</font>',
  45. 1 => '<font color="green">审核通过</font>',
  46. 2 => '<font color="red">审核不通过</font>'
  47. )
  48. )
  49. ),
  50. array(
  51. 'name' => 'id',
  52. 'title' => '操作',
  53. 'format' => 'custom',
  54. 'extra' => array(
  55. 'options' => array(
  56. 'edit' => array(
  57. 'title' => '编辑留言',
  58. 'url' => create_addon_url('edit', array('id'=>'{id}')),
  59. 'class' => 'btn btn-primary btn-sm icon-edit',
  60. 'attr' => ''
  61. ),
  62. 'delete' => array(
  63. 'title' => '删除留言',
  64. 'url' => create_addon_url('delete', array('id'=>'{id}')),
  65. 'class' => 'btn btn-danger btn-sm icon-delete',
  66. 'attr' => ''
  67. )
  68. )
  69. )
  70. )
  71. ),
  72. 'list_map' => array('mpid'=>get_mpid()),
  73. 'list_order' => 'create_time desc'
  74. )
  75. ),
  76. );

2、在控制器中调用模型并使用通用数据列表模板显示数据

  1. /**
  2. * 留言管理
  3. * @author 艾逗笔<765532665@qq.com>
  4. */
  5. public function messages() {
  6. $model = get_addon_model('idou_guestbook_list');
  7. $this->setModel($model)
  8. ->common_lists();
  9. }

或者也可以这样写:

  1. /**
  2. * 留言管理
  3. * @author 艾逗笔<765532665@qq.com>
  4. */
  5. public function messages() {
  6. $model = get_addon_model('idou_guestbook_list');
  7. parent::common_lists($model);
  8. }

关于自定义模型中涉及到的数组元素可以参考模型自定义章节给出的详细介绍,在开发当中可以结合使用连贯操作和模型定义两种方式来调用通用的数据列表显示数据。