db = pc_base::load_model('menu_model'); } function init () { $tree = pc_base::load_sys_class('tree'); $tree->icon = array('   │ ','   ├─ ','   └─ '); $tree->nbsp = '   '; $userid = $_SESSION['userid']; $admin_username = param::get_cookie('admin_username'); $table_name = $this->db->table_name; $result = $this->db->select('','*','','listorder ASC,id DESC'); $array = array(); foreach($result as $r) { $r['cname'] = L($r['name']); $r['str_manage'] = ''.L('add_submenu').' | '.L('modify').' | '.L('delete').' '; $array[] = $r; } $str = " \$id \$spacer\$cname \$str_manage "; $tree->init($array); $categorys = $tree->get_tree(0, $str); include $this->admin_tpl('menu'); } function add() { if(isset($_POST['dosubmit'])) { $this->db->insert($_POST['info']); //开发过程中用于自动创建语言包 $file = PC_PATH.'languages'.DIRECTORY_SEPARATOR.'zh-cn'.DIRECTORY_SEPARATOR.'system_menu.lang.php'; if(file_exists($file)) { $content = file_get_contents($file); $content = substr($content,0,-2); $key = $_POST['info']['name']; $data = $content."\$LANG['$key'] = '$_POST[language]';\r\n?>"; file_put_contents($file,$data); } else { $key = $_POST['info']['name']; $data = ""; file_put_contents($file,$data); } //结束 showmessage(L('add_success')); } else { $show_validator = ''; $tree = pc_base::load_sys_class('tree'); $result = $this->db->select(); $array = array(); foreach($result as $r) { $r['cname'] = L($r['name']); $r['selected'] = $r['id'] == $_GET['parentid'] ? 'selected' : ''; $array[] = $r; } $str = ""; $tree->init($array); $select_categorys = $tree->get_tree(0, $str); $models = pc_base::load_config('model_config'); include $this->admin_tpl('menu'); } } function delete() { $_GET['id'] = intval($_GET['id']); $this->db->delete(array('id'=>$_GET['id'])); showmessage(L('operation_success')); } function edit() { if(isset($_POST['dosubmit'])) { $id = intval($_POST['id']); //print_r($_POST['info']);exit; $r = $this->db->get_one(array('id'=>$id)); $this->db->update($_POST['info'],array('id'=>$id)); //修改语言文件 $file = PC_PATH.'languages'.DIRECTORY_SEPARATOR.'zh-cn'.DIRECTORY_SEPARATOR.'system_menu.lang.php'; require $file; $key = $_POST['info']['name']; if(!isset($LANG[$key])) { $content = file_get_contents($file); $content = substr($content,0,-2); $data = $content."\$LANG['$key'] = '$_POST[language]';\r\n?>"; file_put_contents($file,$data); } elseif(isset($LANG[$key]) && $LANG[$key]!=$_POST['language']) { $content = file_get_contents($file); $content = str_replace($LANG[$key],$_POST['language'],$content); file_put_contents($file,$content); } $this->update_menu_models($id, $r, $_POST['info']); //结束语言文件修改 showmessage(L('operation_success')); } else { $show_validator = $array = $r = ''; $tree = pc_base::load_sys_class('tree'); $id = intval($_GET['id']); $r = $this->db->get_one(array('id'=>$id)); if($r) extract($r); $result = $this->db->select(); foreach($result as $r) { $r['cname'] = L($r['name']); $r['selected'] = $r['id'] == $parentid ? 'selected' : ''; $array[] = $r; } $str = ""; $tree->init($array); $select_categorys = $tree->get_tree(0, $str); $models = pc_base::load_config('model_config'); include $this->admin_tpl('menu'); } } /** * 排序 */ function listorder() { if(isset($_POST['dosubmit'])) { foreach($_POST['listorders'] as $id => $listorder) { $this->db->update(array('listorder'=>$listorder),array('id'=>$id)); } showmessage(L('operation_success')); } else { showmessage(L('operation_failure')); } } /** * 更新菜单的所属模式 * @param $id INT 菜单的ID * @param $old_data 该菜单的老数据 * @param $new_data 菜单的新数据 **/ private function update_menu_models($id, $old_data, $new_data) { $models_config = pc_base::load_config('model_config'); if (is_array($models_config)) { foreach ($models_config as $_k => $_m) { if (!isset($new_data[$_k])) $new_data[$_k] = 0; if ($old_data[$_k]==$new_data[$_k]) continue; //数据没有变化时继续执行下一项 $r = $this->db->get_one(array('id'=>$id), 'parentid'); $this->db->update(array($_k=>$new_data[$_k]), array('id'=>$id)); if ($new_data[$_k] && $r['parentid']) { $this->update_parent_menu_models($r['parentid'], $_k); //如果设置所属模式,更新父级菜单的所属模式 } } } return true; } /** * 更新父级菜单的所属模式 * @param $id int 菜单ID * @param $field 修改字段名 */ private function update_parent_menu_models($id, $field) { $id = intval($id); $r = $this->db->get_one(array('id'=>$id), 'parentid'); $this->db->update(array($field=>1), array('id'=>$id)); //修改父级的所属模式,然后判断父级是否存在父级 if ($r['parentid']) { $this->update_parent_menu_models($r['parentid'], $field); } return true; } } ?>