SEO博客首页 > 建站技术 > DEDECMS获取无限栏目子分类的方法

DEDECMS获取无限栏目子分类的方法

萧涵做企业网站大部分是使用DEDECMS,今天在给客户设计网站时,把DEDE自动内链URL全拼格式搞定后,又遇到了个小问题,因为产品分类最多有四级,客户要求在左侧有个弹出式菜单调用各级子分类出来,而DEDECMS默认只能调用一级分类。经过萧涵的努力,百度+GOOGLE+自己脑袋,终于搞定了这个东西,不敢独享,发出来给有需要的朋友分享。

首先要把/include/taglib/channerl.lib.php 文件的代码修改成以下的:

<?php
function lib_channel(&$ctag,&$refObj)
{
global $_sys_globals,$envs,$dsql;
$attlist = “typeid|0,reid|0,row|100,col|1,type|son,currentstyle|”;
FillAttsDefault($ctag->CAttribute->Items,$attlist);
extract($ctag->CAttribute->Items, EXTR_SKIP);
$innertext = $ctag->GetInnerText();
if(empty($typeid) && $envs['typeid']!=0)
{
$typeid = $envs['typeid'];
$reid = $envs['reid'];
}else{
$reid=0;
}

if($type==”||$type==’sun’) $type=”son”;
if($innertext==”) $innertext = GetSysTemplets(“channel_list.htm”);

if($reid==0 && $typeid>0)
{
$dbrow = $dsql->GetOne(“Select reid From #@__arctype where id=’$typeid’ “);
if(is_array($dbrow)) $reid = $dbrow['reid'];
}

$likeType = ”;
if($type==’top’)
{
$sql = “Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description
From #@__arctype where reid=0 And ishidden<>1 order by sortrank asc limit 0,$row”;
}
else if($type==”son”)
{
//if($_sys_globals['typeid']>0) $typeid = $_sys_globals['typeid'];
if($typeid==0) {
return ”;
}
$sql = “Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description
From #@__arctype where reid=’$typeid’ And ishidden<>1 order by sortrank asc limit 0,$row”;
}
else if($type==”self”)
{
if($reid==0) {
return ”;
}
$sql = “Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description
From ‘#@__arctype’ where reid=’$reid’ And ishidden<>1 order by sortrank asc limit 0,$row”;
}
//And id<>’$typeid’
$dtp2 = new DedeTagParse();
$dtp2->SetNameSpace(“field”,”[","]“);
$dtp2->LoadSource($innertext);
$dsql2 = clone $dsql;
$dsql->SetQuery($sql);
$dsql->Execute();

$line = $row;
$GLOBALS['autoindex'] = 0;
for($i=0;$i < $line;$i++)
{
if($col>1) $likeType .= “<dl>\r\n”;
for($j=0;$j<$col;$j++)
{
if($col>1) $likeType .= “<dd>\r\n”;
if($row=$dsql->GetArray())
{
if($type==’self’ && $row['id']==$typeid) //处理同级栏目中,当前栏目的样式
{
if($currentstyle!=”)
{
$linkOkstr = $currentstyle;
$row['typelink'] = GetOneTypeUrlA($row);
$linkOkstr = str_replace(“~typelink~”,$row['typelink'],$linkOkstr);
$linkOkstr = str_replace(“~typename~”,$row['typename'],$linkOkstr);
$likeType .= $linkOkstr;
}
}else
{
$row['typelink'] = $row['typeurl'] = GetOneTypeUrlA($row);
if(is_array($dtp2->CTags))
{
foreach($dtp2->CTags as $tagid=>$ctag){
if(isset($row[$ctag->GetName()]))
{
$dtp2->Assign($tagid,$row[$ctag->GetName()]);
}
elseif (preg_match(‘/^sonchannel[0-9]*$/’,$ctag->GetName()))
{
$dtp2->Assign($tagid,lib_channel_son($ctag,$row['id'],$dsql2));
}
}
}
$likeType .= $dtp2->GetResult();
}
}
if($col>1) $likeType .= “</dd>\r\n”;
$GLOBALS['autoindex']++;
}//Loop Col
if($col>1)
{
$i += $col - 1;
$likeType .= ” </dl>\r\n”;
}
}//Loop for $i
reset($dsql2);
$dsql->FreeResult();
return $likeType;
}
function lib_channel_son($ctag,$typeid = 0,$dsql2)
{
$attlist = “row|100,col|1,currentstyle|”;
FillAttsDefault($ctag->CAttribute->Items,$attlist);
extract($ctag->CAttribute->Items, EXTR_SKIP);
$innertext = $ctag->GetInnerText();
$dsql3 = clone $dsql2;
$likeType = ”;

//if($_sys_globals['typeid']>0) $typeid = $_sys_globals['typeid'];
if($typeid==0) {
return ”;
}
$sql = “Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description
From #@__arctype where reid=’$typeid’ And ishidden<>1 order by sortrank asc limit 0,$row”;
//And id<>’$typeid’
$dtp2 = new DedeTagParse();
$dtp2->SetNameSpace(“field”,”[","]“);
$dtp2->LoadSource($innertext);
$dsql2->SetQuery($sql);
$dsql2->Execute();
$line = $row;

for($i=0;$i < $line;$i++)
{
if($col>1) $likeType .= “<dl>\r\n”;
for($j=0;$j<$col;$j++)
{
if($col>1) $likeType .= “<dd>\r\n”;
if($row=$dsql2->GetArray())
{
$row['typelink'] = $row['typeurl'] = GetOneTypeUrlA($row);
if(is_array($dtp2->CTags))
{
foreach($dtp2->CTags as $tagid=>$ctag){
if(isset($row[$ctag->GetName()]))
{
$dtp2->Assign($tagid,$row[$ctag->GetName()]);
}
elseif (preg_match(‘/^sonchannel[0-9]*$/’,$ctag->GetName()))
{
$dtp2->Assign($tagid,lib_channel_son($ctag,$row['id'],$dsql3));
}
}
}
$likeType .= $dtp2->GetResult();
}
if($col>1) $likeType .= “</dd>\r\n”;
}//Loop Col
if($col>1)
{
$i += $col - 1;
$likeType .= ” </dl>\r\n”;
}
}//Loop for $i
reset($dsql3);
$dsql2->FreeResult();
return $likeType;
}
?>

在模板里面用 [field:sonchannel0] [/field:sonchannel0] 调用,这个是用来取子栏目用得(使用【sonchannel+数字】作为标签名是为了防止嵌套的时候无法正确解析标签),这个的作用就是当你的栏目有很多子栏目无限分级的时候方便你取子栏目的。实例一下:

<ul id=”left_nav”>
                    {dede:channel type=’son’ typeid=’16′}
     <li><a href=”[field:typelink/]“>[field:typename/]</a>
      <ul>
       [field:sonchannel0]
       <li><a href=”[field:typelink/]“>[field:typename/]</a>
                             <ul>
        [field:sonchannel1]
        <li><a href=”[field:typelink/]“>[field:typename/]</a>
                                 <ul>
         [field:sonchannel2]
         <li><a href=”[field:typelink/]“>[field:typename/]</a>
                                     <ul>
          [field:sonchannel3]
          <li><a href=”[field:typelink/]“>[field:typename/]</a></li>
          [/field:sonchannel3]
                                        </ul>
                                    </li>
         [/field:sonchannel2]
                                    </ul>
                                </li>
        [/field:sonchannel1]
                                </ul>
                            </li>
       [/field:sonchannel0]
      </ul>
                    </li>
     {/dede:channel}
                </ul>

以上typeid中的数字改成你的大分类的ID即可,因为在DEDE官方论坛没找到,所以这里发上来,希望能方便有用者,同时希望大家继续支持萧涵的博百优

注意:未免出错修改文件前请做好备份,以上代码可能有些引号又被自动转成全角的了,请修改成半角的,或者可以找萧涵索取此修改后的文件。

53 Responses to “DEDECMS获取无限栏目子分类的方法”

  1. #1 yanwei 回复 | 引用 2013-04-21 14:29

    我严格对照你的代码进行更改,却生成出来的是空白的,我的qq215730374

  2. #2 炮灰 回复 | 引用 2011-10-21 00:27

    你好,刚好使用到你提供的这个资料,现在有个问题就是我想在这个循环中使用判断,这玩意应该怎么弄呢?希望尽快回复,谢谢

  3. 有没有其他好的 cms啊

  4. #4 创。。。 回复 | 引用 2010-12-31 10:43

    我换成半角也不执行,一片空白,麻烦给我发下源码好吗?谢谢
    yscdc@163.com

  5. #5 迷失的小孩 回复 | 引用 2010-11-19 16:26

    我最近也在做一个企业站,但是用dedecms做比较麻烦,因为涉及到产品分类,想用dedeeims,但是这个编码只有utf-8的,老大你觉得应该用哪个呢?

  6. #6 吉安SEO 回复 | 引用 2010-09-25 12:41

    祝萧兄国庆快乐。

  7. #7 诸暨seo 回复 | 引用 2010-08-17 10:11

    dedecms的后台很复杂,我想不太适合用做企业站。我正在找一款方便用户操作的cms,最好是asp的,因为asp的大部分虚拟主机都支持的。主要还是用于企业站的。不知道有没有相关推荐的。谢谢

  8. #9 丰胸产品排行榜 回复 | 引用 2010-08-15 23:36

    用不到时就是废物!

  9. #10 厦门房屋出租 回复 | 引用 2010-08-04 15:13

    DEDE也有不少bug

  10. #11 dancer-couple 回复 | 引用 2010-07-21 23:52

    不知道能不能用上。

  11. #12 毛毛 回复 | 引用 2010-07-13 16:02

    不错

  12. #13 北京师范大学珠海分校 回复 | 引用 2010-07-13 15:09

    DEDE也有不少bug

  13. #14 绍兴SEO 回复 | 引用 2010-07-10 15:02

    百度查ADMIN5 更好玩!不信来看看

  14. #15 黄褐斑的治疗方法 回复 | 引用 2010-07-09 20:52

    这东西用到时就非常重要

  15. #16 在线电影院 回复 | 引用 2010-07-09 20:05

    seo高手啊····ding

  16. #17 金世纪工作室 回复 | 引用 2010-07-09 18:25

    老大 就是老大 呵呵 太牛逼了

  17. #18 乐泰胶水 回复 | 引用 2010-07-09 12:04

    谢谢博主分享,技术文章,牛

  18. #19 东莞seo 回复 | 引用 2010-07-09 11:47

    技术文章收藏了

  19. #20 作文 回复 | 引用 2010-07-09 11:05

    DEDE我菜鸟。不会做站,学习中。

  20. #21 北京人才网 回复 | 引用 2010-07-09 08:16

    老大,好强大~!

  21. #22 赣州SEO 回复 | 引用 2010-07-09 00:45

    dedecms我还不会,以后学习了

  22. #23 Jue 回复 | 引用 2010-07-08 23:26

    博主的分享精神很好 支持博主

  23. #24 中国农资人才网 回复 | 引用 2010-07-08 21:24

    这个是篇好文章

  24. #25 新手卡 回复 | 引用 2010-07-08 19:41

    还没用过DEDE..不过谢谢.

  25. #26 游戏爱好者 回复 | 引用 2010-07-08 18:58

    很好啊支持你

  26. #27 龙凤双喜 回复 | 引用 2010-07-08 18:15

    对dede用户很重要的内容

  27. #28 宋洁 回复 | 引用 2010-07-08 18:10

    有时候官方论坛太垃圾了

  28. #29 淘宝网购物 回复 | 引用 2010-07-08 18:10

    这东西用到时就非常重要,用不到时就是废物!
    这话说的真有理

  29. #30 诳人 回复 | 引用 2010-07-08 17:08

    老大,用在WP上怎么实现呢啊

  30. #31 武汉400电话 回复 | 引用 2010-07-08 14:51

    呵呵,先学习了。

  31. #32 衡阳网站建设 回复 | 引用 2010-07-08 12:44

    七林的博客 :这东西用到时就非常重要,用不到时就是废物!

  32. #33 电动沙发 回复 | 引用 2010-07-08 12:43

    很实用

  33. #34 湖南农大自考 回复 | 引用 2010-07-08 12:42

    学习了..试用下

  34. #35 好看网 回复 | 引用 2010-07-08 12:31

    路过,帮顶! 支持下

  35. 好东西

  36. #37 易赛和捷易通哪个好 回复 | 引用 2010-07-08 11:31

    看不懂啊~!

  37. #38 U8网 回复 | 引用 2010-07-08 11:19

    最近在做一个网站,正好用的是dedecms,这个正好可以用上去

  38. #39 江海门户 回复 | 引用 2010-07-08 11:11

    学习了 谢谢指导

  39. #40 康瑞保 回复 | 引用 2010-07-08 11:10

    先收藏!先谢了!

  40. #41 tbw淘宝网 回复 | 引用 2010-07-08 10:44

    这东西用到时就非常重要,用不到时就是废物!

  41. 谢谢楼主分享,很多人都在用织梦。

  42. #43 博百优 回复 | 引用 2010-07-08 10:35

    拜读博主的文章 欢迎回访 共同提高

  43. #44 最好的减肥药 回复 | 引用 2010-07-08 10:25

    不错,谢谢分享!

  44. #45 瘦脸方法 回复 | 引用 2010-07-08 10:13

    俺对php程序貌似过敏,汗~~

  45. #46 烟台网站建设 回复 | 引用 2010-07-08 10:02

    来看看,支持下。呵呵。。

  46. #47 灯笼 回复 | 引用 2010-07-08 09:59

    哈只不说了,学习中,加个连

  47. #48 唐尸 回复 | 引用 2010-07-08 09:43

    大哥可以帮我分析个站嘛,6.7日后一直被K,收录从2000到现在都成0了 ,不带www的倒是天天更新,301跳转了1个月了没见到效果,昨天取消了。

  48. #49 ucbug游戏网 回复 | 引用 2010-07-08 08:38

    哥们,可以帮我分析下这个站吗? ucbug游戏网 http://www.ucbug.com 快照最近一直都是隔天的。就是百度不收录新的页面。反而会减少收录的页面;最主要的是我们站的原创文章,居然没有转载站的排名权重大。很是郁闷。如果方便,请帮忙分析下。谢谢;我的EMAIL:ADMIN@UCBUG.COM 期待你的回复

    • #50 萧涵 回复 | 引用 2010-07-08 13:00

      你好,麻烦到www.shcai.com发贴说明你的问题,我们会做好解答

  49. #51 海峡医界网 回复 | 引用 2010-07-08 07:59

    非常感谢啊 。。。。。。。。。。。

  50. #52 七林的博客 回复 | 引用 2010-07-08 07:48

    对了,你啥时候更新模板啊~ 你说上个月20号,左右不能左右这么久啊,呵呵。同时建议整个回复盖楼的形式,就跟月光博客那种形式,要比他的好看,哈哈

  51. #53 七林的博客 回复 | 引用 2010-07-08 07:47

    这东西用到时就非常重要,用不到时就是废物!

发表评论