简单实现Zblog的分类置顶

Zblog提供了置顶的功能,不过,默认情况下为全局置顶,即:只要文章属性设置为置顶,那么在任何分类页都会在顶部显示该文章。我们都知道这是很不合理的,因为置顶文章与当前分类的主题未必吻合,很容易给读者造成疑惑,尤其是置顶文章很多或者需要将置顶文章的摘要也显示出来的情况下。
经过研究,我发现只要修改下面两段代码,就可以实现分类置顶的功能了,即:置顶文章不会总是显示出来,各个分类下的置顶单独与分类页关联。
步骤如下:
1.打开function/c_system_event.asp文件,函数Buildallcache内(1410行附近),原代码为:

objRS.Open("SELECT [log_ID] FROM [blog_Article] WHERE ([log_Level]>1) 
AND ([log_Istop]=True) ORDER BY [log_PostTime] DESC")
  If (Not objRS.bof) And (Not objRS.eof) Then
    objRS.PageSize = ZC_DISPLAY_COUNT
    ReDim aryAllList(objRS.PageCount+1)
    For i=1 to objRS.PageCount
      objRS.AbsolutePage=i
      For j = 1 To objRS.PageSize
        If j=1 Then aryAllList(i)="IstopPage" & i & "["
        aryAllList(i)=aryAllList(i) & objRS("log_ID") &  ";"
        If j=objRS.PageSize Then aryAllList(i)=aryAllList(i) & "]"
        objRS.MoveNext
        If objRS.EOF Then aryAllList(i)=aryAllList(i) & "]":Exit For
      Next
    Next
End If


修改为(红色部分是发生变化的部分):

objRS.Open("SELECT [log_ID],[log_CateID] FROM [blog_Article] WHERE ([log_Level]>1)
 AND ([log_Istop]=True) ORDER BY [log_PostTime] DESC")
  If (Not objRS.bof) And (Not objRS.eof) Then
    objRS.PageSize = ZC_DISPLAY_COUNT
    ReDim aryAllList(objRS.PageCount+1)
    For i=1 to objRS.PageCount
      objRS.AbsolutePage=i
      For j = 1 To objRS.PageSize
        If j=1 Then aryAllList(i)="IstopPage" & i & "["
        aryAllList(i)=aryAllList(i) & objRS("log_ID") & ";" & objRS("log_CateID") & ";"
        If j=objRS.PageSize Then aryAllList(i)=aryAllList(i) & "]"
        objRS.MoveNext
        If objRS.EOF Then aryAllList(i)=aryAllList(i) & "]":Exit For
      Next
    Next
  End If

2.打开function/c_system_lib.asp文件,函数ExportByCache内(1319行附近),原代码为:

Redim aryArticleList(UBound(aryArticle))
for i=LBound(aryArticle) To (UBound(aryArticle)-1)
Set objArticle = New TArticle
objArticle.ID=aryArticle(i)
If objArticle.LoadCache Then
aryArticleList(i)=objArticle.Template_Article_Multi
End if
Set objArticle = Nothing

修改后(红色部分为有变化的部分):

Redim aryArticleList((UBound(aryArticle)-LBound(aryArticle)+1)/2)
for i=LBound(aryArticle) To (UBound(aryArticle)-1) step 2
Set objArticle = New TArticle
objArticle.ID=aryArticle(i)
If (intCateId=Empty or intCateId=Cint(aryArticle(i+1))) and objArticle.LoadCache Then
aryArticleList(i/2)=objArticle.Template_Article_Multi
End if
Set objArticle = Nothing


经zblog 1.6 final 60816版本测试正常(谁有1.7版本的欢迎测试,非常感谢),效果是主页显示所有置顶,分类页显示各自分类的置顶。如果希望主页不显示任何置顶可以删去最后一段代码中的 intCateId=Empty or

如果代码有问题或者您有更好的改进欢迎反馈我。
前一篇:苹果电脑公司?苹果公司!后一篇:再次被点名
发布:Debugger | 分类:代码收集 | 引用本文 | 发表评论 | 返回顶部
  • quote 2.walter Said at 2007-3-1 22:03:03:
  • 老兄,你很厉害诶Haha, 问下 我也是用zblog,怎么把首页也生成htm模式啊??CryCry
    debuggger 于 2007-3-1 22:03:03 回复

    1.7去掉了这个功能,我还没有研究过这个问题,暂时没办法帮到你哦。不过我认为影响不大,主页的静态可有可无。
  • 回复该留言 | 直接评论 | 返回顶部
  • quote 3.泵 Said at 2007-4-14 15:54:59:
  • http://www.farrali.net
  • 按照贵站长的Zblog的分类置顶方法对于1.7无效,出现以下提示
    希望能够提供1.7的制作方法

    错误原因:未知错误

    ID:13

    摘要:
    类型不匹配

    Microsoft VBScript 运行时错误
  • 回复该留言 | 直接评论 | 返回顶部
  • quote 4.wcb Said at 2007-4-24 7:14:18:
  • http://www.wcb.cn
  • 我是1.7版本的 , function/c_system_lib.asp文件中有三处相同的地方,都按你的要求修改过,最后首后出错, 但分类的页面可以打开并实现了 分类置顶 的功能

    请高手指出首页为什么会出错并改正代码

    错误原因:未知错误

    ID:13

    摘要:
    类型不匹配

    Microsoft VBScript 运行时错误
    Debugger 于 2007-4-24 7:14:18 回复

    应该是不需要都改的,已经回复你邮件了,查收一下。
  • 回复该留言 | 直接评论 | 返回顶部
  • quote 6.wcb Said at 2007-4-24 9:33:41:
  • http://www.wcb.cn
  • 原首页的右侧文章列表如下:
    标题1
    标题2
    标题3
    标题4
    标题5

    但采用您的文章要求修改后,重建索引后
    [置顶]标题1
    标题2
    标题4

    而标题3 跟 标题5 丢失,但在类别中都可以找到
    就是首页出现问题,但分类中没问题
  • 回复该留言 | 直接评论 | 返回顶部
  • quote 7.wcb Said at 2007-5-9 8:57:29:
  • http://www.wcb.cn
  • 我已经把整站发到您邮箱中了,如果有时间的话,麻烦您修改一下
    Debugger 于 2007-5-9 8:42:00 回复

    好,我看看

    Debugger 于 2007-5-9 8:57:29 回复

    没能收到您的邮件,我看了一下1.7版本. 第一处修改function/c_system_event.asp应该在1760行,第二处修改function/c_system_lib.asp则是1467行.注意每个文件都只修改一处,不要改动多个函数.希望您能成功.
  • 回复该留言 | 直接评论 | 返回顶部
  • quote 8.wcb Said at 2007-5-9 8:41:37:
  • http://www.wcb.cn
  • 贵站 已经采用了Zblog 1.7, 为什么不把 "简单实现Zblog的分类置顶" 的功能在贵站中实现呢?

    期待中
    Debugger 于 2007-5-9 8:41:37 回复

    我这里没有置顶文章Haha
  • 回复该留言 | 直接评论 | 返回顶部
  • quote 9.wcb Said at 2007-10-16 17:38:05:
  • http://www.wcb.cn
  • 邮件已经分别重发了,感谢关注.

    建议老大测试时 置顶几编文章试试,事后可以再取消

    第一处修改function/c_system_event.asp应该在1760行,第二处修改function/c_system_lib.asp则是1467行.注意每个文件都只修改一处
    照改了,出现 "错误原因:未知错误 ID:13"


    打开cmd.asp文件
    移除掉第17行"<% On Error Resume Next %>"
    问题依旧


    Debugger 于 2007-10-16 16:10:57 回复

    已经测试了,否则不会发出来的。你看看现在网页上的效果。

    Debugger 于 2007-10-16 17:38:05 回复

    1.7的机制比较复杂,因为实现了所有的分类界面也静态化,所以暂时不知道怎么改。
    1.6我自己测试是可以的。注意几个问题:

    1.先备份,以防万一。
    2.最好用记事本文件改,改完了另存为utf-8文件,这是很重要的。
    3.注意上述代码段的起始位置和结尾位置,不要发生嵌套错误。
    4.做完后重建
  • 回复该留言 | 直接评论 | 返回顶部

发表评论:

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