一级菜单的显示做好了,接下来就应该是二级菜单的显示了,要查询一级菜单下面对应的二级菜单很简单只需要取得一级菜单的id即可,按照我的设计通过点击一级菜单的超链接才能看到子菜单,通过超链接可以把一级菜单的id传给后台控制器,由控制器负责抓取数据和页面跳转
1.控制器代码
[php] view plaincopy
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对应的两个方法,接口代码就省略不写了
[php] view plaincopy
//读取子菜单
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.子菜单模板页面
[html] view plaincopy
<{$menuname}>
<{foreach from=$child item=message}>
<{/foreach}>
到这里二级菜单也显示出来了,这里有人说把一级菜单名称传过去就可以不用再去查询菜单名称了。我这么做是为了保险起见,防止传参后出现乱码
3.菜单管理
菜单管理又分为2块,一块是一级菜单管理,另一块是二级菜单管理,两块的管理都包括增删改查四种操作,首先来看一级菜单的添加操作,下面是添加一级菜单的模板页面
[html] view plaincopy
添加一级菜单
添加一级菜单
下面是添加操作的控制器代码
[php] view plaincopy
//添加一级菜单
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方法如下
[php] view plaincopy
//添加一级菜单
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,这个方法也在我们的控制器里
[php] view plaincopy
//一级菜单管理
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一起分配给模板页面,来看看这个模板页面吧
[html] view plaincopy
学生管理系统
<{include file="../../../css/global.css"}>
<{$page->showNavigate()}>