菜单栏的设计与控制

    一般项目都有菜单导航部分,无限级菜单表的主要字段包括:(现在主流菜单的设计都是无限级分类,普通的导航栏分级的时候,只有一个分级对应一个分级)
    id 类别的id设计
    title  栏目标题
    pid   从属id
    sort  排序
    hide  是否隐藏
   项目访问的时候,菜单重组的逻辑包括:
   读取所有pid=0的栏目(放入到网页顶部,导航栏需要显示的地方,根据hide和sort排序进行显示)
   获取当前的栏目(可以根据访问的url参数获取到访问的具体控制器,同时列表出来当前分支的所有子类和同类)
   讲获取到的子栏目放入一个child的数组里面进行储存,注入到视图里面,视图可以进行显示。

   以下是一些代码逻辑:(这里用TP框架逻辑进行示例):
   1.读取某个id的所有子类(主栏目下的子类)
     

   function   getChild($pid) {    
        $res =  D('menu')->where("pid=$pid")->select();
         if(!count($res)) return false;
          return $res;
    }
         function  getAllChild($id) {
           $childArr= getChild($id);
            if($childArr)  {
              foreach($childArr as  $val) {
                          $childArr['child'][]=getAllChild($val['id']);
          }
          return  $childArr;
        }
     }

    2.根据某个id读出其兄弟
      

   function  getBrothers($id) {
            $res = D('menu')->where("id=$id")->find();
        $brothers = D('menu')->where("pid={$res['pid']}"->select();
        return   $brothers;
     }

     3.读取某个栏目的最终目录
        

  function  getParents($id){
                  $res = D('menu')->where("id=$id")->find();
          $parent=D('menu')->where("pid={$res['pid']}")->find();
                  if($parent['id']!=0) {
                $parentId=getParents($parent['id']);
            }  else {
                         $parentId = $parent['id'];
            }
                return  $parentId;
        }


你可能感兴趣的:(菜单栏的设计与控制)