DBS独立服客服务

查看完整版本: better feeds 修改方案 for 1.7 Laputa

debugger 2007-2-7 02:54

better feeds 修改方案 for 1.7 Laputa

关于什么是better feeds 以及 better feeds 的1.6版本可参考这里:
[url=http://bbs.rainbowsoft.org/viewthread.php?tid=845&highlight=feed]http://bbs.rainbowsoft.org/viewthread.php?tid=845&highlight=feed[/url]
不过1.7版本下不能使用了,可行的修改方法如下:

打开c_system_event.asp文件,找到Function ExportRSS()函数,如果是全文RSS,就将objArticle.HtmlContent替换为objArticle.HtmlContent +getRelateList(objArticle.ID,objArticle.Tag),如果是摘要输出,则替换 objArticle.HtmlIntro。最后,在c_system_event.asp文件尾部加入以下代码即可。

[code]'*********************************************************
' 目的:相关文章的生成,用于优化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 &" "

   strSQL = strSQL & " AND ("

   Dim aryTAGs
   strTag=Replace(strTag,"}","")
   aryTAGs=Split(strTag,"{")

                        For j = LBound(aryTAGs) To UBound(aryTAGs)
                                If aryTAGs(j)<>"" Then
                                        strSQL = strSQL & "([log_Tag] Like '%{"&aryTAGs(j)&"}%')"
                                        If j=UBound(aryTAGs) Then Exit For
                                        If aryTAGs(j)<>"" Then strSQL = strSQL & " OR "
                                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 '相关文章数目,可自行设定
Dim objArticle
Set objArticle=New TArticle

If objArticle.LoadInfoByArray(Array(objRS("log_ID"),objRS("log_Tag"),objRS("log_CateID"),objRS("log_Title"),"","",objRS("log_Level"),objRS("log_AuthorID"),objRS("log_PostTime"),"","","",objRS("log_Url"),"")) Then

                                                strCC_Count=strCC_Count+1
                                                strCC_ID=objArticle.ID
                                                strCC_Url=objArticle.Url
                                                strCC_PostTime=objArticle.PostTime
                                                strCC_Title=objArticle.Title

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

                                                strCC=Replace(strCC,"<#article/mutuality/id#>",strCC_ID)
                                                strCC=Replace(strCC,"<#article/mutuality/url#>",strCC_Url)
                                                strCC=Replace(strCC,"<#article/mutuality/posttime#>",strCC_PostTime)
                                                strCC=Replace(strCC,"<#article/mutuality/name#>",strCC_Title)
      strOutput=strOutput & strCC
          
          end if
      Set objArticle=nothing
     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/>相关文章:<ul>" + strOutput + "</ul>  "

End Function
%>[/code]

如果想要加入评论也可以,可参考1.6版本下zx.mys的跟贴,最好其本人能补充一下,hoho

[[i] 本帖最后由 debugger 于 2007-3-3 00:00 编辑 [/i]]

Zx.MYS 2007-2-7 16:12

-_- 晕~"其本人在此"...还是不幸给你点到名了~:L
加评论链接的代码在此:
[code]
'*********************************************************
' 目的:优化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 &" "

   strSQL = strSQL & " AND ("

   Dim aryTAGs
   strTag=Replace(strTag,"}","")
   aryTAGs=Split(strTag,"{")

                        For j = LBound(aryTAGs) To UBound(aryTAGs)
                                If aryTAGs(j)<>"" Then
                                        strSQL = strSQL & "([log_Tag] Like '%{"&aryTAGs(j)&"}%')"
                                        If j=UBound(aryTAGs) Then Exit For
                                        If aryTAGs(j)<>"" Then strSQL = strSQL & " OR "
                                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 '相关文章数目,可自行设定
Dim objArticle
Set objArticle=New TArticle

If objArticle.LoadInfoByArray(Array(objRS("log_ID"),objRS("log_Tag"),objRS("log_CateID"),objRS("log_Title"),"","",objRS("log_Level"),objRS("log_AuthorID"),objRS("log_PostTime"),"","","",objRS("log_Url"),"")) Then

                                                strCC_Count=strCC_Count+1
                                                strCC_ID=objArticle.ID
                                                strCC_Url=objArticle.Url
                                                strCC_PostTime=objArticle.PostTime
                                                strCC_Title=objArticle.Title

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

                                                strCC=Replace(strCC,"<#article/mutuality/id#>",strCC_ID)
                                                strCC=Replace(strCC,"<#article/mutuality/url#>",strCC_Url)
                                                strCC=Replace(strCC,"<#article/mutuality/posttime#>",strCC_PostTime)
                                                strCC=Replace(strCC,"<#article/mutuality/name#>",strCC_Title)
      strOutput=strOutput & strCC
         
          end if
      Set objArticle=nothing
     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/><a href="""+strURL+"#comment"" target=""_blank"">《"+strTitle+"》这篇文章挺有意思的,我也想来评论两句</a>"
IF strOutput<>"" then
getRelateList=  getRelateList+"<br/>----<br/>相关文章:<ul>" + strOutput + "</ul>  "
end if
End Function
[/code]

打开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)

还有哦,我觉得把这种BETTER FEED叫做插件不太好,应该叫做源码修改.~

[[i] 本帖最后由 Zx.MYS 于 2007-3-10 00:20 编辑 [/i]]

hotsky 2007-2-28 23:07

有疑问

感谢二位老大的辛勤劳动 只是我在使用过程中遇到了一点小小的麻烦,就是在RSS阅读器里feed的相关文章是显示出来了,但生成的地址比如 [url]http://www.gandalf2006.com/post/13[/url],后面就少了.html,真是让人百思不得其解

debugger 2007-3-3 00:01

回复 #3 hotsky 的帖子

的确是这样,原文程序有点问题,现在已经修正,已经支持自定义目录和匿名路径下的相关文章生成,多谢提醒。

hotsky 2007-3-9 17:45

谢谢老大

asongzhang 2007-3-30 19:02

好,谢谢

liujinzhou 2007-4-1 21:04

十分感谢!

liujinzhou 2007-4-1 21:18

管理页面
HTTP 500 - 内部服务器错误

怎么回事啊??

liujinzhou 2007-4-1 21:33

从网页复制代码有空格,问题已解决,再次感谢楼主!

sanren 2007-5-25 17:52

用这段代码在rss 中显示的相关文章如何加入“只会在当前文章中列出比当前文章要早的文章链接”的机制?

Zx.MYS 2007-5-25 18:03

LS:本来就是这样的

sanren 2007-5-25 18:22

但我测试的时候,旧的文章下面,还是会显示比它更新的相关文章。
PS:刚刚看了一下MYS 的blog,也是同样的情况。

[[i] 本帖最后由 sanren 于 2007-5-25 19:26 编辑 [/i]]

Zx.MYS 2007-5-26 11:46

把里面
[code]
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 &" "
[/code]
一句改成
[code]
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 &" "
[/code]

sanren 2007-5-28 18:31

非常感谢。

jason5ng32 2007-6-21 20:06

实在太感谢了!!!!!!!!!:loveliness:

qinai 2007-8-28 17:25

这里有个小BUG

打开c_system_event.asp文件,找到Function ExportRSS()函数,如果是全文RSS,就将objArticle.HtmlContent替换为objArticle.HtmlContent +getRelateList(objArticle.ID,objArticle.Tag),如果是摘要输出,则替换 objArticle.HtmlIntro。最后,在c_system_event.asp文件尾部加入以下代码即可。

上面这段话中,如果摘要输出应该替换成:objArticle.HtmlIntro +getRelateList(objArticle.ID,objArticle.Tag)

jason5ng32 2007-9-5 13:06

按照这个代码,得到的相关文章之间都有“<p></p>”标记,请问如何去掉?

debugger 2007-10-17 19:07

回复 17# 的帖子

换行是必要的。

kola110 2008-1-4 11:59

恩,很好,对1.8有用否?加上后发现没有起作用。。

szichuan 2008-1-10 21:11

我改好了,哈哈

butwho 2008-6-6 05:03

1.8 sprits 没法用了?

Z-Blog 1.8 Spirit 对c_system_event.asp进行了大改动,express rss转移到c_c_function.asp中去了。

而且,由于 1.8 Spirit取消了索引重建,better feed 也无法更新 rss.xml了。

chenzhonwei 2008-6-17 14:55

这是相关文章的加法吗
页: [1]
查看完整版本: better feeds 修改方案 for 1.7 Laputa