一个基于ASP的标题广告管理系统(三)
三、显示广告
这部分程序主要有如下四个目的:第一,参考各个广告的显示等级,随机选择本次显示的广告;第二,更新数据库中该广告的显示次数;第三,输出标题广告的HTML代码;第四,在数据库历史表中保存显示和点击历史纪录。 实现上述功能的脚本主要有两个: ShowBanner.asp:确定本次调用要显示的广告,更新显示次数记录,生成标题广告的HTML代码。 Redirect.asp:重定向页面。ShowBanner.asp生成的广告HTML代码将调用该脚本,由该脚本记录点击历史数据、重定向到广告客户指定的页面。 本文下载包中的ShowBanner.asp同时也是一个广告显示示例页面,每次刷新该页面可以显示出不同的广告。下面我们按照ShowBanner.asp的执行过程,介绍其中的关键步骤。 ㈠ 计算显示等级总和 本系统采用的广告选择算法是:首先计算出当前所有可用广告的显示等级总和,然后根据这个和值生成一个随机数,再根据这个随机数来确定本次显示的广告。下面的代码用于计算可用广告的显示等级总和: nTotalWeight = 0 strSql = "SELECT SUM( Weight ) As SumWeight FROM " + _ "Advertisement WHERE Status=1" rs.Open strSql, cn If not rs.EOF and not rs.BOF Then nTotalWeight = rs.Fields( "SumWeight" ) ' nTotalWeight有可能为空值 If IsNull( nTotalWeight ) Then nTotalWeight = 1 End If End If 在计算出nTotalWeight之后,我们可以根据该值生成一个随机数,如下所示: Randomize nRandomNumber = Int( Rnd * nTotalWeight ) + 1 程序将从数据库读取可用广告记录(参见下面的代码),累计已读取记录的weight总和,当这个新的总和超过这里生成的随机数时,就将当前记录作为本次显示的广告。 ㈡ 分析可用广告记录 接下来的任务是执行一个查询,提取所有可用广告记录。如前所述,在遍历这些可用广告记录时,记录已读取记录的weight值总和nWeightCount ,当nWeightCount 等于或大于前面生成的随机数nRandomNumber时,程序就认为找到了本次要显示的广告。具体如下: strSql = "SELECT * FROM Advertisement WHERE Status=1" rs.Close rs.Open strSql, cn bDone = false ' 已读取记录的Weight值总和 nWeightCount = 0 ' 清除变量 strImageURL = "" strAltText = "" strLink = "" nImageWidth = 0 nImageHeight = 0 nWeight = 0 nAdID = 0 nAdvertiserID = 0 nViewLimit = 0 nImpressions = 0 While not rs.EOF and not rs.BOF and not bDone ' 将数据库值赋给变量 ' 这种算法不利于效率,但简化了控制结构 strImageURL = rs.Fields( "ImageURL" ) strAltText = rs.Fields( "AltText" ) strLink = rs.Fields( "Link" ) nImageWidth = rs.Fields( "ImageWidth" ) nImageHeight = rs.Fields( "ImageHeight" ) nWeight = rs.Fields( "Weight" ) nAdID = rs.Fields( "AdID" ) nAdvertiserID = rs.Fields( "AdvertiserID" ) nViewLimit = rs.Fields( "ViewLimit" ) nImpressions = rs.Fields( "Impressions" ) nWeightCount = nWeightCount + nWeight rs.MoveNext ' nWeightCount是否等于或大于随机变量值 If nWeightCount >= nRandomNumber or rs.EOF Then bDone= true End If Wend ㈢ 更新当前广告的显示次数 在确定本次要显示的广告之后,程序就可以更新该广告记录的Impressions字段。如果新的Impressions值超过了显示次数限制(nViewLimit),还必需设置Status字段为0(即本广告不可再显示)。实现代码如下: nStatus = 1 nImpressions = nImpressions + 1 If nImpressions >= nViewLimit Then nStatus = 0 End If strSql = "UPDATE Advertisement Set Status=" + _ CStr( nStatus ) + ", Impressions=" + _ CStr( nImpressions ) + " WHERE AdID=" + _ CStr( nAdID ) rs.Close rs.Open strSql, cn ㈣ 生成HTML代码 在完成上述准备工作之后,接下来就可以输出显示广告的HTML代码。所输出的HTML代码可以分成如下几个部分: 重定向页面 --> 目标URL --> 其他参数 --> 图片标记 为什么不是直接链接到广告客户指定的URL呢?这是因此,虽然这种方法更简单,但我们希望能够记录广告的点击数量,在重定向页面中我们就可以更新该广告的ClickThroughs字段值。 在显示广告的HTML代码中,重定向页面本文假定为Redirect.asp,目标URL来自数据库,其他参数主要是广告编号、广告客户编号等,Redirect.asp利用这些参数记录点击历史纪录。具体实现如下: strHtmlCode = _ "<a href=Redirect.asp?" + _ 上一篇:一个基于ASP的标题广告管理系统(二) 下一篇:完整的访问统计程序(二 程序篇) 更多相关文章
|
推荐文章
精彩文章
|