找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1514|回复: 0

[分享] 织梦dedecms5.7 无限级多级栏目菜单调用方法

[复制链接]
发表于 2018-3-23 08:03:51 | 显示全部楼层 |阅读模式 来自 河南省新乡市
站长亲测可用
以前在用到5.7无限级栏目列表菜单时下载了网上的资料都未成功,因此我参考网上及dedecms本身的channel.lib.php及cattree.lib.php制作了调用标签。
1、在include\taglib建立randomartlist.lib.php
   内容如下:
  1.   <?php
  2. if(!defined('DEDEINC')) exit('Request Error!');

  3. function lib_randomartlist(&$ctag, &$refObj)
  4. {
  5.     global $dsql;
  6.     //属性处理
  7.      //topid 指定顶级树 id ,指定后,前一个属性将无效
  8.     $attlist="typeid|0,showall|,currentstyle|,cacheid|";
  9.     FillAttsDefault($ctag->CAttribute->Items,$attlist);
  10.     extract($ctag->CAttribute->Items, EXTR_SKIP);
  11.     $revalue = '';
  12.     //读取固定的缓存块
  13.     $cacheid = trim($cacheid);
  14.     if($cacheid !='') {
  15.         $revalue = GetCacheBlock($cacheid);
  16.         if($revalue != '') return $revalue;
  17.     }
  18.     //如果属性里没指定栏目id,从引用类里获取栏目信息
  19.     if(empty($typeid))
  20.     {
  21.         if( isset($refObj->TypeLink->TypeInfos['id']) )
  22.         {
  23.             $typeid = $refObj->TypeLink->TypeInfos['id'];
  24.             $reid = $refObj->TypeLink->TypeInfos['reid'];
  25.             $topid = $refObj->TypeLink->TypeInfos['topid'];
  26.         }
  27.         else {
  28.           $typeid = 0;
  29.       }
  30.     }
  31.     else
  32.     {

  33.         $row2 = $dsql->GetOne("SELECT reid,topid,channeltype,ispart FROM `dede_arctype` WHERE reid='$topid' ");
  34.         if(!is_array($row2))
  35.         {
  36.             $typeid = $reid = $topid = $channeltype = $ispart = 0;
  37.         } else {
  38.             $reid = $row2['reid'];
  39.             $channeltype = $row2['channeltype'];
  40.             $ispart = $row2['ispart'];
  41.             $typepid = $row2['id'];
  42.         }
  43.     }
  44.     //调用Typeid
  45.     if( !empty($topid) )
  46.     {
  47.         $topQuery = "SELECT id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath FROM `dede_arctype` WHERE reid='$topid' And ishidden<>1 order by sortrank asc";
  48.     }
  49.   $dsql->Execute('t', $topQuery);
  50.   while($row = $dsql->GetArray('t'))
  51.   {
  52.       $row['typelink'] = GetOneTypeUrlA($row);
  53.       //处理同级栏目中,当前栏目的样式
  54.                 if( $row['id']==$typeid  && $currentstyle!='' )
  55.                 {
  56.                     $linkOkstr = $currentstyle;
  57.                     $linkOkstr = str_replace("~rel~",$row['rel'],$linkOkstr);
  58.                     $linkOkstr = str_replace("~id~",$row['id'],$linkOkstr);
  59.                     $linkOkstr = str_replace("~typelink~",$row['typelink'],$linkOkstr);
  60.                     $linkOkstr = str_replace("~typename~",$row['typename'],$linkOkstr);
  61.                     $revalue .= $linkOkstr;
  62.                 }
  63.                 else
  64.                 {
  65.                   $revalue .= "    <li><a href='{$row['typelink']}'>{$row['typename']}</a></li>\n";
  66.                 }
  67.     randomartlistSon($row['id'],$typeid,$currentstyle, $revalue);
  68.   }
  69.   if($cacheid !='') {
  70.         WriteCacheBlock($cacheid, $revalue);
  71.   }
  72.     return $revalue;
  73. }

  74. function randomartlistSon($id,$typeid,$currentstyle,&$revalue)
  75. {
  76.     global $dsql;
  77.     $query = "SELECT id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath FROM `dede_arctype` WHERE reid='{$id}' And ishidden<>1 order by sortrank asc";
  78.     $dsql->Execute($id, $query);
  79.     $thisv = '';
  80.   while($row = $dsql->GetArray($id))
  81.   {
  82.       $row['typelink'] = GetOneTypeUrlA($row);
  83.       //处理同级栏目中,当前栏目的样式
  84.                 if( $row['id']==$typeid  && $currentstyle!='' )
  85.                 {
  86.                     $linkOkstr = $currentstyle;
  87.                     $linkOkstr = str_replace("~rel~",$row['rel'],$linkOkstr);
  88.                     $linkOkstr = str_replace("~id~",$row['id'],$linkOkstr);
  89.                     $linkOkstr = str_replace("~typelink~",$row['typelink'],$linkOkstr);
  90.                     $linkOkstr = str_replace("~typename~",$row['typename'],$linkOkstr);
  91.                     $thisv .= $linkOkstr;
  92.                 }
  93.                 else
  94.                 {
  95.                   $thisv .= "    <li><a href='{$row['typelink']}'>{$row['typename']}</a></li>\n";
  96.                 }

  97.     randomartlistSon($row['id'],$typeid,$currentstyle, $thisv);
  98.   }
  99.   if($thisv!='') $revalue .= "    <ul>\n$thisv    </ul>\n";
  100. }
复制代码


2、调用方式:
  1.    <div class="alist">

  2.           <ul>
  3.               {dede:randomartlist topid='12' currentstyle="<li><a href='~typelink~' class='thisclass'>~typename~</a></li>"}
  4.                  <li><a href="{dede:field name='typeurl'/}" title="{dede:field name='typename'/}">{dede:field name='typename'/}</a></li>
  5.               {/dede:randomartlist}
  6.             </ul>
  7.       </div>
复制代码

3、css方式:
  1.     .alist{}
  2.       /*第一层修饰*/
  3.      .alist ul {}
  4.      .alist ul li {}
  5.      .alist ul li a{}
  6.      .alist ul li a:hover,.alist ul li .thisclass{}
  7.       /*第二层修饰*/
  8.      .alist ul li ul{}
  9.      .alist ul li ul li{}
  10.      .alist ul li ul li a{}
  11.      .alist ul li ul li a:hover,.alist ul li ul li  .thisclass{}
复制代码

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2024-4-18 15:03 , Processed in 0.041076 second(s), 8 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表