|
首先要感謝terry39的指點(diǎn),元旦閑來(lái)無(wú)事,我就把他所講的原理簡(jiǎn)單實(shí)現(xiàn)一下,這個(gè)程序的關(guān)鍵就在于數(shù)據(jù)表的設(shè)計(jì)很有特色,不用遞歸,依靠個(gè)簡(jiǎn)單SQL語(yǔ)句就能列出菜單,看看這個(gè)數(shù)據(jù)表怎么設(shè)計(jì)的:
數(shù)據(jù)庫(kù)字段大概如下:
-----------------------------------------------------------------------------------
id 編號(hào)
fid 父分類編號(hào)
name 分類名
path 分類路徑,以 id 為節(jié)點(diǎn),組成類似 ,1,2,3,4, 這樣的字符串
----------------------------------------------------------------------------------
可以假設(shè)有如下的數(shù)據(jù)
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,
----------------------------------------------------
這次偷懶,我只用一個(gè)頁(yè)面,好在代碼不長(zhǎng),全部代碼用類封裝的(不是必要,而是自己也想熟悉一下OO,呵呵!),來(lái)看看頁(yè)面代碼:
復(fù)制代碼 代碼如下:
<?php
/**************************************
頁(yè)面:menu.php
作者:輝老大
功能:定義數(shù)據(jù)庫(kù)操作及生成菜單列表類
**************************************/
class menu{
//創(chuàng)建構(gòu)造函數(shù),作用:數(shù)據(jù)庫(kù)連接并選擇相應(yīng)數(shù)據(jù)庫(kù)
public function __construct(){
$dbhost = "localhost";
$dbuser = "root";
$dbpassword = "7529639";
$dbname = "menu";
mysql_connect($dbhost,$dbuser,$dbpassword) or die("error!");
mysql_query("SET NAMES 'GBK'");
mysql_select_db($dbname);
}
//執(zhí)行SQL語(yǔ)句函數(shù)
private function query($sql){
return mysql_query($sql);
}
//取得結(jié)果集數(shù)組函數(shù)
private function loop_query($result){
return mysql_fetch_array($result);
}
//列出菜單列表函數(shù)
public function menulist(){
$sql="select * from list order by path";
$result=$this->query($sql);
while($rows=$this->loop_query($result)){
if(substr_count($rows['path'],',')>2){
for($i=0;$i<(substr_count($rows['path'],',')-2);$i++)
echo ' ';
}
echo $rows['name'].'<br>';
}
}
//創(chuàng)建析構(gòu)函數(shù),作用:關(guān)閉數(shù)據(jù)庫(kù)連接
public function __destruct(){
return mysql_close();
}
}
$db=new menu();//生成實(shí)例
$db->menulist();//調(diào)用方法生成菜單
?>
php技術(shù):一個(gè)更簡(jiǎn)單的無(wú)限級(jí)分類菜單代碼,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。