通常项目都有菜单导航部分,无限级菜单表的主要字段包括:(如今主流菜单的设计都是无限级分类,普通的导航栏分级的时候,只有一个分级对应一个分级)
id 类别的id设计
title 栏目标题
pid 从属id
sort 排序
hide 是否隐藏
项目访问的时候,菜单重组的逻辑包括:
读取全部pid=0的栏目(放入到网页顶部,导航栏须要显示的地方,根据hide和sort排序进行显示)
获取当前的栏目(能够根据访问的url参数获取到访问的具体控制器,同时列表出来当前分支的全部子类和同类)
讲获取到的子栏目放入一个child的数组里面进行储存,注入到视图里面,视图能够进行显示。
如下是一些代码逻辑:(这里用TP框架逻辑进行示例):
1.读取某个id的全部子类(主栏目下的子类)
php
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; }