分享
 
 
 

ASP 3.0高级编程(二十四)

王朝asp·作者佚名  2006-12-16
窄屏简体版  字體: |||超大  

(1) 创建一个内容页面

我们已经使用Content Linking组件为本章提供的示例创建了菜单页面。Chapter06文件夹中的页面Default.htm采用上述代码创建菜单

可以看到内容链接列表文件的内容显示在链接的下面,我们使用FileSystemObject对象完成这一工作。

<%

'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文件,下次再次调用这个页面时,会看到菜单的条目发生了变化。注意文件中的最后三个条目,这三个条目使用前面介绍的redirect.asp技术,把绝对(而不是相对)的URL插入到列表中。

(2) 浏览这些页面

创建一个Content Linking组件实例并且使用它的一个方法时,将把当前页面的URL与指定的内容链接列表文件中的条目相匹配。不仅能用该组件创建一个内容列表(就像刚看到的那样),而且当在浏览器上打开其中一个页面时,可以用该组件对列表中的各个页面进行导航。

这意味着可以用超链接或按钮从这些页面中的一个移到另一个。例如,可以给页面添加Next和Back按钮,通过使用GetNextURL和GetPreviousURL方法能知道列表中的哪一个页面是前一个,哪一个页面是下一个。另一方面,能用GetNthURL方法跳到列表中的任何页面,用GetListIndex方法能知道当前页面在列表中的位置。

下面是一段给页面添加Next和Back按钮的代码,我们要做的只是把这段程序放在内容链接文件所列出的每一页中,或者用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>

第一步是创建Content Linking组件,然后把列表文件名存入一个变量中,以便后面在创建页面里的客户端JScript代码时能够使用这个列表文件。另外这样做也便于页面的维护,因为如果想使用一个不同文件名仅需在一个地方改变就可以了。

现在让我们了解一下在链接列表中所处的位置。GetListIndex方法提供当前页面的索引号,从列表中的第一页开始。如果当前页面的索引号比1大,那么可以后退,所以我们在页面中创建Back按钮。如果当前页面的索引号比列表中的项数少,创建Next按钮。页面中总是包括一个Home按钮,以便访问者在任何时候都能轻易地返回到内容页面。

如果打开列在主菜单中的页面之一的话,将会看到使用这项技术在每个页面上创建的一系列导航按钮,创建按钮的代码在文件contlinkbuttons.inc中,可用#include指令将它插入每个页面中。

有三个按钮,使用GetPreviousDescription方法获得上个页面的链接文件,并把这个文本放入Back按钮的TITLE属性中,作为弹出的提示。

<INPUT TYPE=BUTTON VALUE="< Back"

ONCLICK="location.href='<% = objNextLink.GetPreviousURL(strListFile) %>';"

TITLE="Go to '<% = objNextLink.GetPreviousDescription(strListFile) %>'">

Next按钮采用GetNextDescription方法完成类似的工作。

(3) 用JavaScript跳转

这些导航按钮使用JavaScript(而不是VBScript)装载新页面,这样就能够和大多数现代浏览器兼容。例如Back按钮包含下面的属性:

ONLICK="location.here='<% = objNextLink.GetPreviousURL(strListFile) %>'; "

当页面的HTML版本由ASP创建时,在<%…%>标记中的表达式用其数值取代,所以发往浏览器的网页看起来如下所示:

ONCLICK="location.herf='permissionchecker.asp'; "

为什么选择使用变量来表示内容链接列表文件的名字?其原因是在单个语句中包括一个三层的嵌套引用是非常麻烦的。

注意浏览器的缺省语言是JavaScript(或IE中的JScript),而不是VBScript,通过使用JavaScript,可以避免在OnClick代码中必须提供LANGUAGE参数,同时对非IE浏览器提供兼容性。

6.2.3 Ad Rotator组件

Ad Rotator组件允许浏览器在引用ASP页面时每次显示不同的图像,这项技术经常用在显示广告的站点上。每次打开或重新载入页面时,ASP采用“旋转调度文件”(rotator schedule file)中的信息选择一副图像,并插入网页中。然而Ad Rotator组件能做更复杂的工作,它可以把图像设置成超级链接而不是一副静止的图像,并能记录用户对每个广告的点击次数。

在本章所介绍的组件中,Ad Rotator组件可能是最难使用的,因为它涉及几个不同的文件。在查看每个文件之前,图6-4所示的工作过程总览可能有助于了解它们之间的组合方式。

Ad Rotator组件的工作过程总览

1. 旋转调度文件

Ad Rotator组件依赖于该文件来指定显示的广告或图像。这个文件包括每个图像文件的名字、显示的尺寸大小以及显示时间的相对百分数。该文件分为两部分,由一个仅含有一个星号(*)的行分隔。

文件格式如下:

REDIRECT URL

WIDTH width

HEIGHT height

BORDER border

*

adURL

adHomeURL

text

impressions

其中:

· URL是执行重新定向的ASP文件或程序的虚拟路径及名称。

· width和height定义了页面中广告条的大小(以像素为单位),缺省值为440×60。

· border规定了广告条边界的宽度(以像素为单位),缺省值为1,无边界时为0。

第一部分是可选的,设置应用于该文件中所有广告条的缺省值。这给设置所有图像的参数提供了一种方法,边界宽度可以使用Ad Rotator组件中的border属性来设置。如果忽略了一项或多项此类任选参数,而且没有明确设置对象属性,那么参数就使用其本身和缺省值。如果忽略所有这些参数,仍需包含“*”作为文件的第一行。

第二部分,即“*”后的部分,必须存在于该文件中,它提供了各个广告条的细节。对于每个广告条,下面四个参数要重复使用。这些参数是:

· adURL,是广告图像文件的虚拟路径和文件名。

· adHomeURL,是广告跳转到的URL,连字符(-)表明该广告条没有链接。

· text,浏览器不支持图型文件时显示的文本。

· impressions,是一个整数,指明了此广告条显示的相对时间或时间比率,例如一个文件包含三个广告条,而且它们的impressions值分别设置为4、6和10,那么表明返回的页面中有20%可能出现第一个广告条,30%出现第二个广告条,50%出现第三个广告条。这没有指明广告条在浏览器中显示的实际时间。注意每一个广告条的实际出现是随机的,并被修改以达到需要的比率。

下面看一个重新定向文件的例子:

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

||||||2. Ad Rotator组件的成员

Ad Rotator组件含有一个方法和三个属性,方法如表6-2所示:

表6-2 Ad Rotator组件的方法及说明

方 法

说 明

GetAdvertisement(schedule_file)

使用指定的schedule_file中的信息创建并返回一个字符串,这个字符串含有把下一个合适的图像插入到该页面所需的HTML

属性如表6-3所示:

属 性

说 明

Border

整数型,是指广告条边界的宽度(以像素为单位),若未设定,则采用文件第一部分设定的值

Clickable

布尔型,规定广告栏图像文件是否显示为一个超级链接,缺省值为True

TargetFram

字符串型,目标框(frame)的名字。如果用户点击图像文件的话,这个框用于显示广告主的页面。如果忽略的话,页面装载到当前浏览器的目标框或窗口内,取代含有广告栏图像的页面,这个属性也能设置成一个标准的HTML框标识:_top、_new、_child、_self、_parent和_blank

3. 使用Ad Rotator组件

下面的代码说明了Ad Rotator组件的使用。创建了组件实例之后,设置属性参数并调用GetAdvertisement方法,指定调度文件的相对物理路径。由组件返回的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方法的参数是相对于当前目录或Web网站根目录的调度文件物理路径和文件名。在上面的代码中,此文件取名为AdRotFiles,位于包含正在运行的ASP页面的当前目录下的子目录中。如果这个文件存入Web网站根目录下的AdRotFiles子目录,应使用“\AdRotFiles\MyAdFile.txt”。

调用GetAdvertisement方法时,返回能插入网页中用于创建广告栏的HTML代码,对于上例中的旋转调度文件中的第一个广告栏,可以得到下列代码:

<A HREF="/AdRotFiles/AdRedirect.asp?

url=http://www.wrox.com/&image=/AdRotFiles/AdPics/wrox.gif">

<IMG SRC="/AdRotFiles/AdPics/wrox.gif"

ALT="Better Books from Wrox Press" WIDTH=440 HEIGHT=60 BORDER=0></A>

可以看到在常规的<A>标记中放置了图像文件,HREF属性设置为重定向文件的名称AdRedirect.asp,同时广告主的主页URL和所用的图像添加到查询字符串中,因此当用户点击广告栏时,重定向文件将在服务器上载入并运行。

4. 重定向文件

重定向文件可以是一个ASP页面、一个ISAPI DLL或者是一个CGI应用程序,无论是哪一种,它必须能够接受和辨别广告主的主页URL以及图像名参数。它检查这些值并决定下一步该做什么。例如通常会把用户重新定向到与此广告栏有关的URL,这一点使用下面的VBScript代码很容易实现。

Response.Redirect Request.QueryString("url")

然而,重新定向文件提供给我们的不仅仅是这些。例如可以统计点击每个广告的用户数量,如果根据点击数收到广告费用的话,这将显得尤其有用。也可以用本章后面介绍的Counters组件来完成这项工作。

'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

查询字符串包含图像文件名时,在脚本中也要考虑这一点,如果在调度文件中,同一广告主有三种不同的图像,可以对每个图像单独地跟踪访问次数。

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. 一个Ad Rotator示例页面

本章提供的示例文件包括一个Ad Rotator组件演示程序,它能够从前面见过的ASP Installable Components主菜单中打开。页面的上部显示的是一个由名为ad_schedule.txt的旋转调度文件定义的广告(可在本章示例目录下的Ad RotFiles子目录中找到ad_shedule.txt

使用的代码前面已经讨论过,这里在调度文件中仅增加了另外一些条目,以便更清楚地显示载入页面时的广告的变化情况。如果点击一个广告,将运行名为ad_redirect.asp的重定向文件中的代码,并且相应的广告主的页面在新的窗口里打开。完成该工作的代码和前面见到的相同。

在重定向文件中,可使用计数器(由Counters组件创建)实例存储每个广告的点击次数。

If Instr(strAdvertiserURL, "wrox.com") Then

objCounters.Increment("wrox")

Response.Clear

Response.Redirect strAdvertiserURL

End If

…此页面的其余部分演示了Counters组件的作用,下面介绍该组件。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有