前天开始做了个手机主题的网站,观察了dede,风讯,动易,新云等CMS系统,其实也不用说那么多,本人最喜欢用的也就两个:风讯和dede。Dede功能这里就不用多说了,相信是人都知道其强大!可是后来还是选择的风讯。
首先分析一下需求吧,手机主题站当然就涉及到手机品牌和手机型号这两个大类,手机品牌就做成栏目分类就ok了,这个无论那个CMS都能做到。手机型号本来想做成手机品牌下面的二级栏目,但是后来发现出问题了。因为一个手机主题可以属于多个品牌手机的多个机型,但是在CMS系统里面,一般一篇文章只能属于一个栏目,最多就是两个栏目,dede有副栏目,但是远远不够。想一下主题A同时属于诺基亚手机,三星手机,索爱手机甚至更多……那该怎么办?直接用现有的CMS是绝对不能做出一个好站来的。
只有去修改CMS,做二次开发,才能做出比较好的主题站来。在下不太懂php,而且dede太强大,修改起来飞车麻烦!!!所以就选择了风讯,对风讯做二次开发。
我仔细观察了一下风讯的栏目和专题结构,虽然可以把手机品牌做成分类栏目,再把手机机型做成专题,这样发布一个主题文章就可以从属于多个专题,但是无法从属于多个手机品牌,因为每个主题文章只能从属一个栏目。我又想到了另外一个办法,那就是在同一个主题从属于多个栏目的时候,在其他栏目新建标题文章,然后指向第一个主题文章地址,这样虽然比较麻烦,但只有这样才能关联起来。请看关系图:
主题文章A ——》栏目A (诺基亚)——》专题机型1,专题机型2,专题机型3
标题主题文章B(地址指向:主题文章A)——》栏目B(三星)——》专题机型1,专题机型2,专题机型3。
注:——》表示从属于改分类下的文章。
可是问题又出现了,在发布文章的时候,选择专题,系统调出的是整站的所有专题。我们要的效果应该是:我为诺基亚栏目添加内容,调出的是诺基亚的手机机型专题列表,而不是所有机型列表。但是风讯的专题原本是跟栏目无关联的,从这里开始就需要修改风讯系统了,接下来看看我是怎么修改的吧!
第一步:添加数据库字段,Foosun_Data目录下面有个FS400.mdb,打开找到FS_NS_Special表,这个表格是存储风讯专题数据的,添加一个字段:ClassID。
<tr>
<td class="hback"><div align="right">所属分类:</div></td>
<td class="hback">
<select name="newsCat" id="newsCat">
<option value="0" selected>请选择分类</option>
<%
Set obj_Class_Rs = server.CreateObject(G_FS_RS)
obj_Class_Rs.open "select ID,ClassName from FS_NS_NewsClass where ReycleTF=0",Conn,1,3
While not obj_Class_Rs.eof
%>
<option value="<%=obj_Class_Rs("ID")%>" <% If Class_ID = obj_Class_Rs("ID") Then Response.Write "selected" %>><%=obj_Class_Rs("ClassName")%></option>
<%
obj_Class_Rs.MoveNext
Wend
obj_Class_Rs.close
set obj_Class_Rs = nothing
%>
</select>
</td>
</tr>
第三步:找到Special_Save.asp文件
在第22行尾部增加一个属性Class_ID。第35行下面增加代码,以获取提交classid
Class_ID = NoSqlHack(request.Form("newsCat"))
最后到第116行添加代码
obj_Save_Rs("ClassID") = Class_ID
将分类id添加到数据库记录。这样专题就可以和栏目关联起来了。但是这样还不够,还没达到要求,我们是要方便添加文章,可以减少工作量。还需要修改那些呢?呵呵,当然是添加文章的asp文件了。
第四步:在同样的目录下,找到News_add.asp文件。
在第10行的dim处尾巴加上,ClassID,新增一个变量。
第28行的查询语句
GetClassAdPicInfoSql="Select IsAdPic,AdPicWH,……
修改为GetClassAdPicInfoSql="Select ID,IsAdPic,AdPicWH,……,添加对ID的查询。
然后在第30行If Not GetClassAdPicInfoRs.Eof Then下面添加一行代码:
ClassID=GetClassAdPicInfoRs("ID"),将classid数据取出来。
找到第179行
将onClick="SelectSpecial();"修改为onClick="SelectSpecial(<%=ClassID%>);"
这个是为了将id传送到专题列表窗口,用于过滤掉非该栏目下的其他专题信息。鼠标转到该文件的680行,找到function SelectSpecial()函数,将这个函数改为:
function SelectSpecial(class_id),增加了class_id参数传递进来。
函数里有个语句
ReturnValue = OpenWindow('lib/SelectspecialFrame.asp,400,300,window);
修改为:
ReturnValue = OpenWindow('lib/SelectspecialFrame.asp?classID='+class_id,400,300,window);
到这里基本上快完成了,虽然代码很枯燥,但是多少还得学习一点,对于做个站来说是相当重要的!
第五步:在Admin/News/lib目录下找到SelectspecialFrame.asp这个文件。
在该文件顶部插入以下代码:
<%
Dim str_ClassID
str_ClassID = Request("classID")
%>
然后在第15行
<iframe id="LableList" src="SelectSpecial.asp"……></iframe>
改为
<iframe id="LableList" src="SelectSpecial.asp?classid=<%=str_ClassID%>"…></iframe>
将参数传送。
第六步:找到Admin/News/lib目录下的SelectSpecial.asp。
在第8行dim定义变量后面添加,classID变量。在第10行添加代码:
classID = Request("classid")
找到33行附近的查询语句
TypeSql = "Select SpecialCName,SpecialEName from FS_NS_Special where isLock=0
在后面添加查询条件,语句变为:
TypeSql = "Select SpecialCName,SpecialEName from FS_NS_Special where isLock=0 and classID="& classID
大功告成!这样进入到诺基亚手机栏目下添加文章,掉出来的就是诺基亚下面的所有机型,过滤掉了其他品牌的机型了,很爽吧!这样就轻松的把风讯的分类栏目和专题无缝连接起来了。
文章摘自:http://www.shouji263.com
本代码仅供学习参考之用,如有需要可联系我要源代码。