ASP.NET 網頁製作教本 – 從基本語法學起 第12章 訪客計數器、廣告迴旋板
12-1 訪客計數器
文字版訪客計數器 -- Application 物件版本 Tcount1.aspx <HTML> <BODY BGCOLOR=WHITE> <CENTER><H2>Tcount01.aspx -- 文字版訪客計數器 <HR></H2> 您是本站第 <%=Application("counter")%> 位貴賓! </BODY> </HTML> <script Language="VB" runat="server"> Sub Page_Load(sender As Object, e As EventArgs) Application.Lock Application("counter") = Application("counter") + 1 Application.UnLock End Sub </script>
Tcount1.aspx
文字版訪客計數器 -- 檔案版本 (Tcount2.aspx #1~14) #01 <%@ Import Namespace="System.IO" %> #02 #03 <HTML> #04 <BODY BGCOLOR=WHITE> #05 <CENTER><H2>Tcount02.aspx -- 文字版訪客計數器 <HR></H2> #06 您是本站第 <%=counter%> 位貴賓! #07 </BODY> #08 </HTML> #09 #10 <script Language="VB" runat="server"> #11 #12 Dim counter As Long = 1 ' 宣告一個計數器變數 #13 #14 Sub Page_Load(sender As Object, e As EventArgs)
文字版訪客計數器 -- 檔案版本 (Tcount2.aspx #15~31) #15 ' 進行鎖定,防止非同步更新 #16 Application.Lock #17 #18 Dim PathName As String = Server.MapPath("counter.txt") #19 #20 If File.Exists( PathName ) Then ' 判斷 counter.txt 是否存在 #21 ' 讀取 counter.txt 檔案中的計數器,然後指定給 counter 變數 #22 Dim sReader As StreamReader #23 sReader = New StreamReader( PathName, Encoding.Default ) #24 Dim S As String #25 S = sReader.ReadLine() #26 If Not S Is Nothing Then #27 counter = CLng( S ) + 1 ' 先加一,再指定給 counter 變數 #28 End If #29 sReader.Close() #30 End If#31
文字版訪客計數器 -- 檔案版本(Tcount2.aspx #32~42) #32 ' 將計數器的值寫回 counter.txt 檔案 #33 Dim sWriter As StreamWriter #34 sWriter = New StreamWriter( PathName, False, Encoding.Default ) #35 sWriter.Write( CStr(counter) ) #36 sWriter.Flush() #37 sWriter.Close() #38 #39 ' 解除鎖定 #40 Application.UnLock #41 End Sub #42 </script>
圖形訪客計數器第一版 顯示圖形的訪客計數器,例如 ,那麼可以把計數器的數值轉換成圖形計數器的 HTML 標示 。若計數器的數值等於 12:
PngCounter 函數 把數值轉換成圖形的 HTML 標示這個轉換的工作寫成以下的 PngCounter 函數: Function PngCounter( counter As Long ) As String Dim S, i, G S = CStr( counter ) ' 先將數值轉成字串 S ' 逐一取字串S的每一個字元, 然後串成 <IMG SRC=?.png> 的圖形標示 For i = 1 to Len(S) G = G & "<IMG SRC=" & Mid(S, i, 1) & ".png Align=TextTop>" Next Return G End Function
PngCount.aspx 網頁
PngCount.aspx 網頁程式(1) <%@ Import Namespace="System.IO" %> <HTML> <BODY BGCOLOR=WHITE> <CENTER><H2>PngCount.aspx -- 圖形訪客計數器 <HR></H2> 您是本站第 <%=PngCounter(counter)%> 位貴賓! </BODY> </HTML> <script Language="VB" runat="server"> Dim counter As Long = 1 ' 宣告一個計數器變數 Sub Page_Load(sender As Object, e As EventArgs) ' 進行鎖定,防止非同步更新 Application.Lock Dim PathName As String = Server.MapPath("counter.txt")
PngCount.aspx 網頁程式(2) If File.Exists( PathName ) Then ' 判斷 counter.txt 是否存在 ' 讀取 counter.txt 檔案中的計數器,然後指定給 counter 變數 Dim sReader As StreamReader sReader = New StreamReader( PathName, Encoding.Default ) Dim S As String S = sReader.ReadLine() If Not S Is Nothing Then counter = CLng( S ) + 1 ' 先加一,再指定給 counter 變數 End If sReader.Close() ' 將計數器的值寫回 counter.txt 檔案 Dim sWriter As StreamWriter sWriter = New StreamWriter( PathName, False, Encoding.Default ) sWriter.Write( CStr(counter) ) sWriter.Flush() sWriter.Close()
PngCount.aspx 網頁程式(1) ' 解除鎖定 Application.UnLock End Sub Function PngCounter( counter As Long ) As String Dim S, i, G S = CStr( counter ) ' 先將數值轉成字串 S ' 逐一取字串S的每一個字元, 然後串成 <IMG SRC=?.gif> 的圖形標示 For i = 1 to Len(S) G = G & "<IMG SRC=" & Mid(S, i, 1) & ".png Align=TextTop>" Next Return G End Function </script>
圖形訪客計數器第二版 每一個數字是一個獨立的圖檔,可能因不同圖檔下載情況不同的關係,造成以下現象:
NumToPng.apsx 網頁
PngCount2.aspx 網頁程式(1) <%@ Import Namespace="System.IO" %> <HTML> <BODY BGCOLOR=WHITE> <CENTER><H2>PngCount2.aspx -- 圖形訪客計數器第二版 <HR></H2> 您是本站第 <Img Src="NumToPng.aspx?counter=<%=counter%>" Align=TextTop> 位貴賓! </BODY> </HTML> <script Language="VB" runat="server"> Dim counter As Long = 1 ' 宣告一個計數器變數 Sub Page_Load(sender As Object, e As EventArgs) ' 進行鎖定,防止非同步更新 Application.Lock
PngCount2.aspx 網頁程式(2) Dim PathName As String = Server.MapPath("counter.txt") If File.Exists( PathName ) Then ' 判斷 counter.txt 是否存在 ' 讀取 counter.txt 檔案中的計數器,然後指定給 counter 變數 Dim sReader As StreamReader sReader = New StreamReader( PathName, Encoding.Default ) Dim S As String S = sReader.ReadLine() If Not S Is Nothing Then counter = CLng( S ) + 1 ' 先加一,再指定給 counter 變數 End If sReader.Close()
PngCount2.aspx 網頁程式(3) ' 將計數器的值寫回 counter.txt 檔案 Dim sWriter As StreamWriter sWriter = New StreamWriter( PathName, False, Encoding.Default ) sWriter.Write( CStr(counter) ) sWriter.Flush() sWriter.Close() ' 解除鎖定 Application.UnLock End Sub </script>
PngCount2.aspx 網頁
NumToPng.aspx 的原始碼(1) <%@ Import Namespace="System.IO" %> <%@ Import Namespace="System.Drawing" %> <%@ Import Namespace="System.Drawing.Imaging" %> <script Language="VB" runat="server"> Sub Page_Load(sender As Object, e As EventArgs) Const PicWidth As Integer = 14 ' 若改變圖檔大小 Const PicHeight As Integer = 19 ' 請修改這兩行敘述 Dim counter As String = Request("counter") Const ThisPixelFormat = PixelFormat.Format24bppRgb Dim bmp As New Bitmap( Len(counter)*PicWidth, PicHeight, ThisPixelFormat ) Dim g As Graphics = Graphics.FromImage(bmp) Dim img As System.Drawing.Image
NumToPng.aspx 的原始碼(2) Dim I As Integer, gFile As String For I = 1 To Len(counter) gFile = Server.MapPath( Mid(counter, I, 1) & ".png") img = System.Drawing.Image.FromFile( gFile ) g.DrawImage( img, New Point(PicWidth*(I-1), 0) ) Next Dim MyStream As New MemoryStream() bmp.Save( MyStream, ImageFormat.Png) MyStream.Seek(0, SeekOrigin.Begin ) Dim Buffer( MyStream.Length ) As Byte MyStream.Read(Buffer, 0, MyStream.Length ) MyStream.Close() Response.BinaryWrite(Buffer) End Sub </script>
訪客計數器 Server 版 --使用資料庫來開發 counter.mdb資料庫「計數器」資料表結構如下:
counter.mdb 資料庫的「計數器」資料表的資料
dbcount.htm 的使用範例(1) <HTML> <BODY BGCOLOR=WHITE> <H2>使用 Server 版訪客計數器範例<HR></H2> dbcount.aspx 放置於「本機」的 /kjaspx/ch12 目錄 <blockquote> ID=kjwang:<Img Src="/kjaspx/ch12/dbcount.aspx?ID=kjwang" Align=TextTop><P> ID=walter:<Img Src="/kjaspx/ch12/dbcount.aspx?ID=walter" Align=TextTop> </blockquote>
dbcount.htm 的使用範例 (2) dbcount.aspx 放置於 http://www.kjedu.com.tw/kjaspx/ch12 <blockquote> ID=kjwang:<Img Src="http://www.kjedu.com.tw/kjaspx/ch12/dbcount.aspx?ID=kjwang" Align=TextTop><P> ID=walter:<Img Src="http://www.kjedu.com.tw/kjaspx/ch12/dbcount.aspx?ID=walter" Align=TextTop> </blockquote> <HR> </BODY> </HTML>
dbcount.htm 網頁
12-2 廣告迴旋板
認識廣告迴旋板
AdRotator 廣告迴旋板
製作 AdRotator 廣告迴旋板的準備工作--網址 圖片所連結到的網址,也就是當上網者在圖片上按下滑鼠之後,所跳至的網頁。此一欄位可以設定成標準的網際網路網址,例如: http://www.kj.com.tw/2000/vb/ba/vbba6.htm
製作 AdRotator 廣告迴旋板的準備工作--文字敘述 圖片還沒有下載至瀏覽器之前,圖片外框所顯示的替代性文字,例如:
製作 AdRotator 廣告迴旋板的準備工作--加權(1) 加權在此是一個數字,用來表示此一廣告出現的機率,舉例來說,某一廣告迴旋板含有 4 則廣告,每一則廣告的加權都等於 1,那麼每一則廣告的出現率就等於 1÷(1+1+1+1),等於 25%,但如果第一則廣告的加權等於 3,而其他三則廣告的加權都等於 1,則第一則廣告的出現率將等於 3÷(3+1+1+1),等於 50%,而其他廣告的出現率則等於 1÷(3+1+1+1),等於17% 左右。
製作 AdRotator 廣告迴旋板的準備工作--加權(2) 「出現率」與「實際出現次數」的差異:上述的廣告出現率 25%(等於 1/4),是指進入網頁無限次之後,平均 4 次會出現 1 次,並不是說每 4 次就一定會出現 1 次,舉例來說,可能在前 4 次沒有出現半次(或前 4 次出現了 2 次),但經過 10000 次之後,出現次數卻是 2500 次左右。
每一則廣告所對應的圖檔、網址、文字敘述、及加權
AdRotator「排程檔」-- Adrot.xml (1) <?xml version="1.0" encoding="big5" ?> <Advertisements> <Ad> <ImageUrl>F8315.gif</ImageUrl> <NavigateUrl>ba/vbba6.htm</NavigateUrl> <AlternateText>新觀念的 Visual Basic 6.0 教本/AlternateText> <Impressions>1</Impressions> </Ad> <Ad> <ImageUrl>F8308.gif</ImageUrl> <NavigateUrl>api/vbapi.htm</NavigateUrl> <AlternateText>Visual Basic 6.0與 Windows API 講座</AlternateText> <Impressions>1</Impressions> </Ad>
AdRotator「排程檔」-- Adrot.xml (2) <Ad> <ImageUrl>F8316.gif</ImageUrl> <NavigateUrl>ex/vbex6.htm</NavigateUrl> <AlternateText>Visual Basic 6.0 實戰講座</AlternateText> <Impressions>1</Impressions> </Ad> <Ad> <ImageUrl>F8317.gif</ImageUrl> <NavigateUrl>db/vbdb6.htm</NavigateUrl> <AlternateText>Visual Basic 6.0 資料庫程式設計</AlternateText> <Impressions>1</Impressions> </Ad> <Advertisements>
佈置 AdRotator 控制元件 Adrot.aspx <Html> <Body BgColor="White"> <H3>使用 AdRotator 控制元件<HR></H3> <center> <Form runat="server"> <asp:AdRotator id="adrot1" BorderWidth="1" runat=server AdvertisementFile="Adrot.xml" /> </Form> </center><Hr> </Body> </Html>