Column.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | 海豚PHP框架 [ DolphinPHP ]
  4. // +----------------------------------------------------------------------
  5. // | 版权所有 2016~2017 河源市卓锐科技有限公司 [ http://www.zrthink.com ]
  6. // +----------------------------------------------------------------------
  7. // | 官方网站: http://dolphinphp.com
  8. // +----------------------------------------------------------------------
  9. // | 开源协议 ( http://www.apache.org/licenses/LICENSE-2.0 )
  10. // +----------------------------------------------------------------------
  11. namespace app\cms\admin;
  12. use app\admin\controller\Admin;
  13. use app\common\builder\ZBuilder;
  14. use app\cms\model\Model as DocumentModel;
  15. use app\cms\model\Column as ColumnModel;
  16. use app\cms\model\Document;
  17. use app\user\model\Role as RoleModel;
  18. use util\Tree;
  19. use util\File;
  20. /**
  21. * 栏目控制器
  22. * @package app\cms\admin
  23. */
  24. class Column extends Admin
  25. {
  26. /**
  27. * 栏目列表
  28. * @author 蔡伟明 <314013107@qq.com>
  29. * @return mixed
  30. */
  31. public function index()
  32. {
  33. // 查询
  34. $map = $this->getMap();
  35. // 数据列表
  36. $data_list = ColumnModel::where($map)->column(true);
  37. if (empty($map)) {
  38. $data_list = Tree::config(['title' => 'name'])->toList($data_list);
  39. }
  40. // 自定义按钮
  41. $btnMove = [
  42. 'class' => 'btn btn-xs btn-default js-move-column',
  43. 'icon' => 'fa fa-fw fa-arrow-circle-right',
  44. 'title' => '移动栏目'
  45. ];
  46. $btnAdd = [
  47. 'class' => 'btn btn-xs btn-default',
  48. 'icon' => 'fa fa-fw fa-plus',
  49. 'title' => '新增子栏目',
  50. 'href' => url('add', ['pid' => '__id__'])
  51. ];
  52. // 使用ZBuilder快速创建数据表格
  53. return ZBuilder::make('table')
  54. ->setSearch(['name' => '栏目名称']) // 设置搜索框
  55. ->addColumns([ // 批量添加数据列
  56. ['id', 'ID'],
  57. ['icon', '图标', 'icon'],
  58. ['name', '栏目名称', 'callback', function($value, $data){
  59. return isset($data['title_prefix']) ? $data['title_display'] : $value;
  60. }, '__data__'],
  61. ['model', '内容模型', 'select', DocumentModel::getTitleList()],
  62. ['rank_auth', '浏览权限', 'select', RoleModel::getTree(null, '开放浏览')],
  63. ['hide', '是否隐藏', 'yesno'],
  64. ['post_auth', '支持投稿', 'yesno'],
  65. ['create_time', '创建时间', 'datetime'],
  66. ['sort', '排序', 'text.edit'],
  67. ['status', '状态', 'switch'],
  68. ['right_button', '操作', 'btn']
  69. ])
  70. ->addTopButtons('add,enable,disable') // 批量添加顶部按钮
  71. ->addRightButton('custom', $btnAdd)
  72. ->addRightButton('edit') // 添加右侧按钮
  73. // ->addRightButton('custom', $btnMove)
  74. ->addRightButton('delete', ['data-tips' => '删除栏目前,请确保无子栏目和文档!']) // 添加右侧按钮
  75. ->setRowList($data_list) // 设置表格数据
  76. ->fetch(); // 渲染模板
  77. }
  78. /**
  79. * 新增栏目
  80. * @param int $pid 父级id
  81. * @author 蔡伟明 <314013107@qq.com>
  82. * @return mixed
  83. */
  84. public function add($pid = 0)
  85. {
  86. // 保存数据
  87. if ($this->request->isPost()) {
  88. // 表单数据
  89. $data = $this->request->post();
  90. // 验证
  91. $result = $this->validate($data, 'Column');
  92. if(true !== $result) $this->error($result);
  93. if ($column = ColumnModel::create($data)) {
  94. cache('cms_column_list', null);
  95. // 记录行为
  96. action_log('column_add', 'cms_column', $column['id'], UID, $data['name']);
  97. $this->success('新增成功', 'index');
  98. } else {
  99. $this->error('新增失败');
  100. }
  101. }
  102. $template_list = File::get_dirs(APP_PATH.'cms/view/column/')['file'];
  103. $template_detail = File::get_dirs(APP_PATH.'cms/view/document/')['file'];
  104. // 显示添加页面
  105. return ZBuilder::make('form')
  106. ->addFormItems([
  107. ['select', 'pid', '所属栏目', '<span class="text-danger">必选</span>', ColumnModel::getTreeList(), $pid],
  108. ['text', 'name', '栏目名称', '<span class="text-danger">必填</span>'],
  109. ['radio', 'model', '内容模型', '<span class="text-danger">必选</span>', DocumentModel::getTitleList()],
  110. ['radio', 'type', '栏目属性', '', ['最终列表栏目', '外部链接'], 0],
  111. ['text', 'url', '链接', '可以填写完整的url,如:<code>http://www.dolphinphp.com</code>,也可以填写 <code>模块/控制器/操作</code>,如:<code>cms/index/index</code>'],
  112. ['radio', 'target', '打开方式', '', ['_self' => '当前窗口', '_blank' => '新窗口'], '_self'],
  113. // ['select', 'index_template', '封面页模板', '可选'],
  114. ['select', 'list_template', '列表页模板', '可选,模板目录: <code>cms/view/column</code>', parse_array($template_list)],
  115. ['select', 'detail_template', '详情页模板', '可选,模板目录: <code>cms/view/document</code>', parse_array($template_detail)],
  116. ['ckeditor', 'content', '栏目内容', '可作为单页使用'],
  117. ['icon', 'icon', '图标'],
  118. ['radio', 'post_auth', '是否支持投稿', '是否允许前台用户投稿', ['禁止投稿', '允许投稿'], 1],
  119. ['radio', 'hide', '是否隐藏栏目', '隐藏后前台不可见', ['显示', '隐藏'], 0],
  120. ['select', 'rank_auth', '浏览权限', '', RoleModel::getTree(null, '开放浏览'), 0],
  121. ['radio', 'status', '立即启用', '', ['否', '是'], 1],
  122. ['text', 'sort', '排序', '', 100],
  123. ])
  124. ->setTrigger('type', '0,2', 'index_template,list_template,detail_template')
  125. ->setTrigger('type', '1', 'url,target')
  126. ->fetch();
  127. }
  128. /**
  129. * 编辑栏目
  130. * @param string $id 栏目id
  131. * @author 蔡伟明 <314013107@qq.com>
  132. */
  133. public function edit($id = '')
  134. {
  135. if ($id === 0) $this->error('参数错误');
  136. // 保存数据
  137. if ($this->request->isPost()) {
  138. $data = $this->request->post();
  139. // 验证
  140. $result = $this->validate($data, 'Column');
  141. // 验证失败 输出错误信息
  142. if(true !== $result) $this->error($result);
  143. if (ColumnModel::update($data)) {
  144. // 记录行为
  145. action_log('column_edit', 'cms_column', $id, UID, $data['name']);
  146. return $this->success('编辑成功', 'index');
  147. } else {
  148. return $this->error('编辑失败');
  149. }
  150. }
  151. // 获取数据
  152. $info = ColumnModel::get($id);
  153. $template_list = File::get_dirs(APP_PATH.'cms/view/column/')['file'];
  154. $template_detail = File::get_dirs(APP_PATH.'cms/view/document/')['file'];
  155. // 显示编辑页面
  156. return ZBuilder::make('form')
  157. ->addFormItems([
  158. ['hidden', 'id'],
  159. ['select', 'pid', '所属栏目', '<span class="text-danger">必选</span>', ColumnModel::getTreeList($id)],
  160. ['text', 'name', '栏目名称', '<span class="text-danger">必填</span>'],
  161. ['radio', 'model', '内容模型', '<span class="text-danger">必选</span>', DocumentModel::getTitleList()],
  162. ['radio', 'type', '栏目属性', '', ['最终列表栏目', '外部链接'], 0],
  163. ['text', 'url', '链接', '可以填写完整的url,如:<code>http://www.dolphinphp.com</code>,也可以填写 <code>模块/控制器/操作</code>,如:<code>cms/index/index</code>'],
  164. ['radio', 'target', '打开方式', '', ['_self' => '当前窗口', '_blank' => '新窗口'], '_self'],
  165. // ['select', 'index_template', '封面页模板', '可选'],
  166. ['select', 'list_template', '列表页模板', '可选,模板目录: <code>cms/view/column</code>', parse_array($template_list)],
  167. ['select', 'detail_template', '详情页模板', '可选,模板目录: <code>cms/view/document</code>', parse_array($template_detail)],
  168. ['ckeditor', 'content', '栏目内容', '可作为单页使用'],
  169. ['icon', 'icon', '图标'],
  170. ['radio', 'post_auth', '是否支持投稿', '是否允许前台用户投稿', ['禁止投稿', '允许投稿']],
  171. ['radio', 'hide', '是否隐藏栏目', '隐藏后前台不可见', ['显示', '隐藏'], 0],
  172. ['select', 'rank_auth', '浏览权限', '', RoleModel::getTree(null, '开放浏览')],
  173. ['radio', 'status', '立即启用', '', ['否', '是']],
  174. ['text', 'sort', '排序'],
  175. ])
  176. ->setTrigger('type', '0,2', 'index_template,list_template,detail_template')
  177. ->setTrigger('type', '1', 'url,target')
  178. ->setFormData($info)
  179. ->fetch();
  180. }
  181. /**
  182. * 删除栏目
  183. * @param null $ids 栏目id
  184. * @author 蔡伟明 <314013107@qq.com>
  185. * @return mixed
  186. */
  187. public function delete($ids = null)
  188. {
  189. if ($ids === null) $this->error('参数错误');
  190. // 检查是否有子栏目
  191. if (ColumnModel::where('pid', $ids)->find()) {
  192. $this->error('请先删除或移动该栏目下的子栏目');
  193. }
  194. // 检查是否有文档
  195. if (Document::where('cid', $ids)->find()) {
  196. $this->error('请先删除或移动该栏目下的所有文档');
  197. }
  198. // 删除并记录日志
  199. $column_name = get_column_name($ids);
  200. return parent::delete(['column_delete', 'cms_column', 0, UID, $column_name]);
  201. }
  202. /**
  203. * 启用栏目
  204. * @param array $record 行为日志
  205. * @author 蔡伟明 <314013107@qq.com>
  206. * @return mixed
  207. */
  208. public function enable($record = [])
  209. {
  210. return $this->setStatus('enable');
  211. }
  212. /**
  213. * 禁用栏目
  214. * @param array $record 行为日志
  215. * @author 蔡伟明 <314013107@qq.com>
  216. * @return mixed
  217. */
  218. public function disable($record = [])
  219. {
  220. return $this->setStatus('disable');
  221. }
  222. /**
  223. * 设置栏目状态:删除、禁用、启用
  224. * @param string $type 类型:enable/disable
  225. * @param array $record
  226. * @author 蔡伟明 <314013107@qq.com>
  227. * @return mixed
  228. */
  229. public function setStatus($type = '', $record = [])
  230. {
  231. $ids = $this->request->isPost() ? input('post.ids/a') : input('param.ids');
  232. $column_delete = is_array($ids) ? '' : $ids;
  233. $column_names = ColumnModel::where('id', 'in', $ids)->column('name');
  234. return parent::setStatus($type, ['column_'.$type, 'cms_column', $column_delete, UID, implode('、', $column_names)]);
  235. }
  236. /**
  237. * 快速编辑
  238. * @param array $record 行为日志
  239. * @author 蔡伟明 <314013107@qq.com>
  240. * @return mixed
  241. */
  242. public function quickEdit($record = [])
  243. {
  244. $id = input('post.pk', '');
  245. $field = input('post.name', '');
  246. $value = input('post.value', '');
  247. $column = ColumnModel::where('id', $id)->value($field);
  248. $details = '字段(' . $field . '),原值(' . $column . '),新值:(' . $value . ')';
  249. return parent::quickEdit(['column_edit', 'cms_column', $id, UID, $details]);
  250. }
  251. }