PJBlog3 发布版本 v2.8.3.127 里程碑

查看完整版本: PJBLOG二级分类“已解决”

笑傲天 2008-6-8 08:54

PJBLOG二级分类“已解决”

经过两周的努力,本人的二级分类设置和调用大部分已完成,本着“Creative Commons”精神,也是应网友的要求,将修改的过程写出来。由于改的很乱,需要整理后,再慢慢帖出来。(注:本人才开始学习ASP,代码不是很完善,供大家参考,效果参看:[url=http://www.lzcjxx.com/]www.lzcjxx.com[/url])
[color=Red]在IE,MYIE下调试通过,效果图如下[/color]
[img]http://bbs.pjhome.net/attachments/ext_jpg/20080520_2abb43d04057b6d58568lbLkQNRbmEpd.jpg[/img]左边分类下拉列表——右边首页树型目录[img]http://bbs.pjhome.net/attachments/ext_jpg/20080520_f56695be9c379109f1d6DIAGP1p2vNc2.jpg[/img]
PJBlog二级分类修改过程
[color=Red]本人后台关闭了静态日志,本修改在动态模式下通过。[/color]
1、数据库设置
(1)打开分类blog_Category表中,说明一下数据结构
分类号:cate_ID,分类名称:cate_Name排列顺序:cate_Order,分类说明:cate_Intro,外部链接:cate_OutLink,链接地址: cate_URL([color=Red]暂时只能手动设置[/color])
(2)增加一个字段,父分类:cate_Parent,类型为数字。一级分类的cate_Parent为0,二级分类的cate_Parent为它上级的cate_ID。
(3)打日志blog_Content表中,同样的方法增加一个父分类log_parentID。([color=Red]暂时只能手动设置[/color])
[color=Red]如果不好改,下载我的演示数据库,进行测试。[/color]
(4)简单地设几个二级分类和日志,输入相应数据以便后面的测试,接下来全是ASP代码修改,强烈建设每做一步,做一下备件。([color=Red]由于本人的博客安的插件多,屡次个性化修改,代码变动太大,不能说出修改处在某行某列。[/color])
2、修改首页侧面分类
打开common\cache.asp
找到 约175行[code]SQL="SELECT cate_ID,cate_Name,cate_Order,cate_Intro,cate_OutLink,cate_URL,cate_icon,cate_count,cate_Lock,cate_local,cate_Secret FROM blog_Category  ORDER BY cate_Order ASC"[/code]改为[code]SQL="SELECT cate_ID,cate_Name,cate_Order,cate_Intro,cate_OutLink,cate_URL,cate_icon,cate_count,cate_Lock,cate_local,cate_Secret FROM blog_Category  WHERE cate_parent=0 ORDER BY cate_Order ASC"[/code]找到[code]Sub CategoryList(ByVal action)[/code]action=0是横向菜单,action=1是树状菜。修改if action=1 then以下的代码。

为了保险起见,我是新写个SUBCategoryList2()
记得library.asp开头添加
[color=Red]Public Category_code1[/color]的声明[code]'========================侧面二级分类树开始===============================
function ListSub(id)'分类树二级分类
    Dim log_Categorysub,cateList,parentID
    parentID=id
    TempVar=""
   SQL="SELECT * FROM blog_Category WHERE cate_Parent ="&id&" ORDER BY cate_Order ASC"
   Set log_Categorysub=Conn.Execute(SQL)
   SQLQueryNums=SQLQueryNums+1
   if not log_Categorysub.eof or not log_Categorysub.bof then
   do while not log_Categorysub.eof
   cateList=log_Categorysub("cate_ID")&"||"&parentID
   Category_code1=Category_code1&" ├"&("<img src="""&log_Categorysub("cate_icon")&""" border=""0"" style=""margin:3px 4px -4px 0px;"" alt="""&log_Categorysub("cate_name")&"""/><a class=""CategoryA"" href=""default.asp?cateID="&log_Categorysub("cate_ID")&""" title="""&log_Categorysub("cate_name")&""">"&log_Categorysub("cate_name")&" ["&log_Categorysub("cate_count")&"]</a> <a href=""feed.asp?cateID="&log_Categorysub("cate_ID")&""" title=""订阅该分类内容""><img src=""images/rss.png"" border=""0"" style=""margin:3px 4px -1px 0px;"" alt=""""/></a>
")
   log_Categorysub.movenext
   loop
   log_Categorysub.close
   set log_Categorysub=nothing
  end if
End function

Sub CategoryList2() '分类树一级分类
Dim Arr_Category,Category_Len,i
Arr_Category=Application(CookieName&"_blog_Category")
Category_code1=""
   if ubound(Arr_Category,1)=0 then exit Sub
    Category_Len=ubound(Arr_Category,2)
    For i=0 to Category_Len
       if int(Arr_Category(9,i))=0 or int(Arr_Category(9,i))=2 then
     if Arr_Category(4,i) then
       if cbool(Arr_Category(10,i)) then
         if stat_ShowHiddenCate or stat_Admin then Category_code1=Category_code1&("<img src="""&Arr_Category(6,i)&""" border=""0"" style=""margin:3px 4px -4px 0px;"" alt="""&Arr_Category(3,i)&"""/><a class=""CategoryA"" href="""&Arr_Category(5,i)&""" title="""&Arr_Category(3,i)&""">"&Arr_Category(1,i)&"</a>
")
        else
        Category_code1=Category_code1&("<img src="""&Arr_Category(6,i)&""" border=""0"" style=""margin:3px 4px -4px 0px;"" alt="""&Arr_Category(3,i)&"""/><a class=""CategoryA"" href="""&Arr_Category(5,i)&""" title="""&Arr_Category(3,i)&""">"&Arr_Category(1,i)&"</a>
")
        end if
     else
       if cbool(Arr_Category(10,i)) then
         if stat_ShowHiddenCate or stat_Admin then Category_code1=Category_code1&("<img src="""&Arr_Category(6,i)&""" border=""0"" style=""margin:3px 4px -4px 0px;"" alt="""&Arr_Category(3,i)&"""/><a class=""CategoryA"" href=""default.asp?cateID="&Arr_Category(0,i)&""" title="""&Arr_Category(3,i)&""">"&Arr_Category(1,i)&" ["&Arr_Category(7,i)&"]</a> <a href=""feed.asp?cateID="&Arr_Category(0,i)&""" title=""订阅该分类内容""><img src=""images/rss.png"" border=""0"" style=""margin:3px 4px -1px 0px;"" alt=""""/></a>
")
        else
         Category_code1=Category_code1&("<img src="""&Arr_Category(6,i)&""" border=""0"" style=""margin:3px 4px -4px 0px;"" alt="""&Arr_Category(3,i)&"""/><a class=""CategoryA"" href=""default.asp?cateID="&Arr_Category(0,i)&""" title="""&Arr_Category(3,i)&""">"&Arr_Category(1,i)&" ["&Arr_Category(7,i)&"]</a> <a href=""feed.asp?cateID="&Arr_Category(0,i)&""" title=""订阅该分类内容""><img src=""images/rss.png"" border=""0"" style=""margin:3px 4px -1px 0px;"" alt=""""/></a>
")
                end if
     end if
    end if
    ListSub(Arr_Category(0,i))
   Next
end sub
'========================侧面二级分类树结束===============================[/code]顶部的导航栏我没动,这样好点,有兴趣的可改成下拉菜单。

在common\library.asp找到[code]CategoryList(1)
side_html_default=replace(side_html_default,"$Category_code$",Category_code)
side_html=replace(side_html,"$Category_code$",Category_code)[/code]三句,

改为你自己的[code]CategoryList2()
side_html_default=replace(side_html_default,"$Category_code$",Category_code1)
side_html=replace(side_html,"$Category_code$",Category_code1)[/code]具体的代码如下:(我的代码不是最好的,仅供参考)

3、修改发表、编辑日志的分类下拉列表框
发表日志为blogpost.asp,编辑日志blogedit.asp
找到[code]lArticle.categoryID = request.form("log_CateID")[/code]下面增加[code]lArticle.parentID = request.form("log_parentID")'写入日志父分类ID[/code]找到[code]<div id="MsgHead">在 【<%=Conn.ExeCute("SELECT cate_Name FROM blog_Category WHERE cate_ID="&Request.Form("log_CateID")&"")(0)%>】 发表日志</div>[/code]改为[code]<div id="MsgHead">在 【<%=Conn.ExeCute("SELECT cate_Name FROM blog_Category WHERE cate_ID="&log_CID&"")(0)%>】 发表日志</div>[/code]找到
<option value="" selected="selected" style="color:#333">请选择分类</option>
将下面代码改为:[code]<%
dim num
num = 0    '定义数形目录级,并附初始值0
sort(0)         '调用过程
sub sort(selec)
dim log_Categorysub
TempVar=""
SQL="SELECT cate_ID,cate_Name,cate_count FROM blog_Category WHERE cate_Parent ="&selec&" and cate_URL='' ORDER BY cate_Order ASC"
Set log_Categorysub=Conn.Execute(SQL)
SQLQueryNums=SQLQueryNums+1
'if not log_Categorysub.eof or not log_Categorysub.bof then
  do while not log_Categorysub.eof
  if selec=0 then%>
   <option value="<%=log_Categorysub("cate_ID")%>||<%=selec%>" >├<%=log_Categorysub("cate_Name")%></option>
  <%else%>
   <option value="<%=log_Categorysub("cate_ID")%>||<%=selec%>" >│  ├<%=log_Categorysub("cate_Name")%> [<%=log_Categorysub("cate_count")%>]  </option>
  <%end if
    num=num+1
  sort(log_Categorysub("cate_ID"))
  num=num-1
  log_Categorysub.movenext
loop
log_Categorysub.close
Set log_Categorysub = Nothing
end sub
%>
</select>[/code]修改未完,请待续,代码可能有些错误,大家帮忙指正。
为方便大家,上传部分文件,对照修改,强烈建议做好备件!!
1、cache.asp    [attach]12028[/attach]
注意:common/cache.asp,行 392这句
Set log_Tags=Conn.Execute("SELECT tag_id,tag_name,tag_sys,tag_count FROM blog_tag")
改为[code]Set log_Tags=Conn.Execute("SELECT tag_id,tag_name,tag_count FROM blog_tag")[/code]2、演示数据库     [attach]12029[/attach]
修改发表日志为blogpost.asp补充
找到
lArticle.categoryID = request.form("log_CateID")
下面增加一句[code]lArticle.parentID = request.form("log_parentID")'写入日志父分类ID[/code]找到这两句
dim log_editType,editTs
log_editType=Request.Form("log_editType")
改为[code]dim log_editType,editTs,logID,log_CID,log_pID
log_editType=Request.Form("log_editType")
logID=Split(Request.Form("log_CateID"),"||")'获取日志一二级分类ID
log_CID=logID(0)'一级分类ID
log_pID=logID(1)'一级分类ID[/code]找到
<input name="log_CateID" type="hidden" id="log_CateID" value="<%=Request.Form("log_CateID")%>"/>
改为[code]<input name="log_CateID" type="hidden" id="log_CateID" value="<%=log_CID%>"/><!--标记二级分类ID-->

<input name="log_parentID" type="hidden" id="log_parentID" value="<%=log_pID%>"/><!--标记一级分类ID-->[/code]修改的时候思路很清晰,可惜没有作记录,现在整理起来,竞找不到方向。有点晕。后面还有敬请期待!!!08-06-09
4、修改class\cls_logAction.asp
找到
public categoryID,logTitle,logAuthor,logEditType
改为[code]public categoryID,parentID,logTitle,logAuthor,logEditType,logID,log_CID,log_pID[/code]找到
Set weblog=Server.CreateObject("ADODB.RecordSet")
categoryID = 0
下面增加
parentID=0'默认父分类为0
找到
weblog.addNew
weblog("log_CateID")=CheckStr(categoryID)
下面增加
weblog("log_parentID")=CheckStr(parentID)'父分类
找到
logAuthor=weblog("log_Author")
Conn.ExeCute("UPDATE blog_Category SET cate_count=cate_count-1 where cate_ID="&weblog("log_CateID"))
Conn.ExeCute("UPDATE blog_Category SET cate_count=cate_count+1 where cate_ID="&CheckStr(categoryID))
改为[code]logAuthor=weblog("log_Author")
logID=Split(categoryID,"||")
log_CID=logID(0)'二级分类ID
log_pID=logID(1)'一级分类ID
Conn.ExeCute("UPDATE blog_Category SET cate_count=cate_count-1 where cate_ID="&weblog("log_CateID"))
Conn.ExeCute("UPDATE blog_Category SET cate_count=cate_count+1 where cate_ID="&CheckStr(log_CID))[/code]找到 约314行
weblog("log_CateID")=CheckStr(categoryID)
改为[code]weblog("log_CateID")=CheckStr(log_CID)'二级分类ID
weblog("log_parentID")=CheckStr(log_pID)'一级分类ID[/code]cls_logAction.asp大概就是这样,08-06-10
08-06-12,有网友反映编辑日志出错,特补充下面的代码
5、修改common\cacheMod.asp
找到  约22行
      set getTags=new tag
下面几行改为[code]if log_View("log_ParentID")=0 then '获取父分类信息
        getCate.load(int(log_View("log_CateID"))) '获取分类信息
          else
        getCate.load(int(log_View("log_ParentID")))
          end if
     Temp=Replace(Temp,"<$Cate_icon$>",getCate.cate_icon)
     Temp=Replace(Temp,"<$Cate_Title$>",getCate.cate_Name)
     Temp=Replace(Temp,"<$log_CateID$>",log_View("log_CateID"))
     Temp=Replace(Temp,"<$log_parentID$>",getCate.cate.parentID)[/code][color=Red]编辑日志就不会出错了,注意,日志的分类没有自动设定,需要重新选择[/color]

[[i] 本帖最后由 笑傲天 于 2008-6-12 21:43 编辑 [/i]]

jaecool 2008-6-8 09:23

支持一下,等一下回去慢慢研究!
[color=Red]补充一句,楼主的这个教程我回去试验的时候看的我一头雾水,写的也太粗糙了。像我们这种菜鸟真的是看不懂啊![/color]

[[i] 本帖最后由 jaecool 于 2008-6-8 12:25 编辑 [/i]]

cyeehong 2008-6-8 10:50

节日快乐,感谢分享

四川-果果 2008-6-8 12:13

先加分再找错。:loveliness:
顶一个哦!

大家帮忙测试,没有大问题,加精哦。。。

吉光片羽 2008-6-8 14:04

RSS链接出错,少了闭合引号,请楼主自修一下!

笑傲天 2008-6-8 21:25

检查过了,代码没有问题

四川-果果 2008-6-8 23:31

后台我搞定了,就是出现二级分类的。会在子分类里出现!:call:
楼主检查一下!

Rison 2008-6-9 00:34

赞一个!有时间看看!

笑傲天 2008-6-9 09:55

自己顶一个,版主真行,二级分类的后台本人还未来得及做,能发一个么?

jacky1214 2008-6-9 11:56

期待二级分类后台哦!期待死

四川-果果 2008-6-9 13:54

后台文件  我带了评论审核功能的
这几天没空,文件发上来 自己参照着cate_Parent 修改!

笑傲天 2008-6-9 14:25

后台测试成功,:handshake
PJBLOG的二级分类功能完善了,呵呵:victory:
建议加入PJ-Blog个性修改及拓展源码整理集

[[i] 本帖最后由 笑傲天 于 2008-6-9 14:27 编辑 [/i]]

85659931 2008-6-9 15:37

要修改数据库不敢弄。。

独来独往 2008-6-9 15:57

学习一下

xxwj 2008-6-9 18:47

效果不错:)

jekeywang 2008-6-10 19:31

要是能做出插件,就非常完美啦!
修改还是有点麻烦,也容易出错!
不过还是得感谢lz的努力和共享!

lqer 2008-6-10 21:29

还有个问题。重新生成之后,2级目录也会出来。这样侧边显示是2次。
期待解决方法。

笑傲天 2008-6-10 21:49

二级分类重复出现,本人测试没有出现问题,能帖个图看看??

lqer 2008-6-10 21:54

就是这样的

lqer 2008-6-10 21:59

还有,似乎blogpost没有改全。我现在无法发表新日志,说

无效的垂直条使用 在查询表达式 'cate_ID=13||9' 中。
/blog/blogpost.asp, 第 178 行
页: [1] 2 3 4
查看完整版本: PJBLOG二级分类“已解决”