14
2006
11

z-blog中垃圾引用批量删除功能的增加

       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
          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 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
&"</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)
& "</a></td>"
                      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&amp;id=" & objRS("tb_ID") & "&log_id="& objRS("log_ID") &"""
onclick='return window.confirm(""" & ZC_MSG058 & """);'>["& ZC_MSG063 &"]</a></td>"
                    Response.Write "</tr>"
                    objRS.MoveNext
                    If objRS.eof Then Exit For
               Next
           End If
 
 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 "<td><input type='checkbox' disabled='true'></td>"只是为了两个表格的完全对齐,无意义
        为什么不采用一个表单的方法呢,因为原来的表单method为get,不能获取表单信息,如果将get更改为post后会影响原来的“搜索关键字”功能,要改动的地方就多了。所以采取变通的方法,再设置一个表单tcdel,method为post,原来的表单放在增加的表格的一个单元格中,新增加的表单放在增加的表格的另外一个单元格中,为了两个单元格中的内容完全对齐多加了句Response.Write "<td><input type='checkbox' disabled='true'></td>",
        形式如下:        
原来的表单 增加的表单
        效果如下:
        
        这种方法可能较笨,增加了对数据库的操作,会影响速度。如果你有更好的方法,欢迎交流,如果有什么错误,欢迎指正。
« 上一篇: 信息技术学习共同体终于可以访问... 下一篇: 换回到z-blog1.6... »
与此文相关的文章,有兴趣就接着看看吧:

 

评论列表:

1.Cloudream  2006-12-18 04:50:07 回复该评论
检查一下,然后放到下一版中。
有hack要通知我啊,嘿嘿,不愿意将代码加入官方版请Mail我……

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。