Sub InitDyItemStr( s ) gDyItemName = StrHead(s, "=") gDyItemTitle = StrHead(s, ",") gDyItemLink = s End Sub % > 這里調用了一個StrHead函數,這個函數也是出自本人之手,在處理字符串時十分有用,是我在編程時使用頻率最高的函數之一。另外為了方更地在程序中輸出引號,就寫了一個專門在字符串兩端加上引號的函數,因為在編寫ASP程序時常常要調用這兩個函數,所以我單獨把他們放在一個文件中,在要使用時把這個文件包含進行就可以了,下面就是這個文件:
文件名:Str.inc <% '在第一次遇參數c的位置載取ss '返回載取的前半載,ss中保留后半載 '當ss中不包含c時,相當于從ss的最后載取 Public Function StrHead(ss, c) i = InStr(ss, c) If i > 0 Then StrHead = Mid(ss, 1, i - 1) ss = Mid(ss, i + Len(c)) Else StrHead = ss ss = "" End If End Function ' 在s 的 兩 端 加 上 引 號 返 回 Public Function YH(s) YH = Chr(34) & s & Chr(34) End Function % > 在響應OnChick事件時,為書寫簡單,可以先寫成一個JavaScript函數,以備調用(注意:這里的JavaScript函數是在瀏覽器上執行的,一定要與服務器端執行的代碼區分開來):
< % curDyItemIndex=0 Function DyItemId() DyItemId="dy" & curDyItemIndex End Function % > 有了這些準備工作,最后的輸出就不難了,提煉一下我們要完成的任務,就在從LsTest.ini文件中讀取數據,輸出如LsTest.htm文件中的格式數據。由于數據是樹狀的,所以很自然地會使用上函數的遞歸,請看下面實現的主體函數:
Sub ListItems(proPath,ItemName,Disp) '建立并初始化ProFile對象 Set ItemProf = Server.CreateObject("vbProFile.ProFile") ItemProf.FileName = proPath
'開始一個DIV對象,包含所有的子條目在其中 Response.Write "< Div Id=" & YH(DyItemId) & _ " Style=display:" & Disp & " >< ul >" & vbCrLf
'開始輸出每一個子條目 buf = ItemProf.FirstValue(ItemName) Do While Len(buf) > 0 InitDyItemStr buf If Len(gDyItemLink) > 0 then Response.Write "< li >< a href= " & YH(gDyItemLink) & " >" & _ gDyItemTitle & "< /a >" & vbCrLf Else '如果鏈接地址為空,則開始下一層的列表 curDyItemIndex = curDyItemIndex + 1 Response.Write "< li > < a href=" & YH("#") & _ " onclick=" & YH("return OnClickDiv ('" & DyItemId & "')") & _ ") >" & gDyItemTitle & "< /a >" & vbCrLf ListItems proPath,gDyItemName,"none" '使用遞歸 End If
buf=ItemProf.NextValue() Loop
'結束定義的DIV對象 Response.Write "< /ul >< /div >" & vbCrLf End Sub 最后為了調用方便,再定義一個對外的接口函數: Public Sub DyList(proName,rootItem) '將邏輯路徑映射成物理路徑 proPath=Server.mappath(proName) curDyItemIndex = curDyItemIndex + 1 ListItems proPath,rootItem,"" End Sub 把上面這些片段保存到一個文件中,文件名就叫dyList.inc吧,我們就算大功告成了,你是不是想馬上看看效果呢?用下面這個ASP文件來做一下實驗,瞧瞧你是否滿意?