樹型選單在許多桌面應用系統中都有非常廣泛的應用,其主要優點是結構清晰,利於使用者非常清楚的知道目前自己所在的位置。但在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.ph');
在添加記錄的時候,一定要注意,非一級菜單的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頁了!
//基本變數設定
$GLOBALS["ID"] =1; //用來追蹤下拉式選單的ID號碼
$layer=1; //用來追蹤目前選單的等級
//連線資料庫
$Con=mysql_connect("localhost","root","");
mysql_select_db("work");
//提取一級選單
$="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 " ";
for($rows=0;$rows{
//將目前選單項目的內容匯入陣列
$menu=mysql_fultu=mysql_fultu=mysql_$
//提取選單項目的子選單記錄集
$sql="select * from menu where parent_id=$menu[id]";
$result_sub=mysql_query($sql,$Con);
$result_sub=mysql_query($sql,$Con);
$result_sub=mysql_query($sql,$Con);
echo ";
//如果該選單項目有子選單,則加入JavaScript onClick語句
if(mysql_num_rows($result_sub)>0)
{
echo " ";
echo " ";
echo " ";
}
//如果該選單項目沒有子選單,並指定了超級連接位址,則指定為超級連接,
//否則只顯示選單名稱
if($menu[url]!=" ")
echo "$menu[name]";
else
echo $menu[name];
echo "
";
";
//如果該項目選單有子,如果該項目選單,則顯示項目選單,則顯示項目選單(, mysql_num_rows($result_sub)>0)
{
//指定該子選單的ID和style,以便和onClick語句相對應
echo " ";
echo " ";
echo " "; 1
$layer++;
//遞歸呼叫ShowTreeMenu()函數,產生子選單
ShowTreeMenu($Con,$result_sub,$layer);
//子選單處理完成,回到遞歸的上一層,將級數減1
$layer--;
echo "
";
}
//繼續顯示下一個選單項目
}
echo " ";
}了一個函數ShowTreeMenu(),透過這個函數的調用,會從資料庫中遞歸的調出每個選單項目,並顯示在頁面上了:)
想要獲取更多的相關內容文章請關注PHP中文網(www.php.cn)!

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

在PHP中,可以利用implode()函数的第一个参数来设置没有分隔符,该函数的第一个参数用于规定数组元素之间放置的内容,默认是空字符串,也可将第一个参数设置为空,语法为“implode(数组)”或者“implode("",数组)”。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),