首頁  >  文章  >  後端開發  >  一個更簡單的無限級分類選單程式碼

一個更簡單的無限級分類選單程式碼

巴扎黑
巴扎黑原創
2016-12-01 10:37:021271瀏覽

一個更簡單的無限級分類選單程式碼

首先要感謝terry39的指點,元旦閒來無事可做,我就把他所講的原理簡單實現一下,這個程式的關鍵就在於資料表的設計很有特色,不用遞歸,靠個簡單SQL語句就能列出菜單,看看這個資料表怎麼設計的:
資料庫欄位大概如下:
----------------- -------------------------------------------------- ----------------
id 編號
fid 父分類編號
name 分類名
path 分類路徑,以id 為節點,組成類似,1,2,3,4, 這樣的字串
---------------------------------------------- ------------------------------------

可以假設有以下的資料

id fid name path
------------------------------------------------- ---
1 0 分類1 ,1,
2 0 分類2 ,2,
3 1 分類1-1 ,1,3,
4 1 分類1-2 ,1,4,
5 2 分類2-1 ,2,5,
6 4 分類1-2-1 ,1,4,6,
---------------------------- ------------------------
這次偷懶,我只用一個頁面,好在程式碼不長,全部程式碼用類別封裝的(不是必要,而是自己也想熟悉一下OO,呵呵! ),來看看頁面代碼:

<?php
classmenu{
//创建构造函数,作用:数据库连接并选择相应数据库
publicfunction__construct(){
$dbhost="localhost";
$dbuser="root";
$dbpassword="7529639";
$dbname="menu";
mysql_connect($dbhost,$dbuser,$dbpassword)ordie("error!");
mysql_query("SETNAMES&#39;GBK&#39;");
mysql_select_db($dbname);
}
//执行SQL语句函数
privatefunctionquery($sql){
returnmysql_query($sql);
}
//取得结果集数组函数
privatefunctionloop_query($result){
returnmysql_fetch_array($result);
}
//列出菜单列表函数
publicfunctionmenulist(){
$sql="select*fromlistorderbypath";
$result=$this->query($sql);
while($rows=$this->loop_query($result)){
if(substr_count($rows[&#39;path&#39;],&#39;,&#39;)>2){
for($i=0;$i<(substr_count($rows[&#39;path&#39;],&#39;,&#39;)-2);$i++)
echo&#39;&#39;;
}
echo$rows[&#39;name&#39;].&#39;<br>&#39;;
}
}
//创建析构函数,作用:关闭数据库连接
publicfunction__destruct(){
returnmysql_close();
}
}
$db=newmenu();//生成实例
$db->menulist();//调用方法生成菜单
?>


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn