產品詳情頁調用相關產品最多見的應用就是裝飾公司網站,設計師頁面要求調取設計師作過的案例。aspcms自己有這個功能,但不能徹底符合要求,看代碼javascript
{aspcms:content sort={aspcms:sortid} num=10 order=order} <a href='[content:link]' > <img src='[content:pic]' /> </a> <a href="[content:link]">[content:title len=12]</a> {/aspcms:content}
這個只能讀取指定欄目的相關產品,把每一個設計師作設置成欄目很顯然不太現實,這種狀況下就只能改程序了,本人這裏作了個接口,放在根目錄api文件夾下html
<!--#include file="../inc/AspCms_SettingClass.asp" --> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <% Function VbsUnEscape(str) Dim x x=InStr(str,"%") Do While x>0 VbsUnEscape=VbsUnEscape&Mid(str,1,x-1) If LCase(Mid(str,x+1,1))="u" Then VbsUnEscape=VbsUnEscape&ChrW(CLng("&H"&Mid(str,x+2,4))) str=Mid(str,x+6) Else VbsUnEscape=VbsUnEscape&Chr(CLng("&H"&Mid(str,x+1,2))) str=Mid(str,x+3) End If x=InStr(str,"%") Loop VbsUnEscape=VbsUnEscape&str End Function %> <% dim desginer,res desginer = VbsUnEscape(Request.Form("des")) Function makeList(desginer) dim rs set rs =conn.exec("select * from {prefix}Content where ContentStatus=1 and IsRecommend=1 and P_author='"&desginer&"'","r1") res = "[" do While not rs.eof res = res & "{" res = res & """ContentID"":" & rs("ContentID")&"," res = res & """title"":""" & rs("title")&"""," res = res & """IndexImage"":""" & rs("IndexImage") rs.MoveNext if not rs.eof then res = res & """}," else res = res & """}" end if loop res = res & "]" rs.close : set rs=nothing makeList = res End Function %> <% response.Write makeList(desginer) %>
該api接受設計師參數,從數據庫中查出符合條件的數據,而後返回,前臺經過ajax獲取(因爲ajax不支持GB2312,遇到中文就亂碼,因此發送ajax請求前先對參數進行編碼,而後再解碼)java
var $related = $(".related");//相關產品容器 var desginer = $(".related-title").attr("data-author");//查詢參數 console.log(desginer); $.post("/api/AspCms_Api.asp", {des: escape(desginer)}, function(res) { var works = JSON.parse(res.slice(res.indexOf("["), res.length)); var templateStr = "<ul class='related-item clearfix'>" works.forEach(function(item, index) { templateStr += "<li><a href='/content/?" + item.ContentID + ".html'><img src=" + item.IndexImage + "><span>" + item.title + "</span></a></li>" }); templateStr += "</ul>" $related.html(templateStr); })
前臺經過ajax獲取數據,並塞入容器ajax
後臺也要作一些設置,先到「內容維護」->「內容參數管理」欄目添加參數,這裏控件類型選擇單選,在備選內容中輸入設計師,錄入產品的時候記得給案例選擇設計師。這裏有個問題,若是再次編輯參數,「備選內容」區域是不顯示的,所以須要更改/_content/_Spec/AspCms_SpecEdit.asp?action=update&id=5文件sql
去掉display:none,並對控件類型作個判斷,不是全部狀況下「備選內容」都要顯示的數據庫
<script type="text/javascript"> if(<%=SpecControlType%>!==6){ document.getElementById("trSpecOptions").style.display="none"; } </script>
判斷SpecControlType字段,只有在單選的狀況下才顯示「備選內容」api
「備選內容」的值輸出由<%=SpecOptions%>改爲<%=decode(SpecOptions)%>,新建「內容參數」保存時會進行編碼,這裏要解碼。函數
最後一步,修改保存函數oop
Sub EditSpecSave dim sql,rsObj SpecField=filterPara(getForm("SpecField","post")) SpecID=filterPara(getForm("SpecID","post")) SpecOptions=filterPara(getForm("SpecOptions","post")) SpecDiversification=filterPara(getForm("SpecDiversification","post")) SpecControlType=filterPara(getForm("SpecControlType","post")) SpecName=filterPara(getForm("SpecName","post")) SpecCategory=filterPara(getForm("SpecCategory","post")) SpecOrder=filterPara(getForm("SpecOrder","post")) SpecNotNull=filterPara(getForm("SpecNotNull","post")) SpecOptions = encode(SpecOptions)//對SpecOptions進行編碼 if SpecNotNull = "on" then SpecNotNull = true else SpecNotNull = false end if sql = "select * from {prefix}SpecSet where SpecID="&SpecID Set rsObj=conn.Exec(sql,"r1") sql = "update {prefix}SpecSet set SpecName='"&SpecName&"',SpecCategory='"&SpecCategory&"',SpecOptions='"&SpecOptions&"',SpecOrder="&SpecOrder&",SpecNotNull="&SpecNotNull&" where SpecID="&SpecID //sql語句再也不提交SpecControlType,默認會再次提交的,從而致使SpecControlType變成空 conn.Exec sql,"exe" alertMsgAndGo "修改爲功","AspCms_Spec.asp" End Sub
這樣要添加設計師時就能夠直接在「內容參數管理」界面添加了post