menu.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. <?php
  2. defined('IN_PHPCMS') or exit('No permission resources.');
  3. pc_base::load_app_class('admin','admin',0);
  4. class menu extends admin {
  5. function __construct() {
  6. parent::__construct();
  7. $this->db = pc_base::load_model('menu_model');
  8. }
  9. function init () {
  10. $tree = pc_base::load_sys_class('tree');
  11. $tree->icon = array('&nbsp;&nbsp;&nbsp;│ ','&nbsp;&nbsp;&nbsp;├─ ','&nbsp;&nbsp;&nbsp;└─ ');
  12. $tree->nbsp = '&nbsp;&nbsp;&nbsp;';
  13. $userid = $_SESSION['userid'];
  14. $admin_username = param::get_cookie('admin_username');
  15. $table_name = $this->db->table_name;
  16. $result = $this->db->select('','*','','listorder ASC,id DESC');
  17. $array = array();
  18. foreach($result as $r) {
  19. $r['cname'] = L($r['name']);
  20. $r['str_manage'] = '<a href="?m=admin&c=menu&a=add&parentid='.$r['id'].'&menuid='.$_GET['menuid'].'">'.L('add_submenu').'</a> | <a href="?m=admin&c=menu&a=edit&id='.$r['id'].'&menuid='.$_GET['menuid'].'">'.L('modify').'</a> | <a href="javascript:confirmurl(\'?m=admin&c=menu&a=delete&id='.$r['id'].'&menuid='.$_GET['menuid'].'\',\''.L('confirm',array('message'=>$r['cname'])).'\')">'.L('delete').'</a> ';
  21. $array[] = $r;
  22. }
  23. $str = "<tr>
  24. <td align='center'><input name='listorders[\$id]' type='text' size='3' value='\$listorder' class='input-text-c'></td>
  25. <td align='center'>\$id</td>
  26. <td >\$spacer\$cname</td>
  27. <td align='center'>\$str_manage</td>
  28. </tr>";
  29. $tree->init($array);
  30. $categorys = $tree->get_tree(0, $str);
  31. include $this->admin_tpl('menu');
  32. }
  33. function add() {
  34. if(isset($_POST['dosubmit'])) {
  35. $this->db->insert($_POST['info']);
  36. //开发过程中用于自动创建语言包
  37. $file = PC_PATH.'languages'.DIRECTORY_SEPARATOR.'zh-cn'.DIRECTORY_SEPARATOR.'system_menu.lang.php';
  38. if(file_exists($file)) {
  39. $content = file_get_contents($file);
  40. $content = substr($content,0,-2);
  41. $key = $_POST['info']['name'];
  42. $data = $content."\$LANG['$key'] = '$_POST[language]';\r\n?>";
  43. file_put_contents($file,$data);
  44. } else {
  45. $key = $_POST['info']['name'];
  46. $data = "<?php\r\n\$LANG['$key'] = '$_POST[language]';\r\n?>";
  47. file_put_contents($file,$data);
  48. }
  49. //结束
  50. showmessage(L('add_success'));
  51. } else {
  52. $show_validator = '';
  53. $tree = pc_base::load_sys_class('tree');
  54. $result = $this->db->select();
  55. $array = array();
  56. foreach($result as $r) {
  57. $r['cname'] = L($r['name']);
  58. $r['selected'] = $r['id'] == $_GET['parentid'] ? 'selected' : '';
  59. $array[] = $r;
  60. }
  61. $str = "<option value='\$id' \$selected>\$spacer \$cname</option>";
  62. $tree->init($array);
  63. $select_categorys = $tree->get_tree(0, $str);
  64. $models = pc_base::load_config('model_config');
  65. include $this->admin_tpl('menu');
  66. }
  67. }
  68. function delete() {
  69. $_GET['id'] = intval($_GET['id']);
  70. $this->db->delete(array('id'=>$_GET['id']));
  71. showmessage(L('operation_success'));
  72. }
  73. function edit() {
  74. if(isset($_POST['dosubmit'])) {
  75. $id = intval($_POST['id']);
  76. //print_r($_POST['info']);exit;
  77. $r = $this->db->get_one(array('id'=>$id));
  78. $this->db->update($_POST['info'],array('id'=>$id));
  79. //修改语言文件
  80. $file = PC_PATH.'languages'.DIRECTORY_SEPARATOR.'zh-cn'.DIRECTORY_SEPARATOR.'system_menu.lang.php';
  81. require $file;
  82. $key = $_POST['info']['name'];
  83. if(!isset($LANG[$key])) {
  84. $content = file_get_contents($file);
  85. $content = substr($content,0,-2);
  86. $data = $content."\$LANG['$key'] = '$_POST[language]';\r\n?>";
  87. file_put_contents($file,$data);
  88. } elseif(isset($LANG[$key]) && $LANG[$key]!=$_POST['language']) {
  89. $content = file_get_contents($file);
  90. $content = str_replace($LANG[$key],$_POST['language'],$content);
  91. file_put_contents($file,$content);
  92. }
  93. $this->update_menu_models($id, $r, $_POST['info']);
  94. //结束语言文件修改
  95. showmessage(L('operation_success'));
  96. } else {
  97. $show_validator = $array = $r = '';
  98. $tree = pc_base::load_sys_class('tree');
  99. $id = intval($_GET['id']);
  100. $r = $this->db->get_one(array('id'=>$id));
  101. if($r) extract($r);
  102. $result = $this->db->select();
  103. foreach($result as $r) {
  104. $r['cname'] = L($r['name']);
  105. $r['selected'] = $r['id'] == $parentid ? 'selected' : '';
  106. $array[] = $r;
  107. }
  108. $str = "<option value='\$id' \$selected>\$spacer \$cname</option>";
  109. $tree->init($array);
  110. $select_categorys = $tree->get_tree(0, $str);
  111. $models = pc_base::load_config('model_config');
  112. include $this->admin_tpl('menu');
  113. }
  114. }
  115. /**
  116. * 排序
  117. */
  118. function listorder() {
  119. if(isset($_POST['dosubmit'])) {
  120. foreach($_POST['listorders'] as $id => $listorder) {
  121. $this->db->update(array('listorder'=>$listorder),array('id'=>$id));
  122. }
  123. showmessage(L('operation_success'));
  124. } else {
  125. showmessage(L('operation_failure'));
  126. }
  127. }
  128. /**
  129. * 更新菜单的所属模式
  130. * @param $id INT 菜单的ID
  131. * @param $old_data 该菜单的老数据
  132. * @param $new_data 菜单的新数据
  133. **/
  134. private function update_menu_models($id, $old_data, $new_data) {
  135. $models_config = pc_base::load_config('model_config');
  136. if (is_array($models_config)) {
  137. foreach ($models_config as $_k => $_m) {
  138. if (!isset($new_data[$_k])) $new_data[$_k] = 0;
  139. if ($old_data[$_k]==$new_data[$_k]) continue; //数据没有变化时继续执行下一项
  140. $r = $this->db->get_one(array('id'=>$id), 'parentid');
  141. $this->db->update(array($_k=>$new_data[$_k]), array('id'=>$id));
  142. if ($new_data[$_k] && $r['parentid']) {
  143. $this->update_parent_menu_models($r['parentid'], $_k); //如果设置所属模式,更新父级菜单的所属模式
  144. }
  145. }
  146. }
  147. return true;
  148. }
  149. /**
  150. * 更新父级菜单的所属模式
  151. * @param $id int 菜单ID
  152. * @param $field 修改字段名
  153. */
  154. private function update_parent_menu_models($id, $field) {
  155. $id = intval($id);
  156. $r = $this->db->get_one(array('id'=>$id), 'parentid');
  157. $this->db->update(array($field=>1), array('id'=>$id)); //修改父级的所属模式,然后判断父级是否存在父级
  158. if ($r['parentid']) {
  159. $this->update_parent_menu_models($r['parentid'], $field);
  160. }
  161. return true;
  162. }
  163. }
  164. ?>