NavController.class.php 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. <?php
  2. namespace Admin\Controller;
  3. use \Util\Tree;
  4. /**
  5. * 导航控制器
  6. *
  7. */
  8. class NavController extends AdminController
  9. {
  10. /**
  11. * 导航列表
  12. *
  13. */
  14. public function index($group = 'main')
  15. {
  16. //搜索
  17. $keyword = I('keyword', '', 'string');
  18. $condition = array('like', '%' . $keyword . '%');
  19. $map['id|title'] = array(
  20. $condition,
  21. $condition,
  22. '_multi' => true,
  23. );
  24. // 获取所有导航
  25. $map['status'] = array('egt', '0');
  26. $map['group'] = $group;
  27. $data_list = D('Admin/Nav')
  28. ->where($map)
  29. ->order('sort asc, id asc')
  30. ->select();
  31. // 给文章列表类型加上链接
  32. foreach ($data_list as &$val) {
  33. if ($val['type'] == 'post') {
  34. $val['title'] = '<a href="' . U('Admin/Post/index', array('cid' => $val['id'])) . '">' . $val['title'] . '</a>';
  35. }
  36. }
  37. // 转换成树状列表
  38. $tree = new Tree();
  39. $data_list = $tree->array2tree($data_list);
  40. // 设置Tab导航数据列表
  41. $nav_group_list = C('NAV_GROUP_LIST'); // 获取分类分组
  42. foreach ($nav_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', array('href' => U('Admin/Nav/add', array('group' => $group)))) // 添加新增按钮
  50. ->addTopButton('resume') // 添加启用按钮
  51. ->addTopButton('forbid') // 添加禁用按钮
  52. ->addTopButton('delete') // 添加删除按钮
  53. ->setSearch('请输入ID/导航名称', U('index', array('group' => $group)))
  54. ->setTabNav($tab_list, $group) // 设置页面Tab导航
  55. ->addTableColumn('id', 'ID')
  56. ->addTableColumn('icon', '图标', 'icon')
  57. ->addTableColumn('title_show', '标题')
  58. ->addTableColumn('sort', '排序')
  59. ->addTableColumn('status', '状态', 'status')
  60. ->addTableColumn('right_button', '操作', 'btn')
  61. ->setTableDataList($data_list) // 数据列表
  62. ->addRightButton('edit', array('href' => U('edit', array('group' => $group, 'id' => '__data_id__')))) // 添加编辑按钮
  63. ->addRightButton('forbid') // 添加禁用/启用按钮
  64. ->addRightButton('delete') // 添加删除按钮
  65. ->display();
  66. }
  67. // 根据导航类型设置表单项目
  68. private $extra_html = <<<EOF
  69. <script type="text/javascript">
  70. $(function(){
  71. $('input[name="type"]').change(function() {
  72. var type = $(this).val();
  73. // 链接类型
  74. if (type == 'link') {
  75. $('.item_url').removeClass('hidden');
  76. $('.item_content').addClass('hidden');
  77. $('.item_module_name').addClass('hidden');
  78. // 模块类型
  79. } else if (type == 'module') {
  80. $('.item_url').addClass('hidden');
  81. $('.item_content').addClass('hidden');
  82. $('.item_module_name').removeClass('hidden');
  83. // 单页类型
  84. } else if (type == 'page') {
  85. $('.item_url').addClass('hidden');
  86. $('.item_content').removeClass('hidden');
  87. $('.item_module_name').addClass('hidden');
  88. // 文章列表类型
  89. } else if (type == 'post') {
  90. $('.item_url').addClass('hidden');
  91. $('.item_content').addClass('hidden');
  92. $('.item_module_name').addClass('hidden');
  93. } else {
  94. $('.item_url').addClass('hidden');
  95. $('.item_content').addClass('hidden');
  96. $('.item_module_name').addClass('hidden');
  97. }
  98. });
  99. });
  100. </script>
  101. EOF;
  102. /**
  103. * 新增导航
  104. *
  105. */
  106. public function add($group)
  107. {
  108. if (IS_POST) {
  109. $nav_object = D('Admin/Nav');
  110. $data = $nav_object->create();
  111. if ($data) {
  112. $id = $nav_object->add($data);
  113. if ($id) {
  114. $this->success('新增成功', U('index', array('group' => $group)));
  115. } else {
  116. $this->error('新增失败');
  117. }
  118. } else {
  119. $this->error($nav_object->getError());
  120. }
  121. } else {
  122. // 使用FormBuilder快速建立表单页面。
  123. $builder = new \Common\Builder\FormBuilder();
  124. $builder->setMetaTitle('新增导航') // 设置页面标题
  125. ->setPostUrl(U('', array('group' => $group))) // 设置表单提交地址
  126. ->addFormItem('group', 'hidden', '导航分组', '导航分组')
  127. ->addFormItem('pid', 'select', '上级导航', '上级导航', select_list_as_tree('Admin/Nav', array('group' => $group), '顶级导航'))
  128. ->addFormItem('title', 'text', '导航标题', '导航前台显示标题')
  129. ->addFormItem('type', 'radio', '导航类型', '导航类型', D('Admin/Nav')->nav_type())
  130. ->addFormItem('url', 'text', '外链URL地址', '支持http://格式或者TP的U函数解析格式')
  131. ->addFormItem('content', 'kindeditor', '单页内容', '单页内容', null, 'hidden')
  132. ->addFormItem('target', 'radio', '打开方式', '打开方式', array('' => '当前窗口', '_blank' => '新窗口打开'))
  133. ->addFormItem('icon', 'icon', '图标', '导航图标')
  134. ->addFormItem('sort', 'num', '排序', '用于显示的顺序')
  135. ->setFormData(array('type' => 'link', 'group' => $group))
  136. ->setExtraHtml($this->extra_html)
  137. ->display();
  138. }
  139. }
  140. /**
  141. * 编辑导航
  142. *
  143. */
  144. public function edit($id, $group)
  145. {
  146. if (IS_POST) {
  147. $nav_object = D('Admin/Nav');
  148. $data = $nav_object->create();
  149. if ($data) {
  150. if ($nav_object->save($data)) {
  151. $this->success('更新成功', U('index', array('group' => $group)));
  152. } else {
  153. $this->error('更新失败');
  154. }
  155. } else {
  156. $this->error($nav_object->getError());
  157. }
  158. } else {
  159. $info = D('Admin/Nav')->find($id);
  160. // 使用FormBuilder快速建立表单页面。
  161. $builder = new \Common\Builder\FormBuilder();
  162. $builder->setMetaTitle('编辑导航') // 设置页面标题
  163. ->setPostUrl(U('')) // 设置表单提交地址
  164. ->addFormItem('id', 'hidden', 'ID', 'ID')
  165. ->addFormItem('group', 'hidden', '导航分组', '导航分组')
  166. ->addFormItem('pid', 'select', '上级导航', '上级导航', select_list_as_tree('Admin/Nav', array('group' => $group), '顶级导航'))
  167. ->addFormItem('title', 'text', '导航标题', '导航前台显示标题')
  168. ->addFormItem('type', 'radio', '导航类型', '导航类型', D('Admin/Nav')->nav_type())
  169. ->addFormItem('url', 'text', '外链URL地址', '支持http://格式或者TP的U函数解析格式', null, $info['type'] === 'link' ? '' : 'hidden')
  170. ->addFormItem('content', 'kindeditor', '单页内容', '单页内容', null, $info['type'] === 'page' ? '' : 'hidden')
  171. ->addFormItem('target', 'radio', '打开方式', '打开方式', array('' => '当前窗口', '_blank' => '新窗口打开'))
  172. ->addFormItem('icon', 'icon', '图标', '导航图标')
  173. ->addFormItem('sort', 'num', '排序', '用于显示的顺序')
  174. ->setFormData($info)
  175. ->setExtraHtml($this->extra_html)
  176. ->display();
  177. }
  178. }
  179. }