CF里面沒有提供象ASP里那樣的廣告組件,但是這并不能說明就不能做出功能強(qiáng)大的廣告系統(tǒng),這里我放上一個簡單的廣告輪換系統(tǒng),也是我CCF論壇里面用的.功能,有顯示次數(shù)和點(diǎn)擊次數(shù).在這基礎(chǔ)上擴(kuò)展比較容易,可以分類顯示,下面的代碼只是顯示 大廣告條.只是想拋磚引玉,大家舉一反三,就能做出功能更加強(qiáng)大的廣告系統(tǒng)出來.
<!--- 判斷是否有地址傳遞 ---> <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>
代碼拷貝框
[Ctrl+A 全部選擇 然后拷貝]
GAME OVER 這廣告是改自BEN FORTA的教程的.他介紹的廣告條制作方法原理都差不多,但是功能少的可憐,不能URL轉(zhuǎn)向.不能記錄顯示次數(shù)和點(diǎn)擊次數(shù),所以我就改了他,自己加了些功能在里面.
原理:把廣告數(shù)據(jù)放在一個數(shù)據(jù)庫的表里面,一次提取所有的廣告編號(ID),把這ID存放在一個APPLICATION變量里面,我顯示一個,就從這個APPLICATION變量里面刪除這個顯示過的廣告ID,下次就不會顯示這個廣告條了.直到所有的廣告條都顯示過以后,如果APPLICATION變量為空了,重新查詢數(shù)據(jù)庫,調(diào)取所有的廣告ID,,,一直這樣循環(huán)下去.
提示一下:把上面保存一個文件改上你自己的數(shù)據(jù)庫行了.顯示廣告,廣告條URL轉(zhuǎn)向都在這個文件里面.
請注意這個變量:Application.AD ,這是個應(yīng)用程序變量,我把他定義成一個字符串,在CF字符串里面可以這樣 Application.AD="I'm wait" 也可以這樣 Application.AD=" 1 2 3 4 5 6 7 9",我這廣告就是用后面這個 再說說這個比喻:例如我是第一次訪問.就調(diào)用Application.AD="1" 然后刪除這個Application.AD="1" 下次就只剩下:Application.AD=" 2 3 4 5 6 7 9" 一次少一個,就這實(shí)現(xiàn)了輪換效果.當(dāng)然,一直到全部顯示完,然后重新查詢數(shù)據(jù)庫,提取所有廣告ID.放到Application.AD這個字符串里面 注意看這句: <CFIF ListLen(Application.AD) EQ 0>
意思就是:如果我這個Application.AD 長度為0了,就重新查詢數(shù)據(jù)庫然后把查詢結(jié)果放在Application.AD變量里面.注意.要測試列表的長度不能用LEN(),而是用專門測試列表長度的函數(shù)ListLen <cfquery name="getID" datasource="#DSN#"> select adid from ad </cfquery>
<CFSET Application.AD = ValueList(getID.ADID)>
如果,還有沒有顯示完一次輪換,那肯定不是等于0,那就不會重新查詢數(shù)據(jù)庫.
至于得到第一個字符,可以用 <CFSET ThisAdID = ListGetAt(Application.AD, 1)> 然后刪除這個.下次就輪到下個了. <CFSET Application.AD = ListDeleteAt(Application.AD, 1)>
重點(diǎn)就是這些,至于下面那些更新顯示次數(shù),和計(jì)數(shù)顯示次數(shù),都是普通的CF代碼.沒什么特別的.
授權(quán)藍(lán)色經(jīng)典刊登,嚴(yán)禁轉(zhuǎn)載
出處:藍(lán)色理想
責(zé)任編輯:無意
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|