通常項目都有菜單導航部分,無限級菜單表的主要字段包括:(如今主流菜單的設計都是無限級分類,普通的導航欄分級的時候,只有一個分級對應一個分級)
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; }