ConfigController.class.php 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. <?php
  2. namespace Admin\Controller;
  3. use Think\Page;
  4. /**
  5. * 系统配置控制器
  6. *
  7. */
  8. class ConfigController extends AdminController
  9. {
  10. /**
  11. * 配置列表
  12. * @param $tab 配置分组ID
  13. *
  14. */
  15. public function index($group = 1)
  16. {
  17. // 搜索
  18. $keyword = I('keyword', '', 'string');
  19. $condition = array('like', '%' . $keyword . '%');
  20. $map['id|name|title'] = array(
  21. $condition,
  22. $condition,
  23. $condition,
  24. '_multi' => true,
  25. );
  26. // 获取所有配置
  27. $map['status'] = array('egt', '0'); // 禁用和正常状态
  28. $map['group'] = array('eq', $group);
  29. $p = !empty($_GET["p"]) ? $_GET['p'] : 1;
  30. $config_object = D('Config');
  31. $data_list = $config_object
  32. ->page($p, C('ADMIN_PAGE_ROWS'))
  33. ->where($map)
  34. ->order('sort asc,id asc')
  35. ->select();
  36. $page = new Page(
  37. $config_object->where($map)->count(),
  38. C('ADMIN_PAGE_ROWS')
  39. );
  40. // 设置Tab导航数据列表
  41. $config_group_list = C('CONFIG_GROUP_LIST'); // 获取配置分组
  42. foreach ($config_group_list as $key => $val) {
  43. $tab_list[$key]['title'] = $val;
  44. $tab_list[$key]['href'] = U('index', array('group' => $key));
  45. }
  46. // 使用Builder快速建立列表页面。
  47. $builder = new \Common\Builder\ListBuilder();
  48. $builder->setMetaTitle('配置列表') // 设置页面标题
  49. ->addTopButton('addnew') // 添加新增按钮
  50. ->addTopButton('resume') // 添加启用按钮
  51. ->addTopButton('forbid') // 添加禁用按钮
  52. ->addTopButton('delete') // 添加删除按钮
  53. ->setSearch(
  54. '请输入ID/配置名称/配置标题',
  55. U('index', array('group' => $group))
  56. )
  57. ->setTabNav($tab_list, $group) // 设置页面Tab导航
  58. ->addTableColumn('id', 'ID')
  59. ->addTableColumn('name', '名称')
  60. ->addTableColumn('title', '标题')
  61. ->addTableColumn('sort', '排序')
  62. ->addTableColumn('status', '状态', 'status')
  63. ->addTableColumn('right_button', '操作', 'btn')
  64. ->setTableDataList($data_list) // 数据列表
  65. ->setTableDataPage($page->show()) // 数据列表分页
  66. ->addRightButton('edit') // 添加编辑按钮
  67. ->addRightButton('forbid') // 添加禁用/启用按钮
  68. ->addRightButton('delete') // 添加删除按钮
  69. ->display();
  70. }
  71. /**
  72. * 新增配置
  73. *
  74. */
  75. public function add()
  76. {
  77. if (IS_POST) {
  78. $config_object = D('Config');
  79. $data = $config_object->create();
  80. if ($data) {
  81. if ($config_object->add($data)) {
  82. S('DB_CONFIG_DATA', null);
  83. $this->success('新增成功', U('index'));
  84. } else {
  85. $this->error('新增失败');
  86. }
  87. } else {
  88. $this->error($config_object->getError());
  89. }
  90. } else {
  91. //获取Builder表单类型转换成一维数组
  92. $form_item_type = C('FORM_ITEM_TYPE');
  93. foreach ($form_item_type as $key => $val) {
  94. $form_item_type[$key] = $val[0];
  95. }
  96. //使用FormBuilder快速建立表单页面。
  97. $builder = new \Common\Builder\FormBuilder();
  98. $builder->setMetaTitle('新增配置') //设置页面标题
  99. ->setPostUrl(U('add')) //设置表单提交地址
  100. ->addFormItem('group', 'select', '配置分组', '配置所属的分组', C('CONFIG_GROUP_LIST'))
  101. ->addFormItem('type', 'select', '配置类型', '配置类型的分组', $form_item_type)
  102. ->addFormItem('name', 'text', '配置名称', '配置名称')
  103. ->addFormItem('title', 'text', '配置标题', '配置标题')
  104. ->addFormItem('value', 'textarea', '配置值', '配置值')
  105. ->addFormItem('options', 'textarea', '配置项', '如果是单选、多选、下拉等类型 需要配置该项')
  106. ->addFormItem('tip', 'textarea', '配置说明', '配置说明')
  107. ->addFormItem('sort', 'num', '排序', '用于显示的顺序')
  108. ->display();
  109. }
  110. }
  111. /**
  112. * 编辑配置
  113. *
  114. */
  115. public function edit($id)
  116. {
  117. if (IS_POST) {
  118. $config_object = D('Config');
  119. $data = $config_object->create();
  120. if ($data) {
  121. if ($config_object->save($data)) {
  122. S('DB_CONFIG_DATA', null);
  123. $this->success('更新成功', U('index'));
  124. } else {
  125. $this->error('更新失败');
  126. }
  127. } else {
  128. $this->error($config_object->getError());
  129. }
  130. } else {
  131. // 获取Builder表单类型转换成一维数组
  132. $form_item_type = C('FORM_ITEM_TYPE');
  133. foreach ($form_item_type as $key => $val) {
  134. $form_item_type[$key] = $val[0];
  135. }
  136. // 使用FormBuilder快速建立表单页面。
  137. $builder = new \Common\Builder\FormBuilder();
  138. $builder->setMetaTitle('编辑配置') // 设置页面标题
  139. ->setPostUrl(U('edit')) // 设置表单提交地址
  140. ->addFormItem('id', 'hidden', 'ID', 'ID')
  141. ->addFormItem('group', 'select', '配置分组', '配置所属的分组', C('CONFIG_GROUP_LIST'))
  142. ->addFormItem('type', 'select', '配置类型', '配置类型的分组', $form_item_type)
  143. ->addFormItem('name', 'text', '配置名称', '配置名称')
  144. ->addFormItem('title', 'text', '配置标题', '配置标题')
  145. ->addFormItem('value', 'textarea', '配置值', '配置值')
  146. ->addFormItem('options', 'textarea', '配置项', '如果是单选、多选、下拉等类型 需要配置该项')
  147. ->addFormItem('tip', 'textarea', '配置说明', '配置说明')
  148. ->addFormItem('sort', 'num', '排序', '用于显示的顺序')
  149. ->setFormData(D('Config')->find($id))
  150. ->display();
  151. }
  152. }
  153. /**
  154. * 获取某个分组的配置参数
  155. *
  156. */
  157. public function group($group = 1)
  158. {
  159. //根据分组获取配置l
  160. $map['status'] =array('egt', '0'); // 禁用和正常状态
  161. $map['group'] = array('eq', $group);
  162. $data_list = D('Config')
  163. ->where($map)
  164. ->order('sort asc,id asc')
  165. ->select();
  166. // 设置Tab导航数据列表
  167. $config_group_list = array_slice(C('CONFIG_GROUP_LIST'),0,4,true); // 获取配置分组
  168. foreach ($config_group_list as $key => $val) {
  169. $tab_list[$key]['title'] = $val;
  170. $tab_list[$key]['href'] = U('group', array('group' => $key));
  171. }
  172. // 构造表单名、解析options
  173. foreach ($data_list as &$data) {
  174. $data['name'] = 'config[' . $data['name'] . ']';
  175. $data['options'] = \Util\Str::parseAttr($data['options']);
  176. }
  177. // 使用FormBuilder快速建立表单页面。
  178. $builder = new \Common\Builder\FormBuilder();
  179. $builder->setMetaTitle('系统设置') // 设置页面标题
  180. ->SetTabNav($tab_list, $group) // 设置Tab按钮列表
  181. ->setPostUrl(U('groupSave')) // 设置表单提交地址
  182. ->setExtraItems($data_list) // 直接设置表单数据
  183. ->display();
  184. }
  185. /**
  186. * 批量保存配置
  187. *
  188. */
  189. public function groupSave($config)
  190. {
  191. if ($config && is_array($config)) {
  192. $config_object = D('Config');
  193. foreach ($config as $name => $value) {
  194. $map = array('name' => $name);
  195. // 如果值是数组则转换成字符串,适用于复选框等类型
  196. if (is_array($value)) {
  197. $value = implode(',', $value);
  198. }
  199. $config_object->where($map)->setField('value', $value);
  200. }
  201. }
  202. S('DB_CONFIG_DATA', null);
  203. $this->success('保存成功!');
  204. }
  205. }