實現基於PHP和MySQL的動態樹型菜單

來源:互聯網
上載者:User

樹型菜單在很多案頭應用系統中都有非常廣泛的應用,其主要優點是結構清楚,利於使用者非常清楚的知道目前自己所在的位置。但在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 {

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.