z-blog是一款不错的个人用博客建站程序,我的个人博客http://www.3wbe.be就是用的z-blog,后来升级到z-blog plus目前是z-blog plus 1.5 Build 60924。
这一版本有引用关键字过滤功能,但是需要自己去增加要过滤的关键字,而垃圾引用的关键字何止成千上万啊,所以用这种方法并不能防止垃圾引用的产生。几天下来,可能博客中的垃圾引用就有上百条,z-blog的后台有引用管理,但是需要一条一条去删除,有一百条垃圾引用就需要删除一百次,麻烦死了。如果关闭引用功能,又觉得不妥。以前我采用的方法是,当垃圾引用增加到一定程序时,用ftp把数据库下载回来,删除垃圾引用后再上传回去。同时在引用关键字过滤中增加这些垃圾引用的关键字。这种方法删除挺快的,但是需要ftp,不如直接在web下来的方便。
前天给导师汇报完了上月的工作,这两天可以轻松两天了,于是决定自己增加批量删除垃圾引用的功能。
分析过程如下:
1、z-blog后台“引用管理”的链接为cmd.asp?act=TrackBackMng,于是打开cmd.asp,发现又转到了admin.asp,相关代码如下:
Case "TrackBackMng"
Call TrackBackMng()
...........
Function TrackBackMng
Response.Redirect "admin.asp?act=TrackBackMng&page=" & Request.QueryString("id") & "&searchtext=" & Server.URLEnCode(Request.QueryString("searchtext"))
End Function
End Function
2、打开admin.asp,发现是调用了函数ExportTrackBackList(),相关代码如下:
Case "TrackBackMng" Call ExportTrackBackList(Request.QueryString("page"))
用macromedia的文件夹搜索或者一一打开admin.asp的包含文件,发现这一函数在c_system_manage.asp中
3、打开c_system_manage.asp,找到function exporttrackbacklist
经过扩充改为以下代码(其中蓝色粗体的为增加部分,黑色的为原来代码)
<script language="JavaScript">
function dyj() {
for (var i=0;i<document.tcdel.tcid.length;i++) {
var e=document.tcdel.tcid[i];
e.checked=!e.checked;
}
}
</script>
function dyj() {
for (var i=0;i<document.tcdel.tcid.length;i++) {
var e=document.tcdel.tcid[i];
e.checked=!e.checked;
}
}
</script>
以上这一段放在文件最顶端
以下是Function ExportTrackBackList(intPage)中的修改
response.write "<table width=""100%"" cellspacing=""0"" cellpadding=""0"" border=""0""><tr><td valign=top>"
Response.Write "<table border=""1"" width=""100%"" cellspacing=""0"" cellpadding=""0"">"
Response.Write "<tr><td></td><td>"& ZC_MSG048 & ZC_MSG076 &"</td><td>"& ZC_MSG014 &"</td><td>"& ZC_MSG060 &"</td><td>"& ZC_MSG055
Response.Write "<tr><td></td><td>"& ZC_MSG048 & ZC_MSG076 &"</td><td>"& ZC_MSG014 &"</td><td>"& ZC_MSG060 &"</td><td>"& ZC_MSG055
&"</td><td>"& ZC_MSG063 &"</td></tr>"
objRS.Open("SELECT * FROM [blog_TrackBack] "& strSQL &" ORDER BY [tb_ID] DESC")
objRS.PageSize=ZC_MANAGE_COUNT
If objRS.PageCount>0 Then objRS.AbsolutePage = intPage
If (Not objRS.bof) And (Not objRS.eof) Then
For i=1 to objRS.PageSize
Response.Write "<tr>"
Response.Write "<td><input type='checkbox' disabled='true'></td>"
Response.Write "<td>" & objRS("log_ID") & "</td>"
Response.Write "<td><a title="""& objRS("tb_Title") &""" target=""_blank"" href="""&objRS("tb_Url")&""">" _fcksavedurl=""""&objRS("tb_Url")&""">"" _fcksavedurl=""""&objRS("tb_Url")&""">"" _fcksavedurl=""""&objRS("tb_Url")&""">"" _fcksavedurl=""""&objRS("tb_Url")&""">"" _fcksavedurl=""""&objRS("tb_Url")&""">"" _fcksavedurl=""""&objRS("tb_Url")&""">"" & Left(objRS("tb_Blog"),14)
Response.Write "<td><input type='checkbox' disabled='true'></td>"
Response.Write "<td>" & objRS("log_ID") & "</td>"
Response.Write "<td><a title="""& objRS("tb_Title") &""" target=""_blank"" href="""&objRS("tb_Url")&""">" _fcksavedurl=""""&objRS("tb_Url")&""">"" _fcksavedurl=""""&objRS("tb_Url")&""">"" _fcksavedurl=""""&objRS("tb_Url")&""">"" _fcksavedurl=""""&objRS("tb_Url")&""">"" _fcksavedurl=""""&objRS("tb_Url")&""">"" _fcksavedurl=""""&objRS("tb_Url")&""">"" & Left(objRS("tb_Blog"),14)
& "</a></td>"
Response.Write "<td><a href="""& ZC_BLOG_HOST & "view.asp?id=" & objRS("log_ID") & "#tb" & objRS("tb_ID") & """ target=""_blank"">" &
Response.Write "<td><a href="""& ZC_BLOG_HOST & "view.asp?id=" & objRS("log_ID") & "#tb" & objRS("tb_ID") & """ target=""_blank"">" &
Left(objRS("tb_Title"),12) & "</a></td>"
Response.Write "<td>" & Left(objRS("tb_Excerpt"),18) & "</td>"
Response.Write "<td align=""center""><a href=""cmd.asp?act=TrackBackDel&id=" & objRS("tb_ID") & "&log_id="& objRS("log_ID") &"""
Response.Write "<td>" & Left(objRS("tb_Excerpt"),18) & "</td>"
Response.Write "<td align=""center""><a href=""cmd.asp?act=TrackBackDel&id=" & objRS("tb_ID") & "&log_id="& objRS("log_ID") &"""
onclick='return window.confirm(""" & ZC_MSG058 & """);'>["& ZC_MSG063 &"]</a></td>"
Response.Write "</tr>"
Response.Write "</tr>"
objRS.MoveNext
If objRS.eof Then Exit For
If objRS.eof Then Exit For
Next
End If
Response.Write "</table>"
Response.Write "</table>"
response.write "</td><td valign=top>"
Response.Write "<form method=""post"" action="""" name=""tcdel"">"
response.write "<table border=""1"" width=""100%"" cellspacing=""0"" cellpadding=""0"">"
Response.Write "<tr><td><a href='javascript:dyj()'>选择</a></td></tr>"
If (Not objRS.bof) Then
objrs.movefirst
For i=1 to objRS.PageSize
Response.Write "<tr>"
Response.Write "<td><input type='checkbox' name='tcid' value="&objRS("tb_id")&"></td>"
Response.Write "</tr>"
objRS.MoveNext
If objRS.eof Then Exit For
Next
end if
response.write "</table></td></tr></table>"
Response.Write "<p><input class=""button"" type=""submit"" value=""删除所选引用"" id=""tbdel"" name=""tbdel""/></p>"
Response.Write "</form>"
if request.form("tbdel")="删除所选引用" then
if request.form("tcid")="" then
response.write "<script>alert('未选择要删除的!');history.back(1)</script>"
response.end
else
objconn.execute("delete from blog_TrackBack where tb_id in("&request("tcid")&")")
objconn.close
set objconn=nothing
response.redirect "cmd.asp?act=TrackBackMng"
end if
end if
Response.Write "<form method=""post"" action="""" name=""tcdel"">"
response.write "<table border=""1"" width=""100%"" cellspacing=""0"" cellpadding=""0"">"
Response.Write "<tr><td><a href='javascript:dyj()'>选择</a></td></tr>"
If (Not objRS.bof) Then
objrs.movefirst
For i=1 to objRS.PageSize
Response.Write "<tr>"
Response.Write "<td><input type='checkbox' name='tcid' value="&objRS("tb_id")&"></td>"
Response.Write "</tr>"
objRS.MoveNext
If objRS.eof Then Exit For
Next
end if
response.write "</table></td></tr></table>"
Response.Write "<p><input class=""button"" type=""submit"" value=""删除所选引用"" id=""tbdel"" name=""tbdel""/></p>"
Response.Write "</form>"
if request.form("tbdel")="删除所选引用" then
if request.form("tcid")="" then
response.write "<script>alert('未选择要删除的!');history.back(1)</script>"
response.end
else
objconn.execute("delete from blog_TrackBack where tb_id in("&request("tcid")&")")
objconn.close
set objconn=nothing
response.redirect "cmd.asp?act=TrackBackMng"
end if
end if
其中Response.Write "<td><input type='checkbox' disabled='true'></td>"只是为了两个表格的完全对齐,无意义
为什么不采用一个表单的方法呢,因为原来的表单method为get,不能获取表单信息,如果将get更改为post后会影响原来的“搜索关键字”功能,要改动的地方就多了。所以采取变通的方法,再设置一个表单tcdel,method为post,原来的表单放在增加的表格的一个单元格中,新增加的表单放在增加的表格的另外一个单元格中,为了两个单元格中的内容完全对齐多加了句Response.Write "<td><input type='checkbox' disabled='true'></td>",
形式如下:

原来的表单 | 增加的表单 |
效果如下:

这种方法可能较笨,增加了对数据库的操作,会影响速度。如果你有更好的方法,欢迎交流,如果有什么错误,欢迎指正。
评论列表:
有hack要通知我啊,嘿嘿,不愿意将代码加入官方版请Mail我……