角色权限管理系统(二级菜单的显示、一级菜单管理)

一级菜单的显示做好了,接下来就应该是二级菜单的显示了,要查询一级菜单下面对应的二级菜单很简单只需要取得一级菜单的id即可,按照我的设计通过点击一级菜单的超链接才能看到子菜单,通过超链接可以把一级菜单的id传给后台控制器,由控制器负责抓取数据和页面跳转

1.控制器代码

function getChildMenu(){
	$smart=new Smarty();
	$smart->left_delimiter="<{";
	$smart->right_delimiter="}>";
	
	$topImpl=new TopMenuManagerImpl();
	//查询用户对应的菜单
	$arr=$topImpl->getChildMenuItem($_GET["parentMenu"]);
	//通过菜单ID获取菜单名字
	$menuname=$topImpl->getMainMenuName($_GET["parentMenu"]);
	$smart->assign("child",$arr);
	$smart->assign("menuname",$menuname[0]["name"]);
	$smart->display("leftmain.tpl");
}

2.TopMenuManagerImpl对应的两个方法,接口代码就省略不写了

//读取子菜单
	public function getChildMenuItem($parentMenu){
		$db=new DBUtil();
		$conn=$db->getConnection();
		$base=new BaseDBOperate();
		$sql="select m.* from m_menu m where parentmenu=$parentMenu";
		$arr=$base->query($sql,$conn);
		$db->close($conn);
		return $arr;
	}
	//读取被点击的主菜单的名称
	public function getMainMenuName($parentMenu){
		$db=new DBUtil();
		$conn=$db->getConnection();
		$base=new BaseDBOperate();
		$sql="select m.* from m_menu m where id=$parentMenu";
		$arr=$base->query($sql,$conn);
		$db->close($conn);
		return $arr;
	}

3.子菜单模板页面



  
    
    
		
		
	
	

<{$menuname}>

<{foreach from=$child item=message}> <{/foreach}>

到这里二级菜单也显示出来了,这里有人说把一级菜单名称传过去就可以不用再去查询菜单名称了。我这么做是为了保险起见,防止传参后出现乱码

3.菜单管理

菜单管理又分为2块,一块是一级菜单管理,另一块是二级菜单管理,两块的管理都包括增删改查四种操作,首先来看一级菜单的添加操作,下面是添加一级菜单的模板页面







添加一级菜单



    

添加一级菜单

菜单名称: *

下面是添加操作的控制器代码

//添加一级菜单
function addMenu(){
	$smart=new Smarty();
	$smart->left_delimiter="<{";
	$smart->right_delimiter="}>";
	$menuManager=new TopMenuManagerImpl();
	$result=$menuManager->addMenu($_POST["menuname"], "-1", "-1");
	if("1"==$result){
		listMenu();
	}
}

addMenu方法如下

	//添加一级菜单
	public function addMenu($menuName,$url,$parentMenu){
		$db=new DBUtil();
		$conn=$db->getConnection();
		$base=new BaseDBOperate();
		$sql="insert into m_menu(name,url,parentmenu) values ('$menuName','$url','$parentMenu')";
		$result=$base->otherOperate($sql, $conn);
		$db->close($conn);
		return $result;
	}

下面是菜单列表显示功能也就是上面的那个listMenu,这个方法也在我们的控制器里

//一级菜单管理
function listMenu(){
	$menuManager=new TopMenuManagerImpl();
	$smart=new Smarty();
	$smart->left_delimiter="<{";
	$smart->right_delimiter="}>";
	$fenyePage = new fenyePage();
	//如果当前页未获取到,则默认为首页
	$fenyePage->nowPage = 1;
	if (!empty ($_GET['nowPage'])) {
		$fenyePage->nowPage = $_GET['nowPage'];
	}
	$fenyePage->url="TopMenuController.php?type=listMenu";
	//设置默认每页显示几条数据
	$fenyePage->everyPageRows = 5;
	//默认翻页页数
	$fenyePage->pageWhole = 3;
	$menuManager->menuList($fenyePage);
	
	if(($fenyePage->sumPage)<($fenyePage->pageWhole)){
		$fenyePage->pageWhole=$fenyePage->sumPage;
	}
	//分页后的数据
	$smart->assign("page",$fenyePage);
	$smart->assign("data",$fenyePage->fenyeArray);
	
	$smart->display("menuList.tpl");
}

看到了吗smarty的确很强大,我们直接可以把分页的数据和分页导航条通过smarty一起分配给模板页面,来看看这个模板页面吧



学生管理系统



<{include file="../../../css/global.css"}>



<{foreach from=$data item=message}> <{/foreach}>
选择 名称 操作
<{$page->showNavigate()}>

来看看这个页面长什么样子吧

角色权限管理系统(二级菜单的显示、一级菜单管理)_第1张图片

这里使用smarty要注意一个问题,因为分页导航条是通过smarty分配过去的,这种分页导航条一般都有css样式。我们要考虑的问题就是能不能再列表页面直接引入css呢,答案是不可以的,因为css是针对分页的但是分页又是通过smary分配过去的因此css文件也需要被smarty解析才可以,这里就需要使用smarty提供的包含指令了

<{include file="../../../css/global.css"}>

这个css文件写法上页有讲究,最前面要写上,如下所示


接下来就是一级菜单的删除和修改了,这里只演示修改操作,修噶操作是通过点击菜单名称链接过去的,链接需要传一个菜单ID过去,之后根据ID查询出单个的菜单,把信息重新显示在表单中

点击链接后调用的控制器代码如下

//一级菜单编辑
function editMenu(){
	$id=$_GET["id"];
	$menuManager=new TopMenuManagerImpl();
	$smart=new Smarty();
	$smart->left_delimiter="<{";
	$smart->right_delimiter="}>";
	$result=$menuManager->menuEdit($id);
	$smart->assign("menuItem",$result);
	$smart->display("editMenu.tpl");
}

下面是实现类里的menuEdit方法

//菜单编辑功能
	public function menuEdit($id){
		$db=new DBUtil();
		$conn=$db->getConnection();
		$base=new BaseDBOperate();
		$sql="select A.* from m_menu A where A.id=$id";
		$arr=$base->query($sql, $conn);
		$db->close($conn);
		return $arr;
	}

接下来就是编辑页面了,模板文件如下








编辑一级菜单



    

编辑一级菜单

用户名: *

编辑页面的添加页面的差别就是表单里是否有值,这一块相信难度也不大,接下来是修改数据库表数据的操作,还是先上控制器代码

//更新菜单
function updateMenu(){
	$id=$_POST["id"];
	$menuManager=new TopMenuManagerImpl();
	$result=$menuManager->menuUpdate($_POST["id"], $_POST["menuname"], "-1", "-1");
	if($result=="1"){
		listMenu();
	}
}

下面就是这个menuUpdate方法了

//修改一级菜单
	public function menuUpdate($id,$name,$url,$parentMenu){
		$db=new DBUtil();
		$conn=$db->getConnection();
		$base=new BaseDBOperate();
		$sql="update m_menu set name='$name',url='$url',parentmenu='$parentMenu' where id=$id";
		$result=$base->otherOperate($sql, $conn);
		$db->close($conn);
		return $result;
	}

这个模块是不是也很简单呢





你可能感兴趣的:(角色权限管理系统)