(1) 創(chuàng)建一個(gè)內(nèi)容頁面 我們已經(jīng)使用Content Linking組件為本章提供的示例創(chuàng)建了菜單頁面。Chapter06文件夾中的頁面Default.htm采用上述代碼創(chuàng)建菜單,如圖6-2所示:
圖6-2 使用Content Linking組件創(chuàng)建的菜單頁面 可以看到內(nèi)容鏈接列表文件的內(nèi)容顯示在鏈接的下面,我們使用FileSystemObject對(duì)象完成這一工作。 <% 'create an instance of a FileSystemObject object Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
'open the text file as a TextStream object Set objTStream = objFSO.OpenTextFile(Server.MapPath("contlink.txt"), ForReading) Response.Write objTStream.ReadAll 'read the whole file and put into page ObjTStream.Close %> 如果你編輯了contlink.txt文件,下次再次調(diào)用這個(gè)頁面時(shí),會(huì)看到菜單的條目發(fā)生了變化。注意文件中的最后三個(gè)條目,這三個(gè)條目使用前面介紹的redirect.asp技術(shù),把絕對(duì)(而不是相對(duì))的URL插入到列表中。 (2) 瀏覽這些頁面 創(chuàng)建一個(gè)Content Linking組件實(shí)例并且使用它的一個(gè)方法時(shí),將把當(dāng)前頁面的URL與指定的內(nèi)容鏈接列表文件中的條目相匹配。不僅能用該組件創(chuàng)建一個(gè)內(nèi)容列表(就像剛看到的那樣),而且當(dāng)在瀏覽器上打開其中一個(gè)頁面時(shí),可以用該組件對(duì)列表中的各個(gè)頁面進(jìn)行導(dǎo)航。 這意味著可以用超鏈接或按鈕從這些頁面中的一個(gè)移到另一個(gè)。例如,可以給頁面添加Next和Back按鈕,通過使用GetNextURL和GetPreviousURL方法能知道列表中的哪一個(gè)頁面是前一個(gè),哪一個(gè)頁面是下一個(gè)。另一方面,能用GetNthURL方法跳到列表中的任何頁面,用GetListIndex方法能知道當(dāng)前頁面在列表中的位置。 下面是一段給頁面添加Next和Back按鈕的代碼,我們要做的只是把這段程序放在內(nèi)容鏈接文件所列出的每一頁中,或者用SSI的#include指令將它插入其中。 <!-- need a form to force Navigator to display the buttons --> <FORM ACTION=""> <% 'we'll insert this into each page using an SSI #include statement 'create an instance of the Content Linking component Set objNextLink = Server.CreateObject("MSWC.NextLink") 'set the content linking list file path and name strListFile = "contlink.txt" 'get the index of the current page in the list intThisPage = objNextLink.GetListIndex(strListFile) If intThisPage > 1 Then 'can go back %> <INPUT TYPE=BUTTON VALUE="< Back" ONCLICK="location.href='<% = objNextLink.GetPreviousURL(strListFile) %>';" TITLE="Go to '<% = objNextLink.GetPreviousDescription(strListFile) %>'"> <% End If %> <INPUT TYPE=BUTTON VALUE=" Menu " ONCLICK="location.href='Default.asp';" TITLE="Return to the main 'Installable Components' menu"> <% If intThisPage < objNextLink.GetListCount(strListFile) Then 'can go forward %> <INPUT TYPE=BUTTON VALUE="Next >" ONCLICK="location.href='<%= objNextLink.GetNextURL(strListFile) %>';" TITLE="Go to '<% = objNextLink.GetNextDescription(strListFile) %>'"> <% End If %> </FORM> 第一步是創(chuàng)建Content Linking組件,然后把列表文件名存入一個(gè)變量中,以便后面在創(chuàng)建頁面里的客戶端JScript代碼時(shí)能夠使用這個(gè)列表文件。另外這樣做也便于頁面的維護(hù),因?yàn)槿绻胧褂靡粋€(gè)不同文件名僅需在一個(gè)地方改變就可以了。 現(xiàn)在讓我們了解一下在鏈接列表中所處的位置。GetListIndex方法提供當(dāng)前頁面的索引號(hào),從列表中的第一頁開始。如果當(dāng)前頁面的索引號(hào)比1大,那么可以后退,所以我們?cè)陧撁嬷袆?chuàng)建Back按鈕。如果當(dāng)前頁面的索引號(hào)比列表中的項(xiàng)數(shù)少,創(chuàng)建Next按鈕。頁面中總是包括一個(gè)Home按鈕,以便訪問者在任何時(shí)候都能輕易地返回到內(nèi)容頁面。 如果打開列在主菜單中的頁面之一的話,將會(huì)看到使用這項(xiàng)技術(shù)在每個(gè)頁面上創(chuàng)建的一系列導(dǎo)航按鈕,創(chuàng)建按鈕的代碼在文件contlinkbuttons.inc中,可用#include指令將它插入每個(gè)頁面中。圖6-3所示為帶有按鈕的界面。
圖6-3 帶有按鈕的界面 在圖6-3中有三個(gè)按鈕,使用GetPreviousDescription方法獲得上個(gè)頁面的鏈接文件,并把這個(gè)文本放入Back按鈕的TITLE屬性中,作為彈出的提示。 <INPUT TYPE=BUTTON VALUE="< Back" ONCLICK="location.href='<% = objNextLink.GetPreviousURL(strListFile) %>';" TITLE="Go to '<% = objNextLink.GetPreviousDescription(strListFile) %>'"> Next按鈕采用GetNextDescription方法完成類似的工作。 (3) 用JavaScript跳轉(zhuǎn) 這些導(dǎo)航按鈕使用JavaScript(而不是VBScript)裝載新頁面,這樣就能夠和大多數(shù)現(xiàn)代瀏覽器兼容。例如Back按鈕包含下面的屬性: ONLICK="location.here='<% = objNextLink.GetPreviousURL(strListFile) %>'; " 當(dāng)頁面的HTML版本由ASP創(chuàng)建時(shí),在<%…%>標(biāo)記中的表達(dá)式用其數(shù)值取代,所以發(fā)往瀏覽器的網(wǎng)頁看起來如下所示: ONCLICK="location.herf='permissionchecker.asp'; " 為什么選擇使用變量來表示內(nèi)容鏈接列表文件的名字?其原因是在單個(gè)語句中包括一個(gè)三層的嵌套引用是非常麻煩的。 注意瀏覽器的缺省語言是JavaScript(或IE中的JScript),而不是VBScript,通過使用JavaScript,可以避免在OnClick代碼中必須提供LANGUAGE參數(shù),同時(shí)對(duì)非IE瀏覽器提供兼容性。
6.2.3 Ad Rotator組件 Ad Rotator組件允許瀏覽器在引用ASP頁面時(shí)每次顯示不同的圖像,這項(xiàng)技術(shù)經(jīng)常用在顯示廣告的站點(diǎn)上。每次打開或重新載入頁面時(shí),ASP采用“旋轉(zhuǎn)調(diào)度文件”(rotator schedule file)中的信息選擇一副圖像,并插入網(wǎng)頁中。然而Ad Rotator組件能做更復(fù)雜的工作,它可以把圖像設(shè)置成超級(jí)鏈接而不是一副靜止的圖像,并能記錄用戶對(duì)每個(gè)廣告的點(diǎn)擊次數(shù)。 在本章所介紹的組件中,Ad Rotator組件可能是最難使用的,因?yàn)樗婕皫讉€(gè)不同的文件。在查看每個(gè)文件之前,圖6-4所示的工作過程總覽可能有助于了解它們之間的組合方式。
圖6-4 Ad Rotator組件的工作過程總覽 1. 旋轉(zhuǎn)調(diào)度文件 Ad Rotator組件依賴于該文件來指定顯示的廣告或圖像。這個(gè)文件包括每個(gè)圖像文件的名字、顯示的尺寸大小以及顯示時(shí)間的相對(duì)百分?jǐn)?shù)。該文件分為兩部分,由一個(gè)僅含有一個(gè)星號(hào)(*)的行分隔。 文件格式如下: REDIRECT URL WIDTH width HEIGHT height BORDER border * adURL adHomeURL text impressions 其中: · URL是執(zhí)行重新定向的ASP文件或程序的虛擬路徑及名稱。 · width和height定義了頁面中廣告條的大小(以像素為單位),缺省值為440×60。 · border規(guī)定了廣告條邊界的寬度(以像素為單位),缺省值為1,無邊界時(shí)為0。 第一部分是可選的,設(shè)置應(yīng)用于該文件中所有廣告條的缺省值。這給設(shè)置所有圖像的參數(shù)提供了一種方法,邊界寬度可以使用Ad Rotator組件中的border屬性來設(shè)置。如果忽略了一項(xiàng)或多項(xiàng)此類任選參數(shù),而且沒有明確設(shè)置對(duì)象屬性,那么參數(shù)就使用其本身和缺省值。如果忽略所有這些參數(shù),仍需包含“*”作為文件的第一行。 第二部分,即“*”后的部分,必須存在于該文件中,它提供了各個(gè)廣告條的細(xì)節(jié)。對(duì)于每個(gè)廣告條,下面四個(gè)參數(shù)要重復(fù)使用。這些參數(shù)是: · adURL,是廣告圖像文件的虛擬路徑和文件名。 · adHomeURL,是廣告跳轉(zhuǎn)到的URL,連字符(-)表明該廣告條沒有鏈接。 · text,瀏覽器不支持圖型文件時(shí)顯示的文本。 · impressions,是一個(gè)整數(shù),指明了此廣告條顯示的相對(duì)時(shí)間或時(shí)間比率,例如一個(gè)文件包含三個(gè)廣告條,而且它們的impressions值分別設(shè)置為4、6和10,那么表明返回的頁面中有20%可能出現(xiàn)第一個(gè)廣告條,30%出現(xiàn)第二個(gè)廣告條,50%出現(xiàn)第三個(gè)廣告條。這沒有指明廣告條在瀏覽器中顯示的實(shí)際時(shí)間。注意每一個(gè)廣告條的實(shí)際出現(xiàn)是隨機(jī)的,并被修改以達(dá)到需要的比率。 下面看一個(gè)重新定向文件的例子: REDIRECT AdRotFiles/ad_redirect.asp WIDTH 400 HEIGHT 50 * Adrotfiles/wrox.gif http://www.wrox.com/ Better Books from Wrox press 3 AdRotFiles/lunar.gif http://www.going-to-the-moon.com/store.asp Acme Lunar Boost Supplies 1 2. Ad Rotator組件的成員 Ad Rotator組件含有一個(gè)方法和三個(gè)屬性,方法如表6-2所示: 表6-2 Ad Rotator組件的方法及說明 方 法 說 明
GetAdvertisement(schedule_file) 使用指定的schedule_file中的信息創(chuàng)建并返回一個(gè)字符串,這個(gè)字符串含有把下一個(gè)合適的圖像插入到該頁面所需的HTML
屬性如表6-3所示: 屬 性 說 明
Border 整數(shù)型,是指廣告條邊界的寬度(以像素為單位),若未設(shè)定,則采用文件第一部分設(shè)定的值
Clickable 布爾型,規(guī)定廣告欄圖像文件是否顯示為一個(gè)超級(jí)鏈接,缺省值為True
TargetFram 字符串型,目標(biāo)框(frame)的名字。如果用戶點(diǎn)擊圖像文件的話,這個(gè)框用于顯示廣告主的頁面。如果忽略的話,頁面裝載到當(dāng)前瀏覽器的目標(biāo)框或窗口內(nèi),取代含有廣告欄圖像的頁面,這個(gè)屬性也能設(shè)置成一個(gè)標(biāo)準(zhǔn)的HTML框標(biāo)識(shí):_top、_new、_child、_self、_parent和_blank
3. 使用Ad Rotator組件 下面的代碼說明了Ad Rotator組件的使用。創(chuàng)建了組件實(shí)例之后,設(shè)置屬性參數(shù)并調(diào)用GetAdvertisement方法,指定調(diào)度文件的相對(duì)物理路徑。由組件返回的HTML代碼通過使用Response.Write方法插入到頁面中。 <% 'VBScript example QUOT = Chr(34) Set objAdRot = Server.CreateObject("MSWC.AdRotator") objAdRot.Border=0 'no border objAdRot.Clickable=TRUE 'is a hyperlink objAdRot.TargetFrame="fraAdFrame" 'load into new window named fraAdFrame strHTML = objAdRot.GetAdvertisement("AdRotFiles\ad_schedule.txt") Response.Write(strHTML) 'put the HTML into the page %> GetAdvertisement方法的參數(shù)是相對(duì)于當(dāng)前目錄或Web網(wǎng)站根目錄的調(diào)度文件物理路徑和文件名。在上面的代碼中,此文件取名為AdRotFiles,位于包含正在運(yùn)行的ASP頁面的當(dāng)前目錄下的子目錄中。如果這個(gè)文件存入Web網(wǎng)站根目錄下的AdRotFiles子目錄,應(yīng)使用“\AdRotFiles\MyAdFile.txt”。 調(diào)用GetAdvertisement方法時(shí),返回能插入網(wǎng)頁中用于創(chuàng)建廣告欄的HTML代碼,對(duì)于上例中的旋轉(zhuǎn)調(diào)度文件中的第一個(gè)廣告欄,可以得到下列代碼: <A HREF=http://www.okasp.com/techinfo/"/AdRotFiles/AdRedirect.asp? url=http://www.wrox.com/&image=/AdRotFiles/AdPics/wrox.gif"> <IMG SRC=http://www.okasp.com/techinfo/"/AdRotFiles/AdPics/wrox.gif" ALT="Better Books from Wrox Press" WIDTH=440 HEIGHT=60 BORDER=0></A> 可以看到在常規(guī)的<A>標(biāo)記中放置了圖像文件,HREF屬性設(shè)置為重定向文件的名稱AdRedirect.asp,同時(shí)廣告主的主頁URL和所用的圖像添加到查詢字符串中,因此當(dāng)用戶點(diǎn)擊廣告欄時(shí),重定向文件將在服務(wù)器上載入并運(yùn)行。 4. 重定向文件 重定向文件可以是一個(gè)ASP頁面、一個(gè)ISAPI DLL或者是一個(gè)CGI應(yīng)用程序,無論是哪一種,它必須能夠接受和辨別廣告主的主頁URL以及圖像名參數(shù)。它檢查這些值并決定下一步該做什么。例如通常會(huì)把用戶重新定向到與此廣告欄有關(guān)的URL,這一點(diǎn)使用下面的VBScript代碼很容易實(shí)現(xiàn)。 Response.Redirect Request.QueryString("url") 然而,重新定向文件提供給我們的不僅僅是這些。例如可以統(tǒng)計(jì)點(diǎn)擊每個(gè)廣告的用戶數(shù)量,如果根據(jù)點(diǎn)擊數(shù)收到廣告費(fèi)用的話,這將顯得尤其有用。也可以用本章后面介紹的Counters組件來完成這項(xiàng)工作。 … 'get the URL of the advertiser's target page strAdvertiserURL = Request.QueryString("url") If Instr(strAdvertiserURL, "wrox.com") Then objCounters.Increment("wrox") Response.Clear Response.Redirect strAdvertiserURL End If
If Instr(strAdvertiserURL, "going-to-the-moon") Then objCounters.Increment("lunar") Response.Clear Response.Write "Sorry, this isn't a real site..." End If … .. 'same for other advertisers … 查詢字符串包含圖像文件名時(shí),在腳本中也要考慮這一點(diǎn),如果在調(diào)度文件中,同一廣告主有三種不同的圖像,可以對(duì)每個(gè)圖像單獨(dú)地跟蹤訪問次數(shù)。 … If Instr(strAdvertiserURL, "wrox.com") Then 'this is an advert for the Wrox Press site Select Case Request.QueryString("image") Case "books.gif" objCounters.Increment("wrox_books") Case "website.gif" objCounters.Increment("wrox_site") Case Else objCounters.Increment("wrox_other") End Select Response.Clear Response.Redirect strAdvertiserURL End If … 5. 一個(gè)Ad Rotator示例頁面 本章提供的示例文件包括一個(gè)Ad Rotator組件演示程序,它能夠從前面見過的ASP Installable Components主菜單中打開。頁面的上部顯示的是一個(gè)由名為ad_schedule.txt的旋轉(zhuǎn)調(diào)度文件定義的廣告(可在本章示例目錄下的Ad RotFiles子目錄中找到ad_shedule.txt),如圖6-5所示:
圖6-5 Ad Rotating頁面的示例 使用的代碼前面已經(jīng)討論過,這里在調(diào)度文件中僅增加了另外一些條目,以便更清楚地顯示載入頁面時(shí)的廣告的變化情況。如果點(diǎn)擊一個(gè)廣告,將運(yùn)行名為ad_redirect.asp的重定向文件中的代碼,并且相應(yīng)的廣告主的頁面在新的窗口里打開。完成該工作的代碼和前面見到的相同。 在重定向文件中,可使用計(jì)數(shù)器(由Counters組件創(chuàng)建)實(shí)例存儲(chǔ)每個(gè)廣告的點(diǎn)擊次數(shù)。 … If Instr(strAdvertiserURL, "wrox.com") Then objCounters.Increment("wrox") Response.Clear Response.Redirect strAdvertiserURL End If …此頁面的其余部分演示了Counters組件的作用,下面介紹該組件。
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!