当前位置: 首页 > 图文教程 > 脚本技术 > ColdFusion > Coldfusion MX广告轮换系统制作教程

ColdFusion
ColdFusionMX 编程指南 安装教程
ColdFusionMX 编程指南 基础管理操作以及入门程
ColdFusionMX 编程指南 ColdFusionMX编程入门
ColdFusionMX 编程指南 ColdFusionMX Basic Tag编程
ColdFusionMX 编程指南 ColdFusionMX中的循环
Coldfusion MX技巧精华收集(1)
Coldfusion MX技巧精华收集之2
ColdFusion MX 轻松制作 FLASH的方法
Coldfusion MX PageList之骨灰版
Coldfusion MX广告轮换系统制作教程
用Coldfusion生成 OFFICE 文件的代码
Coldfusion MX PageList 菜鸟版教程
ColdfusionMX与FlashMX通讯的方法
收藏的ColdFusionMX应用技巧及问题集
ColdFusion与FLASH通信轻松入门教程
ColdFusion MX 远程服务实例入门教程

ColdFusion 中的 Coldfusion MX广告轮换系统制作教程


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-01-10   浏览: 131 ::
收藏到网摘: n/a

wait 蓝色理想
CF里面没有提供象ASP里那样的广告组件,但是这并不能说明就不能做出功能强大的广告系统,这里我放上一个简单的广告轮换系统,也是我CCF论坛里面用的.功能,有显示次数和点击次数.在这基础上扩展比较容易,可以分类显示,下面的代码只是显示 大广告条.只是想抛砖引玉,大家举一反三,就能做出功能更加强大的广告系统出来.
<!--- 判断是否有地址传递 --->
<CFIF NOT IsDefined("URL.ADID")>
<!--- 默认为显示广告 --->
<CFLOCK TIMEOUT="10">
<CFPARAM NAME="Application.AD" TYPE="string" DEFAULT="">
<CFIF ListLen(Application.AD) EQ 0>
<cfquery name="getID" datasource="#DSN#">
select adid from ad
</cfquery>
<CFSET Application.AD = ValueList(getID.ADID)>
</CFIF>
<CFSET ThisAdID = ListGetAt(Application.AD, 1)>
<CFSET Application.AD = ListDeleteAt(Application.AD, 1)>
</CFLOCK>
<cfquery name="ad" datasource="#DSN#">
select * from ad
where adid='#ThisAdID#'
</cfquery>
<!--- 更新显示次数 --->
<CFSET ADSHOW=AD.SHOW+1>
<cfquery name="updateshow" datasource="#DSN#">
UPDATE AD
SET show='#ADSHOW#'
where ADID='#AD.ADID#'
</cfquery>
<!--- 显示广告 --->
<a href="javascript:location.reload()">刷新</a><p>
<cfoutput query="ad">
<a href="ad.cfm?ADID=#URLEncodedFormat(ADID)#" title="#title#" target="_blank"><img src="#IMAGE#" border="0" alt="#title#"></a><p>
<br>
</cfoutput>
<cfelse>
<!--- 如果有传递有参数 --->
<cfquery name="gotoURL" datasource="#DSN#">
SELECT ADID,URL,CLICK FROM AD
WHERE ADID='#URL.ADID#'
</cfquery>
<!--- 点击数加1 --->
<CFSET ADCLICK=GOTOURL.CLICK+1>
<CFQUERY DATASOURCE="#DSN#" name="UPDATECLICK">
UPDATE AD
SET CLICK='#ADCLICK#'
WHERE ADID='#URL.ADID#'
</CFQUERY>
<!--- 转向广告链接地址 --->
<cfoutput query="gotoURL">
<SCRIPT LANGUAGE="JavaScript">
self.location ='#URL#';
</SCRIPT>
</cfoutput>
</CFIF>

代码拷贝框
以下是引用片段:
<!--- 判断是否有地址传递 --->
<CFIF NOT IsDefined("URL.ADID")>
<!--- 默认为显示广告 --->
<CFLOCK TIMEOUT="10">
<CFPARAM NAME="Application.AD" TYPE="string" DEFAULT="">
<CFIF ListLen(Application.AD) EQ 0>
<cfquery name="getID" datasource="#DSN#">
select adid from ad
</cfquery>
<CFSET Application.AD = ValueList(getID.ADID)>
</CFIF>
<CFSET ThisAdID = ListGetAt(Application.AD, 1)>
<CFSET Application.AD = ListDeleteAt(Application.AD, 1)>
</CFLOCK>
<cfquery name="ad" datasource="#DSN#">
select * from ad
where adid='#ThisAdID#'
</cfquery>
<!--- 更新显示次数 --->
<CFSET ADSHOW=AD.SHOW+1>
<cfquery name="updateshow" datasource="#DSN#">
UPDATE AD
SET show='#ADSHOW#'
where ADID='#AD.ADID#'
</cfquery>
<!--- 显示广告 --->
<a href="javascript:location.reload()">刷新</a><p>
<cfoutput query="ad">
<a href="ad.cfm?ADID=#URLEncodedFormat(ADID)#" title="#title#" target="_blank"><img src="#IMAGE#" border="0" alt="#title#"></a><p>
<br>
</cfoutput>
<cfelse>
<!--- 如果有传递有参数 --->
<cfquery name="gotoURL" datasource="#DSN#">
SELECT ADID,URL,CLICK FROM AD
WHERE ADID='#URL.ADID#'
</cfquery>
<!--- 点击数加1 --->
<CFSET ADCLICK=GOTOURL.CLICK+1>
<CFQUERY DATASOURCE="#DSN#" name="UPDATECLICK">
UPDATE AD
SET CLICK='#ADCLICK#'
WHERE ADID='#URL.ADID#'
</CFQUERY>
<!--- 转向广告链接地址 --->
<cfoutput query="gotoURL">
<SCRIPT LANGUAGE="JavaScript">
self.location ='#URL#';
</SCRIPT>
</cfoutput>
</CFIF>

GAME OVER
这广告是改自BEN FORTA的教程的.他介绍的广告条制作方法原理都差不多,但是功能少的可怜,不能URL转向.不能记录显示次数和点击次数,所以我就改了他,自己加了些功能在里面.

原理:把广告数据放在一个数据库的表里面,一次提取所有的广告编号(ID),把这ID存放在一个APPLICATION变量里面,我显示一个,就从这个APPLICATION变量里面删除这个显示过的广告ID,下次就不会显示这个广告条了.直到所有的广告条都显示过以后,如果APPLICATION变量为空了,重新查询数据库,调取所有的广告ID,,,一直这样循环下去.

提示一下:把上面保存一个文件改上你自己的数据库行了.显示广告,广告条URL转向都在这个文件里面.
请注意这个变量:Application.AD ,这是个应用程序变量,我把他定义成一个字符串,在CF字符串里面可以这样 Application.AD="I'm wait" 也可以这样 Application.AD=" 1 2 3 4 5 6 7 9",我这广告就是用后面这个
再说说这个比喻:例如我是第一次访问.就调用Application.AD="1" 然后删除这个Application.AD="1" 下次就只剩下:Application.AD=" 2 3 4 5 6 7 9" 一次少一个,就这实现了轮换效果.当然,一直到全部显示完,然后重新查询数据库,提取所有广告ID.放到Application.AD这个字符串里面
注意看这句:
<CFIF ListLen(Application.AD) EQ 0>
意思就是:如果我这个Application.AD 长度为0了,就重新查询数据库然后把查询结果放在Application.AD变量里面.注意.要测试列表的长度不能用LEN(),而是用专门测试列表长度的函数ListLen
<cfquery name="getID" datasource="#DSN#">
select adid from ad
</cfquery>
<CFSET Application.AD = ValueList(getID.ADID)>
如果,还有没有显示完一次轮换,那肯定不是等于0,那就不会重新查询数据库.
至于得到第一个字符,可以用
<CFSET ThisAdID = ListGetAt(Application.AD, 1)>
然后删除这个.下次就轮到下个了.
<CFSET Application.AD = ListDeleteAt(Application.AD, 1)>
重点就是这些,至于下面那些更新显示次数,和计数显示次数,都是普通的CF代码.没什么特别的.