Coldfusion MX廣告輪換系統(tǒng)制作教程
更新時(shí)間:2007年03月15日 00:00:00 作者:
wait 藍(lán)色理想
CF里面沒(méi)有提供象ASP里那樣的廣告組件,但是這并不能說(shuō)明就不能做出功能強(qiáng)大的廣告系統(tǒng),這里我放上一個(gè)簡(jiǎn)單的廣告輪換系統(tǒng),也是我CCF論壇里面用的.功能,有顯示次數(shù)和點(diǎn)擊次數(shù).在這基礎(chǔ)上擴(kuò)展比較容易,可以分類顯示,下面的代碼只是顯示 大廣告條.只是想拋磚引玉,大家舉一反三,就能做出功能更加強(qiáng)大的廣告系統(tǒng)出來(lái).
<!--- 判斷是否有地址傳遞 --->
<CFIF NOT IsDefined("URL.ADID")>
<!--- 默認(rèn)為顯示廣告 --->
<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>
<!--- 更新顯示次數(shù) --->
<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>
<!--- 如果有傳遞有參數(shù) --->
<cfquery name="gotoURL" datasource="#DSN#">
SELECT ADID,URL,CLICK FROM AD
WHERE ADID='#URL.ADID#'
</cfquery>
<!--- 點(diǎn)擊數(shù)加1 --->
<CFSET ADCLICK=GOTOURL.CLICK+1>
<CFQUERY DATASOURCE="#DSN#" name="UPDATECLICK">
UPDATE AD
SET CLICK='#ADCLICK#'
WHERE ADID='#URL.ADID#'
</CFQUERY>
<!--- 轉(zhuǎn)向廣告鏈接地址 --->
<cfoutput query="gotoURL">
<SCRIPT LANGUAGE="JavaScript">
self.location ='#URL#';
</SCRIPT>
</cfoutput>
</CFIF>
代碼拷貝框
以下是引用片段:
<!--- 判斷是否有地址傳遞 --->
<CFIF NOT IsDefined("URL.ADID")>
<!--- 默認(rèn)為顯示廣告 --->
<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>
<!--- 更新顯示次數(shù) --->
<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>
<!--- 如果有傳遞有參數(shù) --->
<cfquery name="gotoURL" datasource="#DSN#">
SELECT ADID,URL,CLICK FROM AD
WHERE ADID='#URL.ADID#'
</cfquery>
<!--- 點(diǎn)擊數(shù)加1 --->
<CFSET ADCLICK=GOTOURL.CLICK+1>
<CFQUERY DATASOURCE="#DSN#" name="UPDATECLICK">
UPDATE AD
SET CLICK='#ADCLICK#'
WHERE ADID='#URL.ADID#'
</CFQUERY>
<!--- 轉(zhuǎn)向廣告鏈接地址 --->
<cfoutput query="gotoURL">
<SCRIPT LANGUAGE="JavaScript">
self.location ='#URL#';
</SCRIPT>
</cfoutput>
</CFIF>
GAME OVER
這廣告是改自BEN FORTA的教程的.他介紹的廣告條制作方法原理都差不多,但是功能少的可憐,不能URL轉(zhuǎn)向.不能記錄顯示次數(shù)和點(diǎn)擊次數(shù),所以我就改了他,自己加了些功能在里面.
原理:把廣告數(shù)據(jù)放在一個(gè)數(shù)據(jù)庫(kù)的表里面,一次提取所有的廣告編號(hào)(ID),把這ID存放在一個(gè)APPLICATION變量里面,我顯示一個(gè),就從這個(gè)APPLICATION變量里面刪除這個(gè)顯示過(guò)的廣告ID,下次就不會(huì)顯示這個(gè)廣告條了.直到所有的廣告條都顯示過(guò)以后,如果APPLICATION變量為空了,重新查詢數(shù)據(jù)庫(kù),調(diào)取所有的廣告ID,,,一直這樣循環(huán)下去.
提示一下:把上面保存一個(gè)文件改上你自己的數(shù)據(jù)庫(kù)行了.顯示廣告,廣告條URL轉(zhuǎn)向都在這個(gè)文件里面.
請(qǐng)注意這個(gè)變量:Application.AD ,這是個(gè)應(yīng)用程序變量,我把他定義成一個(gè)字符串,在CF字符串里面可以這樣 Application.AD="I'm wait" 也可以這樣 Application.AD=" 1 2 3 4 5 6 7 9",我這廣告就是用后面這個(gè)
再說(shuō)說(shuō)這個(gè)比喻:例如我是第一次訪問(wèn).就調(diào)用Application.AD="1" 然后刪除這個(gè)Application.AD="1" 下次就只剩下:Application.AD=" 2 3 4 5 6 7 9" 一次少一個(gè),就這實(shí)現(xiàn)了輪換效果.當(dāng)然,一直到全部顯示完,然后重新查詢數(shù)據(jù)庫(kù),提取所有廣告ID.放到Application.AD這個(gè)字符串里面
注意看這句:
<CFIF ListLen(Application.AD) EQ 0>
意思就是:如果我這個(gè)Application.AD 長(zhǎng)度為0了,就重新查詢數(shù)據(jù)庫(kù)然后把查詢結(jié)果放在Application.AD變量里面.注意.要測(cè)試列表的長(zhǎng)度不能用LEN(),而是用專門測(cè)試列表長(zhǎng)度的函數(shù)ListLen
<cfquery name="getID" datasource="#DSN#">
select adid from ad
</cfquery>
<CFSET Application.AD = ValueList(getID.ADID)>
如果,還有沒(méi)有顯示完一次輪換,那肯定不是等于0,那就不會(huì)重新查詢數(shù)據(jù)庫(kù).
至于得到第一個(gè)字符,可以用
<CFSET ThisAdID = ListGetAt(Application.AD, 1)>
然后刪除這個(gè).下次就輪到下個(gè)了.
<CFSET Application.AD = ListDeleteAt(Application.AD, 1)>
重點(diǎn)就是這些,至于下面那些更新顯示次數(shù),和計(jì)數(shù)顯示次數(shù),都是普通的CF代碼.沒(méi)什么特別的.
CF里面沒(méi)有提供象ASP里那樣的廣告組件,但是這并不能說(shuō)明就不能做出功能強(qiáng)大的廣告系統(tǒng),這里我放上一個(gè)簡(jiǎn)單的廣告輪換系統(tǒng),也是我CCF論壇里面用的.功能,有顯示次數(shù)和點(diǎn)擊次數(shù).在這基礎(chǔ)上擴(kuò)展比較容易,可以分類顯示,下面的代碼只是顯示 大廣告條.只是想拋磚引玉,大家舉一反三,就能做出功能更加強(qiáng)大的廣告系統(tǒng)出來(lái).
<!--- 判斷是否有地址傳遞 --->
<CFIF NOT IsDefined("URL.ADID")>
<!--- 默認(rèn)為顯示廣告 --->
<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>
<!--- 更新顯示次數(shù) --->
<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>
<!--- 如果有傳遞有參數(shù) --->
<cfquery name="gotoURL" datasource="#DSN#">
SELECT ADID,URL,CLICK FROM AD
WHERE ADID='#URL.ADID#'
</cfquery>
<!--- 點(diǎn)擊數(shù)加1 --->
<CFSET ADCLICK=GOTOURL.CLICK+1>
<CFQUERY DATASOURCE="#DSN#" name="UPDATECLICK">
UPDATE AD
SET CLICK='#ADCLICK#'
WHERE ADID='#URL.ADID#'
</CFQUERY>
<!--- 轉(zhuǎn)向廣告鏈接地址 --->
<cfoutput query="gotoURL">
<SCRIPT LANGUAGE="JavaScript">
self.location ='#URL#';
</SCRIPT>
</cfoutput>
</CFIF>
代碼拷貝框
以下是引用片段:
<!--- 判斷是否有地址傳遞 --->
<CFIF NOT IsDefined("URL.ADID")>
<!--- 默認(rèn)為顯示廣告 --->
<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>
<!--- 更新顯示次數(shù) --->
<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>
<!--- 如果有傳遞有參數(shù) --->
<cfquery name="gotoURL" datasource="#DSN#">
SELECT ADID,URL,CLICK FROM AD
WHERE ADID='#URL.ADID#'
</cfquery>
<!--- 點(diǎn)擊數(shù)加1 --->
<CFSET ADCLICK=GOTOURL.CLICK+1>
<CFQUERY DATASOURCE="#DSN#" name="UPDATECLICK">
UPDATE AD
SET CLICK='#ADCLICK#'
WHERE ADID='#URL.ADID#'
</CFQUERY>
<!--- 轉(zhuǎn)向廣告鏈接地址 --->
<cfoutput query="gotoURL">
<SCRIPT LANGUAGE="JavaScript">
self.location ='#URL#';
</SCRIPT>
</cfoutput>
</CFIF>
GAME OVER
這廣告是改自BEN FORTA的教程的.他介紹的廣告條制作方法原理都差不多,但是功能少的可憐,不能URL轉(zhuǎn)向.不能記錄顯示次數(shù)和點(diǎn)擊次數(shù),所以我就改了他,自己加了些功能在里面.
原理:把廣告數(shù)據(jù)放在一個(gè)數(shù)據(jù)庫(kù)的表里面,一次提取所有的廣告編號(hào)(ID),把這ID存放在一個(gè)APPLICATION變量里面,我顯示一個(gè),就從這個(gè)APPLICATION變量里面刪除這個(gè)顯示過(guò)的廣告ID,下次就不會(huì)顯示這個(gè)廣告條了.直到所有的廣告條都顯示過(guò)以后,如果APPLICATION變量為空了,重新查詢數(shù)據(jù)庫(kù),調(diào)取所有的廣告ID,,,一直這樣循環(huán)下去.
提示一下:把上面保存一個(gè)文件改上你自己的數(shù)據(jù)庫(kù)行了.顯示廣告,廣告條URL轉(zhuǎn)向都在這個(gè)文件里面.
請(qǐng)注意這個(gè)變量:Application.AD ,這是個(gè)應(yīng)用程序變量,我把他定義成一個(gè)字符串,在CF字符串里面可以這樣 Application.AD="I'm wait" 也可以這樣 Application.AD=" 1 2 3 4 5 6 7 9",我這廣告就是用后面這個(gè)
再說(shuō)說(shuō)這個(gè)比喻:例如我是第一次訪問(wèn).就調(diào)用Application.AD="1" 然后刪除這個(gè)Application.AD="1" 下次就只剩下:Application.AD=" 2 3 4 5 6 7 9" 一次少一個(gè),就這實(shí)現(xiàn)了輪換效果.當(dāng)然,一直到全部顯示完,然后重新查詢數(shù)據(jù)庫(kù),提取所有廣告ID.放到Application.AD這個(gè)字符串里面
注意看這句:
<CFIF ListLen(Application.AD) EQ 0>
意思就是:如果我這個(gè)Application.AD 長(zhǎng)度為0了,就重新查詢數(shù)據(jù)庫(kù)然后把查詢結(jié)果放在Application.AD變量里面.注意.要測(cè)試列表的長(zhǎng)度不能用LEN(),而是用專門測(cè)試列表長(zhǎng)度的函數(shù)ListLen
<cfquery name="getID" datasource="#DSN#">
select adid from ad
</cfquery>
<CFSET Application.AD = ValueList(getID.ADID)>
如果,還有沒(méi)有顯示完一次輪換,那肯定不是等于0,那就不會(huì)重新查詢數(shù)據(jù)庫(kù).
至于得到第一個(gè)字符,可以用
<CFSET ThisAdID = ListGetAt(Application.AD, 1)>
然后刪除這個(gè).下次就輪到下個(gè)了.
<CFSET Application.AD = ListDeleteAt(Application.AD, 1)>
重點(diǎn)就是這些,至于下面那些更新顯示次數(shù),和計(jì)數(shù)顯示次數(shù),都是普通的CF代碼.沒(méi)什么特別的.
相關(guān)文章
ColdFusionMX 編程指南 基礎(chǔ)管理操作以及入門程
ColdFusionMX 編程指南 基礎(chǔ)管理操作以及入門程...2007-03-03ColdFusion MX 遠(yuǎn)程服務(wù)實(shí)例入門教程
ColdFusion MX 遠(yuǎn)程服務(wù)實(shí)例入門教程...2007-03-03ColdFusionMX 編程指南 ColdFusionMX編程入門
ColdFusionMX 編程指南 ColdFusionMX編程入門...2007-03-03ColdFusionMX 編程指南 ColdFusionMX Basic Tag編程
ColdFusionMX 編程指南 ColdFusionMX Basic Tag編程...2007-03-03ColdFusionMX 編程指南 ColdFusionMX中的循環(huán)
ColdFusionMX 編程指南 ColdFusionMX中的循環(huán)...2007-03-03