发新话题
打印

Z-Blog的RSS优化Better Feed for 1.6

Z-Blog的RSS优化Better Feed for 1.6



  我开发的这个Z-Blog的Better Feed插件的主要功能是扩展现有Z-Blog生成的Feed的内容。
  开发这个插件的起因很偶然,因为前几天我在网上看到Wordpress的Better Feed插件,非常羡慕这个功能(Wordpress的好用插件可真多啊),于是手开始发痒,也做一个类似的插件,应用到我目前使用的Z-Blog系统上。
  目前主要做的功能是在Feed上增加“相关文章”功能。由于我的Feed是使用全文RSS输出,因此损失了不少Web流量,不过,如果在Feed的功能上进行一些扩展和优化,不但可以有利于读者更全面了解文章内容,还可以弥补损失的流量,做到了双赢。
  首先的功能是根据文章的内容,在Feed底部增加一个“相关文章”的功能,这样有兴趣的读者可以很方便地阅读相关内容的文章。
  其次的功能是在Feed底部增加“发表评论”的链接,这样,如果读者看到这篇文章,并且想要发表自己的意见的时候,可以点这个链接进去留言。(为了方便FeedBurner统计点击数,这个链接我暂时没加,有兴趣的可以自己添加一下)
  再次,做为预留功能,我还可以在Feed里面增加广告功能,显示和内容相关的匹配文字广告。
  因此我相信,实现了这些功能之后,做为全文RSS输出的不少缺点就都解决了,这样,很多人就更愿意使用全文RSS输出,方便读者,也不会对自己造成太大冲击。  
  具体的修改方法是,对于Z-Blog 1.6,打开c_system_event.asp文件,找到Function ExportRSS()函数,如果是全文RSS,就将objArticle.HtmlContent替换为objArticle.HtmlContent+getRelateList(objArticle.ID,objArticle.Tag),如果是摘要输出,则替换objArticle.HtmlIntro。最后,在c_system_event.asp文件尾部加入以下代码即可。
'*********************************************************
' 目的:相关文章的生成,用于优化Feed
'*********************************************************
Function getRelateList(intID,strTag)
If (intID=0) Then Exit Function
If strTag<>"" Then
Dim strCC_Count,strCC_ID,strCC_Name,strCC_Url,strCC_PostTime,strCC_Title
Dim strCC
Dim i
Dim j
Dim objRS
Dim strSQL
Dim strOutput
strOutput=""
Set objRS=Server.CreateObject("ADODB.Recordset")
strSQL="SELECT top 10  [log_ID],[log_Tag],[log_CateID],[log_Title],[log_Intro],[log_Level],[log_AuthorID],[log_PostTime],[log_Url] FROM [blog_Article] WHERE ([log_Level]>2) AND [log_ID]<>"& intID &" "
Dim aryTAGs
If InStr(strTag,"}{") > 0 Then
  aryTAGs = Split(strTag,"}{")
Else
  ReDim aryTAGs(0)
  aryTAGs(0) = strTag
End If
strSQL = strSQL & " AND ("
For j = 0 To UBound(aryTAGs)
  If Not (IsNull(aryTAGs(j)) Or IsEmpty(aryTAGs(j)) Or aryTAGs(j) = "" Or Len(aryTAGs(j)) < 1) Then
   aryTAGs(j) = Replace(Replace(aryTAGs(j),"}",""),"{","")
   If IsNumeric(aryTAGs(j)) Then
    If j > 0 Then strSQL = strSQL & " OR "
    strSQL = strSQL & "([log_Tag] Like '%{"&aryTAGs(j)&"}%')"
   End If
  End If
Next
strSQL = strSQL & ")"
strSQL = strSQL + " ORDER BY [log_PostTime] DESC "
Set objRS=Server.CreateObject("ADODB.Recordset")
objRS.CursorType = adOpenKeyset
objRS.LockType = adLockReadOnly
objRS.ActiveConnection=objConn
objRS.Source=strSQL
objRS.Open()
If (not objRS.bof) And (not objRS.eof) Then
   For i=1 To 5 '相关文章数目,可自行设定
    strCC_Count=strCC_Count+1
    strCC_ID=objRS("log_ID")
    strCC_Url=objRS("log_Url")
    strCC_PostTime=objRS("log_PostTime")
    strCC_Title=objRS("log_Title")
    Application.Lock
    strCC=Application(ZC_BLOG_CLSID & "TEMPLATE_ARTICLE_Mutuality")
    Application.UnLock
    If IsNull(strCC_Url) Or IsEmpty(strCC_Url) Or strCC_Url="" Then
    strCC_Url=strCC_ID
    end if
    strCC=Replace(strCC,"<#article/mutuality/id#>",strCC_ID)
    strCC=Replace(strCC,"<#article/mutuality/url#>",ZC_BLOG_HOST & ZC_STATIC_DIRECTORY & "/" & CStr(strCC_Url))
    strCC=Replace(strCC,"<#article/mutuality/posttime#>",strCC_PostTime)
    strCC=Replace(strCC,"<#article/mutuality/name#>",strCC_Title)
    strOutput=strOutput & strCC
  objRS.MoveNext
  If objRS.eof Then Exit For
   Next
End if
objRS.Close()
Set objRS=Nothing
End If
strOutput=Replace(strOutput,vbCrlf,"")
getRelateList="<br/>----<br/><br/>相关文章:<ul>" + strOutput + "</ul>  "
End Function

月光博客 - 专注于互联网络和搜索引擎行业的原创IT评论博客。

TOP

你又有新作品,多谢分享

TOP

此修改的具体效果,可以参见这个RSS地址  http://feeds.feedburner.com/williamlong

月光博客 - 专注于互联网络和搜索引擎行业的原创IT评论博客。

TOP

使用了,效果不错

TOP

为了加一个评论连接,花了2个小时

Long大哥省事了,我忙了,服务器抓狂了,连500的“未知错误”都出来了。改了一下午,总算完成了。方便一下大家,把这个东西帖出来
原有函数过程改为
'*********************************************************
' 目的:相关文章和增加评论连接的生成,用于优化Feed和增加评论连接
'*********************************************************
Function getRelateList(intID,strTag,strTitle,strURL)

If (intID=0) Then Exit Function
If strTag<>"" Then

Dim strCC_Count,strCC_ID,strCC_Name,strCC_Url,strCC_PostTime,strCC_Title
Dim strCC
Dim i
Dim j
Dim objRS
Dim strSQL
Dim strOutput

strOutput=""
Set objRS=Server.CreateObject("ADODB.Recordset")

strSQL="SELECT top 10  [log_ID],[log_Tag],[log_CateID],[log_Title],[log_Intro],[log_Level],[log_AuthorID],[log_PostTime],[log_Url] FROM [blog_Article] WHERE ([log_Level]>2) AND [log_ID]<>"& intID &" "

Dim aryTAGs
If InStr(strTag,"}{") > 0 Then
  aryTAGs = Split(strTag,"}{")
Else
  ReDim aryTAGs(0)
  aryTAGs(0) = strTag
End If
strSQL = strSQL & " AND ("
For j = 0 To UBound(aryTAGs)
  If Not (IsNull(aryTAGs(j)) Or IsEmpty(aryTAGs(j)) Or aryTAGs(j) = "" Or Len(aryTAGs(j)) < 1) Then
   aryTAGs(j) = Replace(Replace(aryTAGs(j),"}",""),"{","")
   If IsNumeric(aryTAGs(j)) Then
    If j > 0 Then strSQL = strSQL & " OR "
    strSQL = strSQL & "([log_Tag] Like '%{"&aryTAGs(j)&"}%')"
   End If
  End If
Next
strSQL = strSQL & ")"
strSQL = strSQL + " ORDER BY [log_PostTime] DESC "

Set objRS=Server.CreateObject("ADODB.Recordset")
objRS.CursorType = adOpenKeyset
objRS.LockType = adLockReadOnly
objRS.ActiveConnection=objConn
objRS.Source=strSQL
objRS.Open()
If (not objRS.bof) And (not objRS.eof) Then

   For i=1 To 5 '相关文章数目,可自行设定

    strCC_Count=strCC_Count+1
    strCC_ID=objRS("log_ID")
    strCC_Url=objRS("log_Url")
    strCC_PostTime=objRS("log_PostTime")
    strCC_Title=objRS("log_Title")

    Application.Lock
    strCC=Application(ZC_BLOG_CLSID & "TEMPLATE_ARTICLE_Mutuality")
    Application.UnLock

    If IsNull(strCC_Url) Or IsEmpty(strCC_Url) Or strCC_Url="" Then
    strCC_Url=strCC_ID
    end if

    strCC=Replace(strCC,"<#article/mutuality/id#>",strCC_ID)
    strCC=Replace(strCC,"<#article/mutuality/url#>",ZC_BLOG_HOST & ZC_STATIC_DIRECTORY & "/" & CStr(strCC_Url))
    strCC=Replace(strCC,"<#article/mutuality/posttime#>",strCC_PostTime)
    strCC=Replace(strCC,"<#article/mutuality/name#>",strCC_Title)

    strOutput=strOutput & strCC

  objRS.MoveNext
  If objRS.eof Then Exit For
   Next

End if

objRS.Close()
Set objRS=Nothing

End If

strOutput=Replace(strOutput,vbCrlf,"")
getRelateList= "<br/><a href="""+strURL+"#comment"" target=""_blank"">《"+strTitle+"》这篇文章挺有意思的,我也想来评论两句</a>"
IF strOutput<>"" then
getRelateList=  getRelateList+"<br/>----<br/>相关文章:<ul>" + strOutput + "</ul>  "
end if


End Function

------------------------------------
打开c_system_event.asp文件
找到Function ExportRSS函数
把原有objArticle.HtmlIntro改为
objArticle.HtmlIntro+getRelateList(objArticle.ID,objArticle.Tag,objArticle.Title,objArticle.URL)
把原有objArticle.HtmlContent改为
objArticle.HtmlContent+getRelateList(objArticle.ID,objArticle.Tag,objArticle.Title,objArticle.URL)

当然了,主要是最后几行的改动,其实很简单的,只是我比较笨-_- 预览效果和LONG大哥的一样。
UPDATA:1.7正式版后此方法已经不可用,1.7正式版改法请见http://bbs.rainbowsoft.org/viewthread.php?tid=11793

[ 本帖最后由 Zx.MYS 于 2007-2-7 16:12 编辑 ]

TOP

回复 #5 Zx.MYS 的帖子

不错,试了一下。是不是把帖子编辑一下,最后替换的两段代码有换行,直接粘贴过去就会导致错误,后台的文件管理都没法用了,不得不下载了文件来改。恐怕还会有人遇到麻烦的。

TOP

Er....改好了,不知道为什么复制到这里就有换行了 而且复制到我的Blog上又莫名其妙的多了_fcksavedurl。

TOP

发新话题