NavMenuController.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | ThinkCMF [ WE CAN DO IT MORE SIMPLE ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2013-present http://www.thinkcmf.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
  8. // +----------------------------------------------------------------------
  9. // | Author: kane <chengjin005@163.com> 小夏 < 449134904@qq.com>
  10. // +----------------------------------------------------------------------
  11. namespace app\admin\controller;
  12. use app\admin\model\NavMenuModel;
  13. use cmf\controller\AdminBaseController;
  14. use tree\Tree;
  15. /**
  16. * Class NavMenuController 前台菜单管理控制器
  17. * @package app\admin\controller
  18. */
  19. class NavMenuController extends AdminBaseController
  20. {
  21. /**
  22. * 导航菜单
  23. * @adminMenu(
  24. * 'name' => '导航菜单',
  25. * 'parent' => 'admin/Nav/index',
  26. * 'display'=> false,
  27. * 'hasView'=> true,
  28. * 'order' => 10000,
  29. * 'icon' => '',
  30. * 'remark' => '导航菜单',
  31. * 'param' => ''
  32. * )
  33. */
  34. public function index()
  35. {
  36. $intNavId = $this->request->param("nav_id", 0, 'intval');
  37. $navMenuModel = new NavMenuModel();
  38. if (empty($intNavId)) {
  39. $this->error("请指定导航!");
  40. }
  41. $objResult = $navMenuModel->where("nav_id", $intNavId)->order(["list_order" => "ASC"])->select();
  42. $arrResult = $objResult ? $objResult->toArray() : [];
  43. $tree = new Tree();
  44. $tree->icon = ['&nbsp;&nbsp;&nbsp;│ ', '&nbsp;&nbsp;&nbsp;├─ ', '&nbsp;&nbsp;&nbsp;└─ '];
  45. $tree->nbsp = '&nbsp;&nbsp;&nbsp;';
  46. $array = [];
  47. foreach ($arrResult as $r) {
  48. $r['str_manage'] = '<a class="btn btn-xs btn-primary" href="' . url("NavMenu/add", ["parent_id" => $r['id'], "nav_id" => $r['nav_id']]) . '">添加子菜单</a>
  49. <a class="btn btn-xs btn-primary" href="' . url("NavMenu/edit", ["id" => $r['id'], "parent_id" => $r['parent_id'], "nav_id" => $r['nav_id']]) . '">编辑</a>
  50. <a class="btn btn-xs btn-danger js-ajax-delete" href="' . url("NavMenu/delete", ["id" => $r['id'], 'nav_id' => $r['nav_id']]) . '">删除</a> ';
  51. $r['status'] = $r['status'] ? "显示" : "隐藏";
  52. $array[] = $r;
  53. }
  54. $tree->init($array);
  55. $str = "<tr>
  56. <td><input name='list_orders[\$id]' type='text' size='3' value='\$list_order' class='input input-order'></td>
  57. <td>\$id</td>
  58. <td >\$spacer\$name</td>
  59. <td>\$status</td>
  60. <td>\$str_manage</td>
  61. </tr>";
  62. $categories = $tree->getTree(0, $str);
  63. $this->assign("categories", $categories);
  64. $this->assign('nav_id', $intNavId);
  65. return $this->fetch();
  66. }
  67. /**
  68. * 添加导航菜单
  69. * @adminMenu(
  70. * 'name' => '添加导航菜单',
  71. * 'parent' => 'index',
  72. * 'display'=> false,
  73. * 'order' => 10000,
  74. * 'hasView'=> true,
  75. * 'icon' => '',
  76. * 'remark' => '添加导航菜单',
  77. * 'param' => ''
  78. * )
  79. */
  80. public function add()
  81. {
  82. $navMenuModel = new NavMenuModel();
  83. $intNavId = $this->request->param("nav_id", 0, 'intval');
  84. $intParentId = $this->request->param("parent_id", 0, 'intval');
  85. $objResult = $navMenuModel->where("nav_id", $intNavId)->order(["list_order" => "ASC"])->select();
  86. $arrResult = $objResult ? $objResult->toArray() : [];
  87. $tree = new Tree();
  88. $tree->icon = ['&nbsp;│ ', '&nbsp;├─ ', '&nbsp;└─ '];
  89. $tree->nbsp = '&nbsp;';
  90. $array = [];
  91. foreach ($arrResult as $r) {
  92. $r['str_manage'] = '<a href="' . url("NavMenu/add", ["parent_id" => $r['id']]) . '">添加子菜单</a> | <a href="'
  93. . url("NavMenu/edit", ["id" => $r['id']]) . '">编辑</a> | <a class="J_ajax_del" href="'
  94. . url("NavMenu/delete", ["id" => $r['id']]) . '">删除</a> ';
  95. $r['status'] = $r['status'] ? "显示" : "隐藏";
  96. $r['selected'] = $r['id'] == $intParentId ? "selected" : "";
  97. $array[] = $r;
  98. }
  99. $tree->init($array);
  100. $str = "<option value='\$id' \$selected>\$spacer\$name</option>";
  101. $navTrees = $tree->getTree(0, $str);
  102. $this->assign("nav_trees", $navTrees);
  103. $navs = $navMenuModel->selectNavs();
  104. $this->assign('navs', $navs);
  105. $this->assign("nav_id", $intNavId);
  106. return $this->fetch();
  107. }
  108. /**
  109. * 添加导航菜单提交保存
  110. * @adminMenu(
  111. * 'name' => '添加导航菜单提交保存',
  112. * 'parent' => 'index',
  113. * 'display'=> false,
  114. * 'hasView'=> false,
  115. * 'order' => 10000,
  116. * 'icon' => '',
  117. * 'remark' => '添加导航菜单提交保存',
  118. * 'param' => ''
  119. * )
  120. */
  121. public function addPost()
  122. {
  123. if ($this->request->isPost()) {
  124. $navMenuModel = new NavMenuModel();
  125. $arrData = $this->request->post();
  126. if (isset($arrData['external_href'])) {
  127. $arrData['href'] = htmlspecialchars_decode($arrData['external_href']);
  128. } else {
  129. $arrData['href'] = htmlspecialchars_decode($arrData['href']);
  130. $arrData['href'] = base64_decode($arrData['href']);
  131. }
  132. unset($arrData['external_href']);
  133. $navMenuModel->save($arrData);
  134. $this->success(lang("EDIT_SUCCESS"), url("NavMenu/index", ['nav_id' => $arrData['nav_id']]));
  135. }
  136. }
  137. /**
  138. * 编辑导航菜单
  139. * @adminMenu(
  140. * 'name' => '编辑导航菜单',
  141. * 'parent' => 'index',
  142. * 'display'=> false,
  143. * 'hasView'=> true,
  144. * 'order' => 10000,
  145. * 'icon' => '',
  146. * 'remark' => '编辑导航菜单',
  147. * 'param' => ''
  148. * )
  149. */
  150. public function edit()
  151. {
  152. $navMenuModel = new NavMenuModel();
  153. $intNavId = $this->request->param("nav_id", 0, 'intval');
  154. $intId = $this->request->param("id", 0, 'intval');
  155. $intParentId = $this->request->param("parent_id", 0, 'intval');
  156. $objResult = $navMenuModel
  157. ->where("nav_id", $intNavId)
  158. ->where("id", "<>", $intId)
  159. ->order(["list_order" => "ASC"])
  160. ->select();
  161. $arrResult = $objResult ? $objResult->toArray() : [];
  162. $tree = new Tree();
  163. $tree->icon = ['&nbsp;│ ', '&nbsp;├─ ', '&nbsp;└─ '];
  164. $tree->nbsp = '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
  165. $array = [];
  166. foreach ($arrResult as $r) {
  167. $r['str_manage'] = '<a href="' . url("NavMenu/add", ["parent_id" => $r['id'], "nav_id" => $intNavId]) . '">添加子菜单</a> | <a href="'
  168. . url("NavMenu/edit", ["id" => $r['id'], "nav_id" => $intNavId]) . '">编辑</a> | <a class="js-ajax-delete" href="'
  169. . url("NavMenu/delete", ["id" => $r['id'], "nav_id" => $intNavId]) . '">删除</a> ';
  170. $r['status'] = $r['status'] ? "显示" : "隐藏";
  171. $r['selected'] = $r['id'] == $intParentId ? "selected" : "";
  172. $array[] = $r;
  173. }
  174. $tree->init($array);
  175. $str = "<option value='\$id' \$selected>\$spacer\$name</option>";
  176. $nav_trees = $tree->getTree(0, $str);
  177. $this->assign("nav_trees", $nav_trees);
  178. $objNav = $navMenuModel->where("id", $intId)->find();
  179. $arrNav = $objNav ? $objNav->toArray() : [];
  180. $arrNav['href_old'] = $arrNav['href'];
  181. if (strpos($arrNav['href'], "{") === 0 || $arrNav['href'] == 'home') {
  182. $arrNav['href'] = base64_encode($arrNav['href']);
  183. }
  184. $this->assign($arrNav);
  185. $navs = $navMenuModel->selectNavs();
  186. $this->assign('navs', $navs);
  187. $this->assign("nav_id", $intNavId);
  188. $this->assign("parent_id", $intParentId);
  189. return $this->fetch();
  190. }
  191. /**
  192. * 编辑导航菜单提交保存
  193. * @adminMenu(
  194. * 'name' => '编辑导航菜单提交保存',
  195. * 'parent' => 'index',
  196. * 'display'=> false,
  197. * 'hasView'=> false,
  198. * 'order' => 10000,
  199. * 'icon' => '',
  200. * 'remark' => '编辑导航菜单提交保存',
  201. * 'param' => ''
  202. * )
  203. */
  204. public function editPost()
  205. {
  206. if ($this->request->isPost()) {
  207. $navMenuModel = new NavMenuModel();
  208. $intId = $this->request->param('id', 0, 'intval');
  209. $arrData = $this->request->post();
  210. if (isset($arrData['external_href'])) {
  211. $arrData['href'] = htmlspecialchars_decode($arrData['external_href']);
  212. } else {
  213. $arrData['href'] = htmlspecialchars_decode($arrData['href']);
  214. $arrData['href'] = base64_decode($arrData['href']);
  215. }
  216. unset($arrData['external_href']);
  217. $navMenuModel->where('id', $intId)->update($arrData);
  218. $this->success(lang("EDIT_SUCCESS"), url("NavMenu/index", ['nav_id' => $arrData['nav_id']]));
  219. }
  220. }
  221. /**
  222. * 删除导航菜单
  223. * @adminMenu(
  224. * 'name' => '删除导航菜单',
  225. * 'parent' => 'index',
  226. * 'display'=> false,
  227. * 'hasView'=> false,
  228. * 'order' => 10000,
  229. * 'icon' => '',
  230. * 'remark' => '删除导航菜单',
  231. * 'param' => ''
  232. * )
  233. */
  234. public function delete()
  235. {
  236. if ($this->request->isPost()) {
  237. $navMenuModel = new NavMenuModel();
  238. $intId = $this->request->param("id", 0, "intval");
  239. $intNavId = $this->request->param("nav_id", 0, "intval");
  240. if (empty($intId)) {
  241. $this->error(lang("NO_ID"));
  242. }
  243. $count = $navMenuModel->where("parent_id", $intId)->count();
  244. if ($count > 0) {
  245. $this->error("该菜单下还有子菜单,无法删除!");
  246. }
  247. $navMenuModel->where("id", $intId)->delete();
  248. $this->success(lang("DELETE_SUCCESS"), url("NavMenu/index", ['nav_id' => $intNavId]));
  249. }
  250. }
  251. /**
  252. * 导航菜单排序
  253. * @adminMenu(
  254. * 'name' => '导航菜单排序',
  255. * 'parent' => 'index',
  256. * 'display'=> false,
  257. * 'hasView'=> false,
  258. * 'order' => 10000,
  259. * 'icon' => '',
  260. * 'remark' => '导航菜单排序',
  261. * 'param' => ''
  262. * )
  263. */
  264. public function listOrder()
  265. {
  266. $navMenuModel = new NavMenuModel();
  267. $status = parent::listOrders($navMenuModel);
  268. if ($status) {
  269. $this->success("排序更新成功!");
  270. } else {
  271. $this->error("排序更新失败!");
  272. }
  273. }
  274. }