%
Dim Tags, Count, Position, Slide, Size, QueryString, refer
Dim TimeStamp, Current_Site, Current_Root, From_Site_Temp, From_Site
Dim IfDraft, NoCache, Force_Update, ValidAmount
Dim AryFitSize, TagTEMP
Tags = SafeRequest(3, "tags", 1, "", 0)
Count = SafeRequest(3, "count", 0, 0, 0)
Position = SafeRequest(3, "position", 1, "", 0)
Slide = SafeRequest(3, "slide", 0, 0, 0)
IfDraft = SafeRequest(3, "draft", 0, 0, 0)
NoCache = SafeRequest(3, "nocache", 0, 0, 0)
Force_Update = SafeRequest(3, "update", 0, 0, 0)
If Not InStr(Tags, "|") > 0 Then
Call JsError("")
End If
If Count = 0 Then
Count = 5
End If
If Len(Position) = 0 Then
Position = "footer"
End If
If Slide > 1 Then
Slide = 1
End If
If IfDraft > 1 Then
IfDraft = 1
End If
If NoCache > 1 Then
NoCache = 1
End If
If Force_Update > 1 Then
Force_Update = 1
End If
'得到请求的size
TagTEMP = Split(Tags, "|")
Size = TagTEMP(UBound(TagTEMP))
'验证size
AryFitSize = Array("1x1", "2x1", "2x0.5", "3x1")
If Not InArray(AryFitSize, Size) Then
Call JsError("")
End If
'得到请求的参数
QueryString = "tag"& Tags &"&count"& Count &"&position"& Position &"&slide"& Slide
'当前时间戳
TimeStamp = DatetoNum(Now())
'来源站点缩写
refer = Request.ServerVariables("HTTP_REFERER")
If Len(refer) > 0 Then
If Not InStr(refer, "panasonic.cn") > 0 And Not InStr(refer, "01media.cn") > 0 And Not InStr(refer, "61.129.85.4") > 0 Then
Call JsError("invalid from site")
End If
From_Site_Temp = Split(refer, "//")(1)
If InStr(From_Site_Temp, ".") > 0 Then
From_Site = Split(From_Site_Temp, ".")(0)
Else
From_Site = From_Site_Temp
End If
End If
'当前站点地址
Current_Site = Request.ServerVariables("SCRIPT_NAME")
Current_Root = "http://"& Request.ServerVariables("SERVER_NAME") & Left(Current_Site, InstrRev(Current_Site, "/") - 1)
'如果显示滑动图片则禁止缓存
If Slide = 1 Then
Response.Buffer = True
Response.ExpiresAbsolute = Date() - 365
Response.Expires = 0
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "No-Cache"
End If
If Len(From_Site) > 0 Then
Response.ContentType = "text/javascript"
Else
NoCache = 1
End If
'输出图片
If NoCache = 1 Or IfDraft = 1 Then
Response.Write Replace(Get_Icon_From_Database(), "{FROM_SITE}", From_Site)
Else
Response.Write Replace(Get_Icon_From_Cache(), "{FROM_SITE}", From_Site)
End If
Call closeDatabase()
'If ValidAmount < Count Then
' Dim EmailTitle, EmailBody
' EmailTitle = "banner数量不足"
' EmailBody = EmailBody &"banner数量不足,请求数量为"& Count &"个,实际数量为"& ValidAmount &"个,请求参数如下:"& vbCrLf
' EmailBody = EmailBody & Request.ServerVariables("QUERY_STRING")
'Call SendMail(EmailTitle, EmailBody, "linyong@01cosmos.com")
'End If
'========================================================
'从缓存中获取图片列表
'========================================================
Function Get_Icon_From_Cache()
Dim CacheInfo
Dim blnUpdateCache, strContent
CacheInfo = Query("SELECT val, lastupdate FROM "& TablePre &"caches WHERE querystring = '"& QueryString &"'")
If IsArray(CacheInfo) Then
If DateDiff("d", CacheInfo(1, 0), Now()) > 1 Or Force_Update = 1 Then
'如果更新时间超过1天或者强制更新缓存则重新读取数据
strContent = Get_Icon_From_Database()
Execute("DELETE FROM "& TablePre &"caches WHERE querystring = '"& QueryString &"'")
blnUpdateCache = True
Else
'否则直接输出缓存
strContent = CacheInfo(0, 0)
End If
Else
'缓存中没有找到记录则直接输出
strContent = Get_Icon_From_Database()
blnUpdateCache = True
End If
If blnUpdateCache And Len(From_Site) > 0 Then
Execute("INSERT INTO "& TablePre &"caches (querystring, val) VALUES ('"& QueryString &"', '"& Replace(strContent, "'", "''") &"')")
End If
Get_Icon_From_Cache = strContent
strContent = Empty
End Function
'========================================================
'重新读取Icon列表
'========================================================
Function Get_Icon_From_Database()
Dim Box_Width, Box_Height, RandClass
Dim IconListArray, InTagListAray, Ary_NotInTags, Ary_Character
Dim strContent, strSQL, Sql_InTags, Sql_Where_InTags, Sql_NoTag
'根据图片得到div容器的宽高
Box_Width = Split(Size, "x")(0)
Box_Height = Split(Size, "x")(1)
If Not IsNumeric(Box_Width) Or Not IsNumeric(Box_Height) Then
Box_Width = 0
Box_Height = 0
End If
Box_Width = Box_Width * 110 + (Box_Width - 1) * 10
Box_Height = Box_Height * 110 + (Box_Height - 1) * 10
'得到tag数组
ReDim Preserve TagTemp(UBound(TagTEMP) - 1)
Tags = Join(TagTEMP, "|")
'得到需要的tag
For i = 0 To UBound(TagTEMP)
If Left(TagTEMP(i), 1) <> "!" Then
Sql_InTags = Sql_InTags &"'"& TagTEMP(i) &"', "
Else
Sql_NoTag = Sql_NoTag &"'"& Right(TagTEMP(i), Len(TagTEMP(i)) - 1) &"', "
End If
Next
If Len(Sql_InTags) > 0 Then
If Right(Sql_InTags, 2) = ", " Then
Sql_InTags = Left(Sql_InTags, Len(Sql_InTags) - 2)
End If
Ary_Character = Split("a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z", ",")
InTagListAray = Query("SELECT tagid FROM "& TablePre &"tags WHERE tag IN("& Sql_InTags &")")
If IsArray(InTagListAray) Then
Sql_InTags = "SELECT iconid FROM (SELECT iconid, "
For i = 0 To UBound(InTagListAray, 2)
Sql_InTags = Sql_InTags & Ary_Character(i) &" = ISNULL(SUM(CASE tagid WHEN "& InTagListAray(0, i) &" THEN 1 END), 0)"
If i <> UBound(InTagListAray, 2) Then
Sql_InTags = Sql_InTags &", "
End If
Sql_Where_InTags = Sql_Where_InTags&" AND "& Ary_Character(i) &" = 1"
Next
Sql_InTags = Sql_InTags &" FROM "& TablePre &"icon_tags GROUP BY iconid) AS t WHERE 1 = 1"& Sql_Where_InTags
Else
Sql_InTags = ""
End If
End If
'得到不需要读取的tag
If Len(Sql_NoTag) > 0 Then
If Right(Sql_NoTag, 2) = ", " Then
Sql_NoTag = Left(Sql_NoTag, Len(Sql_NoTag) - 2)
End If
Sql_NoTag = " AND i.iconid NOT IN(SELECT iconid FROM "& TablePre &"icon_tags WHERE tagid IN(SELECT tagid FROM "& TablePre &"tags WHERE tag IN("& Sql_NoTag &")))"
End If
'读取图片
IconListArray = Query("SELECT TOP "& Count &" i.savepath, i.size, b.siteid, b.url, s.name, ISNULL(d.displayorder, 0) AS displayorder FROM "& TablePre &"icons i INNER JOIN "& TablePre &"bannerlist b ON i.bannerid = b.bannerid INNER JOIN "& TablePre &"sites s ON b.siteid = s.siteid LEFT JOIN (SELECT iconid, displayorder FROM "& TablePre &"displayorder WHERE tags = '"& Tags &"') d ON i.iconid = d.iconid WHERE i.size = '"& Size &"' AND b.starttime <= "& TimeStamp &" AND b.endtime >= "& TimeStamp & IIF(IfDraft = 0, " AND i.ifpublish = 1", "") & IIF(Len(Sql_InTags) > 0, " AND i.iconid IN("& Sql_InTags &")", "") & IIF(Len(Sql_NoTag) > 0, Sql_NoTag, "") &" ORDER BY displayorder ASC, i.iconid DESC")
If IsArray(IconListArray) Then
If Slide = 1 Then
'滑动图片的输出
'生成a标签id的随机字符串
RandClass = Rand(10)
'滑动a标签的容器
strContent = strContent &"document.write('');"
'调用远程js的function
strContent = strContent &"var MiniSite=new Object();MiniSite.Browser={ie:/msie/.test(window.navigator.userAgent.toLowerCase()),moz:/gecko/.test(window.navigator.userAgent.toLowerCase()),opera:/opera/.test(window.navigator.userAgent.toLowerCase())};MiniSite.JsLoader={load:function(sUrl,fCallback){var _script=document.createElement('script');_script.setAttribute('type','text/javascript');_script.setAttribute('src',sUrl);document.getElementsByTagName('head')[0].appendChild(_script);if(MiniSite.Browser.ie){_script.onreadystatechange=function(){if(this.readyState=='loaded'||this.readyState=='complete'){fCallback()}}}else if(MiniSite.Browser.moz){_script.onload=function(){fCallback()}}else{fCallback()}}};"
'加载jquery滑动插件
strContent = strContent &"MiniSite.JsLoader.load('"& Current_Root &"/js/portal-1.1.2-min.js', function(){"
'定义滑动图片数组
strContent = strContent &"$('#slide_"& RandClass &"').portal("& Box_Width + 10 &", "& Box_Height + 10 &", ["
For i = 0 To UBound(IconListArray, 2)
'strContent = strContent &"{src:"""& Current_Root &"/attachments/"& IconListArray(0, i) &""", url:"""& IconListArray(3, i) & IIF(InStr(IconListArray(3, i), "panasonic.cn") > 0 And Len(From_Site) > 0, IIF(InStr(IconListArray(3, i), "?") > 0, "&", "?") &"utm_source="& IconListArray(4, i) &"<{FROM_SITE}&utm_medium=GroupSites&utm_campaign="& IconListArray(4, i) &"<{FROM_SITE}-home-footer-graphic-"& IconListArray(1, i), "") &"""}"
strContent = strContent &"{src:"""& Current_Root &"/attachments/"& IconListArray(0, i) &""", url:"""& IconListArray(3, i) & """}"
If i <> UBound(IconListArray, 2) Then
strContent = strContent &", "
End If
Next
strContent = strContent &"], 'vertical')});"
Else
'普通图片的输出
strContent = strContent &"document.write('"
For i = 0 To UBound(IconListArray, 2)
'strContent = strContent &" 0 And Len(From_Site) > 0, IIF(InStr(IconListArray(3, i), "?") > 0, "&", "?") &"utm_source="& IconListArray(4, i) &"<{FROM_SITE}&utm_medium=GroupSites&utm_campaign="& IconListArray(4, i) &"<{FROM_SITE}-home-footer-graphic-"& IconListArray(1, i), "") &""" target=""_blank"">
"
strContent = strContent &"
"
Next
strContent = strContent &"');"
End If
'实际图片的数量
ValidAmount = UBound(IconListArray, 2)
Else
ValidAmount = 0
End If
Get_Icon_From_Database = strContent
strContent = Empty
End Function
'========================================================
'js输出错误信息
'========================================================
Sub JsError(Message)
Response.Write "document.write('"& Message &"');"
Response.End()
End Sub
%>