Chinaunix首页 | 论坛 | 博客
  • 博客访问: 232306
  • 博文数量: 75
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 848
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-08 10:27
文章分类
文章存档

2014年(9)

2013年(66)

我的朋友

分类: PHP

2013-11-08 16:13:58

一级菜单的显示做好了,接下来就应该是二级菜单的显示了,要查询一级菜单下面对应的二级菜单很简单只需要取得一级菜单的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"}>  
 
 
  
 
              
             
                 
                     
                 
           
 
                         
                         
                         
                   
 
                
                 
                 
                 
                 
                 
                 
                 
                   
                    <{foreach from=$data item=message}>     
                             
                                 
                                 
                                 
                             
                 <{/foreach}>  
                   
           
选择名称操作
 
                                      
                                     
                               
 
                                   
 
                                        <{$message.name}>  
                                   
 
                               
 
                                   
 
                                       管理二级菜单  
                                       添加二级菜单  
                                   
 
                               
 
                
              
              
     
 
       
<{$page->showNavigate()}>
 
 
 


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


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


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


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


[css] view plaincopy
 


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


[php] view plaincopy
//一级菜单编辑  
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方法
[php] view plaincopy
//菜单编辑功能  
    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;  
    }  


接下来就是编辑页面了,模板文件如下
[html] view plaincopy
 
 
 
 
 
 
 
编辑一级菜单  
 
 
 
   

编辑一级菜单

 
   
 
         
           
             
             
           
           
             
           
             
           
       
用户名:  
             
             
            *  
          
           
 
             
             
           
 
   
 
 
 


编辑页面的添加页面的差别就是表单里是否有值,这一块相信难度也不大,接下来是修改数据库表数据的操作,还是先上控制器代码
[php] view plaincopy
//更新菜单  
function updateMenu(){  
    $id=$_POST["id"];  
    $menuManager=new TopMenuManagerImpl();  
    $result=$menuManager->menuUpdate($_POST["id"], $_POST["menuname"], "-1", "-1");  
    if($result=="1"){  
        listMenu();  
    }  
}  


下面就是这个menuUpdate方法了
[php] view plaincopy
//修改一级菜单  
    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;  
    }  

阅读(2947) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~