使用"函數遞迴"實現基於php和MySQL的動態樹型功能表 |
|
conundrum
尊榮會員 發表:893 回覆:1272 積分:643 註冊:2004-01-06 發送簡訊給我 |
http://www.linuxdby.com/articlesdisplay.php?s=f9d7e61d6ca6282e06820920d1073ae5&newsid=16 使用"函數遞迴"實現基於php和MySQL的動態樹型功能表 樹型功能表在很多桌面應用系統中都有非常廣泛的應用,其主要優點是結構清晰,利於使用者非常清楚的知道目前自 己所在的位置。但在web上樹型功能表的應用因d沒有理想的現成元件可以拿過來直接使用,所以一般的情況下,程 式師主要是通過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 d索引 parent_id 用來保存上一級功能表的id號,如果是一級功能表則d0 name d功能表的名稱,也就是要在頁面上顯示的功能表內容 url 如果某功能表d末級功能表,則需要指定該連接的url位址,這個欄位就是用來保存此位址的,其他非末級功能表, 該欄位d空 好了,資料庫有了,你就可以添加一些記錄了,下面是我做測試的時候,使用的一些記錄: 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.ph'); 在添加記錄的時候,一定要注意,非一級功能表的parent_id一定要指定d上級功能表的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 } 定義了一些基本的樣式資訊,比如字體,岫漶A超級連接的樣式等,如果你想改變樣式的話,只要修改這裏就行了! 3、下面就是我的php頁面了! <html> <head> <link href='style.css' rel=stylesheet> </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 "
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |