亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

使用"函數遞歸"實現基于php和MySQL的動態樹型菜單

2019-09-08 23:11:02
字體:
來源:轉載
供稿:網友

樹型菜單在很多桌面應用系統中都有非常廣泛的應用,其主要優點是結構清晰,利于使用者非常清楚的知道目前自己所在的位置。但在web上樹型菜單的應用因為沒有理想的現成組件可以拿過來直接使用,所以一般的情況下,程序員主要是通過JavaScript來實現一些簡單的樹型結構菜單,但這些菜單往往都是事先定好各菜單項目,以及各菜單項目之間的層次關系,不利于擴充,一旦需要另一個菜單結構時,往往還需要重新編寫,因此使用起來不是很方便。

經過對函數遞歸的研究,我發現這種樹型菜單可以通過遞歸函數,使樹型菜單的顯示實現動態變化,并沒有級數的限制。下面就是我用php,MySQL,JavaScript寫的一個動態樹型菜單的處理代碼,如果大家有興趣的話,就和我一起來看看我是如何實現的吧:)

首先,我們需要一個數據庫,在這個數據庫中,我們建立以下一張表:

CREATE TABLE menu (
id tinyint(4) NOT NULL auto_increment,
parent_id tinyint(4) DEFAULT '0' NOT NULL,
name varchar(20),
url varchar(60),
PRIMARY KEY (id)
);


這張表中
id 為索引
parent_id 用來保存上一級菜單的id號,如果是一級菜單則為0
name 為菜單的名稱,也就是要在頁面上顯示的菜單內容
url 如果某菜單為末級菜單,則需要指定該連接的url地址,這個字段就是用來保存此地址的,其他非末級菜單,該字段為空

好了,數據庫有了,你就可以添加一些記錄了,下面是我做測試的時候,使用的一些記錄:

INSERT INTO menu VALUES ( '1', '0', '人事管理', '');
INSERT INTO menu VALUES ( '2', '0', '通訊交流', '');
INSERT INTO menu VALUES ( '3', '1', '檔案管理', '');
INSERT INTO menu VALUES ( '4', '1', '考勤管理', 'http://localhost/personal/attendance.php');
INSERT INTO menu VALUES ( '5', '2', '通訊錄', '');
INSERT INTO menu VALUES ( '6', '2', '網絡會議', '');
INSERT INTO menu VALUES ( '7', '3', '新增檔案', 'http://localhost/personal/add_achive.php');
INSERT INTO menu VALUES ( '8', '3', '查詢檔案', 'http://localhost/personal/search_archive.php');
INSERT INTO menu VALUES ( '9', '3', '刪除檔案', 'http://localhost/personal/delete_archive.php');
INSERT INTO menu VALUES ( '10', '5', '新增通訊記錄','http://localhost/communication/add_address.php');
INSERT INTO menu VALUES ( '11', '5', '查詢通訊記錄', http://localhost/communication/search_address.php');
INSERT INTO menu VALUES ( '12', '5', '刪除通訊記錄', http://localhost/communication/delete_address.php');
INSERT INTO menu VALUES ( '13', '6', '召開會議', 'http://localhost/communication/convence_meeting.php');
INSERT INTO menu VALUES ( '14', '6', '會議查詢', 'http://localhost/communication/search_meeting.php');


在添加記錄的時候,一定要注意,非一級菜單的parent_id一定要指定為上級菜單的ID號,否則你的菜單是不會顯示出來的:)

好了!有了數據庫,下面就是通過php,JavaScript把菜單從數據庫中讀出來,并顯示出來了:)

1、JavaScript腳本:

function ShowMenu(MenuID)
{
if(MenuID.style.display=="none")
{
MenuID.style.display="";
}
else
{
MenuID.style.display="none";
}
}

這個腳本很簡單,就是用來響應點擊某個菜單被點擊的事件的。

2、CSS文件:

<!-- 表格樣式 -->
TD {
FONT-FAMILY: "Verdana", "宋體"; FONT-SIZE: 12px; LINE-HEIGHT: 130%; letter-spacing:1px
}

<!-- 超級連接樣式 -->
A:link {
COLOR: #990000; FONT-FAMILY: "Verdana", "宋體"; FONT-SIZE: 12px; TEXT-DECORATION: none; letter-spacing:1px
}
A:visited {
COLOR: #990000; FONT-FAMILY: "Verdana", "宋體"; FONT-SIZE: 12px; TEXT-DECORATION: none; letter-spacing:1px
}
A:active {
COLOR: #990000; FONT-FAMILY: "Verdana", "宋體"; FONT-SIZE: 12px; TEXT-DECORATION: none; letter-spacing:1px
}
A:hover {
COLOR: #ff0000; FONT-FAMILY: "Verdana", "宋體"; FONT-SIZE: 12px; TEXT-DECORATION: underline; letter-spacing:1px
}

<!-- 其他樣式 -->
.Menu {
COLOR:#000000; FONT-FAMILY: "Verdana", "宋體"; FONT-SIZE: 12px; CURSOR: hand
}


定義了一些基本的樣式信息,比如字體,顏色,超級連接的樣式等,如果你想改變樣式的話,只要修改這里就行了!

3、下面就是我的php頁面了!

<html>
<head>
<link href='style.css' rel=stylesheet>
<script language="JavaScript" src="TreeMenu.js"></script>
</head>
<body>
<?php
//基本變量設置
$GLOBALS["ID"] =1; //用來跟蹤下拉菜單的ID號
$layer=1; //用來跟蹤當前菜單的級數

//連接數據庫
$Con=mysql_connect("localhost","root","");
mysql_select_db("work");

//提取一級菜單
$sql="select * from menu where parent_id=0";
$result=mysql_query($sql,$Con);

//如果一級菜單存在則開始菜單的顯示
if(mysql_num_rows($result)>0) ShowTreeMenu($Con,$result,$layer,$ID);


//=============================================
//顯示樹型菜單函數 ShowTreeMenu($con,$result,$layer)
//$con:數據庫連接
//$result:需要顯示的菜單記錄集
//layer:需要顯示的菜單的級數
//=============================================
function ShowTreeMenu($Con,$result,$layer)
{
//取得需要顯示的菜單的項目數
$numrows=mysql_num_rows($result);

//開始顯示菜單,每個子菜單都用一個表格來表示
echo "<table cellpadding='0' cellspacing='0' border='0'>";

for($rows=0;$rows<$numrows;$rows++)
{
//將當前菜單項目的內容導入數組
$menu=mysql_fetch_array($result);

//提取菜單項目的子菜單記錄集
$sql="select * from menu where parent_id=$menu[id]";
$result_sub=mysql_query($sql,$Con);

echo "<tr>";
//如果該菜單項目有子菜單,則添加JavaScript onClick語句
if(mysql_num_rows($result_sub)>0)
{
echo "<td width='20'><img src='http://www.7880.com/Info/folder.gif' border='0'></td>";
echo "<td class='Menu' onClick='javascript:ShowMenu(Menu".$GLOBALS["ID"].");'>";
}
else
{
echo "<td width='20'><img src='http://www.7880.com/Info/file.gif' border='0'></td>";
echo "<td class='Menu'>";
}
//如果該菜單項目沒有子菜單,并指定了超級連接地址,則指定為超級連接,
//否則只顯示菜單名稱
if($menu[url]!="")
echo "<a href='$menu[url]'>$menu[name]</a>";
else
echo $menu[name];
echo "
</td>
</tr>
";

//如果該菜單項目有子菜單,則顯示子菜單
if(mysql_num_rows($result_sub)>0)
{
//指定該子菜單的ID和style,以便和onClick語句相對應
echo "<tr id=Menu".$GLOBALS["ID"]++." style='display:none'>";
echo "<td width='20'> </td>";
echo "<td>";
//將級數加1
$layer++;
//遞歸調用ShowTreeMenu()函數,生成子菜單
ShowTreeMenu($Con,$result_sub,$layer);
//子菜單處理完成,返回到遞歸的上一層,將級數減1
$layer--;
echo "</td></tr>";
}
//繼續顯示下一個菜單項目
}
echo "</table>";
}
?>
</body>
</html>


在上面的php頁面里面,我定義了一個函數ShowTreeMenu(),通過這個函數的調用,會從數據庫中遞歸的調出每個菜單項目,并顯示在頁面上了:)
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
在线精品视频视频中文字幕| 国产91精品久久久久久久| 日韩在线免费视频观看| 午夜精品久久久久久久久久久久久| 色狠狠久久aa北条麻妃| 4388成人网| 亚洲精品久久久久久久久久久| 最新国产精品亚洲| 亚洲一级一级97网| 日韩大片免费观看视频播放| 最近2019年好看中文字幕视频| 欧美国产亚洲精品久久久8v| 欧美高跟鞋交xxxxhd| 欧美一区三区三区高中清蜜桃| 亚洲一区二区三| 国产香蕉一区二区三区在线视频| 一区二区国产精品视频| 欧美日韩国产91| 国产欧美va欧美va香蕉在线| 欧美日本高清一区| 国产精品白嫩初高中害羞小美女| 欧洲成人性视频| 日韩精品免费观看| 国产美女精品免费电影| 日韩一区二区三区国产| 久久久久久国产精品美女| 欧美大秀在线观看| 欧美性xxxxx| 亚洲欧美中文字幕在线一区| 清纯唯美亚洲综合| 国产精品成人免费电影| 奇米四色中文综合久久| 欧美激情欧美狂野欧美精品| 亚洲国产成人爱av在线播放| 伊人久久久久久久久久| 亚洲国产一区自拍| 欧美壮男野外gaytube| 亚洲精品国产综合久久| 中文字幕亚洲欧美| 日韩成人在线视频网站| 欧美裸体xxxx极品少妇软件| 亚洲国产精品成人va在线观看| 欧美刺激性大交免费视频| 69视频在线播放| 亚洲理论在线a中文字幕| 亚洲全黄一级网站| 欧美日韩在线视频首页| 日韩不卡中文字幕| 久久91亚洲精品中文字幕| 亚洲精品成人免费| 中文国产成人精品| 成人a级免费视频| 欧美日韩亚洲一区二区| 久久成人国产精品| 亚洲专区国产精品| 91在线免费网站| 日本不卡免费高清视频| 中文字幕欧美亚洲| 777精品视频| 久久香蕉国产线看观看网| 欧美国产在线电影| 国产精品羞羞答答| 亚洲欧美变态国产另类| 91在线免费观看网站| 日韩美女在线播放| 久久香蕉国产线看观看网| 日韩亚洲一区二区| 九色91av视频| 亚洲国产精品va在线| 亚洲性av在线| 在线看国产精品| 日韩美女写真福利在线观看| 成人精品久久一区二区三区| 久久久久久久亚洲精品| 国产成人精品999| 欧美另类极品videosbest最新版本| 日韩中文字幕在线播放| 一本色道久久综合亚洲精品小说| 欧美黄色成人网| 欧美日本高清视频| 国产成人免费av| 亚洲综合在线中文字幕| 国产视频综合在线| 亚洲男人天堂手机在线| 亚洲色图日韩av| 国产精品美女999| 亚洲一级黄色片| 97精品久久久中文字幕免费| 精品久久久久久久久中文字幕| 久久精品一偷一偷国产| 色播久久人人爽人人爽人人片视av| 亚洲天堂男人的天堂| 精品久久久在线观看| 欧美韩国理论所午夜片917电影| 国产精国产精品| 国产97色在线| 久久成人av网站| 国产成人一区二区三区小说| 午夜精品久久久久久久99热| 奇米四色中文综合久久| 国产成人+综合亚洲+天堂| 国内精品一区二区三区四区| 日本精品一区二区三区在线| 亚洲专区在线视频| 九九视频直播综合网| 亚洲精品ady| 亚洲视频专区在线| 亚洲尤物视频网| 久久久久免费视频| 亚洲影视九九影院在线观看| zzjj国产精品一区二区| 欧美激情视频在线观看| 国语自产精品视频在线看| 亚洲a成v人在线观看| 久久影视三级福利片| 日韩毛片在线看| 亚洲成人久久一区| 国产成人免费av电影| 亚洲香蕉伊综合在人在线视看| 亚洲网址你懂得| 国产精品久久国产精品99gif| 91免费在线视频| 欧美国产日韩在线| 51ⅴ精品国产91久久久久久| 91精品国产色综合久久不卡98| 国产婷婷色综合av蜜臀av| 欧美成人激情视频免费观看| 久久亚洲欧美日韩精品专区| 在线电影欧美日韩一区二区私密| 亚洲人成网站999久久久综合| 久久九九国产精品怡红院| 亚洲欧美激情在线视频| 92国产精品久久久久首页| 亚洲欧洲黄色网| 国产精品情侣自拍| 亚洲精品午夜精品| 黑人巨大精品欧美一区二区三区| 国产v综合v亚洲欧美久久| 久色乳综合思思在线视频| 亚洲国产精品小视频| 亚洲精品第一国产综合精品| 日韩精品日韩在线观看| 亚洲自拍偷拍第一页| 亚洲第一福利在线观看| 欧美裸体男粗大视频在线观看| 亚洲欧美日韩在线一区| 日韩视频免费观看| 久久免费福利视频| 国产精品18久久久久久麻辣| 亚洲xxxx做受欧美| 国产精品7m视频| 国产精品一区二区三| 日韩在线观看免费| 中文日韩在线视频| 欧美巨猛xxxx猛交黑人97人| 亚洲欧美另类在线观看| 日韩在线免费av| 久久久精品一区二区| 国产精品久久精品| 久久中文字幕视频| 欧美激情亚洲自拍| 国产精品网红直播| 欧美日韩国产色视频| 国产视频观看一区|