织梦侠
WWW.2L3.NET

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

以前在用到5.7无限级栏目列表菜单时下载了网上的资料都未成功,因此我参考网上及dedecms本身的channel.lib.phpcattree.lib.php制作了调用标签。
1、在include\taglib建立randomartlist.lib.php
   内容如下:
  1.   <?php
  2. if(!defined('DEDEINC')) exit('Request Error!');
  3.  
  4. function lib_randomartlist(&$ctag, &$refObj)
  5. {
  6.     global $dsql;
  7.     //属性处理
  8.      //topid 指定顶级树 id ,指定后,前一个属性将无效
  9.     $attlist="typeid|0,showall|,currentstyle|,cacheid|";
  10.     FillAttsDefault($ctag->CAttribute->Items,$attlist);
  11.     extract($ctag->CAttribute->Items, EXTR_SKIP);
  12.     $revalue = '';
  13.     //读取固定的缓存块
  14.     $cacheid = trim($cacheid);
  15.     if($cacheid !='') {
  16.         $revalue = GetCacheBlock($cacheid);
  17.         if($revalue != '') return $revalue;
  18.     }
  19.     //如果属性里没指定栏目id,从引用类里获取栏目信息
  20.     if(empty($typeid))
  21.     {
  22.         if( isset($refObj->TypeLink->TypeInfos['id']) )
  23.         {
  24.             $typeid = $refObj->TypeLink->TypeInfos['id'];
  25.             $reid = $refObj->TypeLink->TypeInfos['reid'];
  26.             $topid = $refObj->TypeLink->TypeInfos['topid'];
  27.         }
  28.         else {
  29.           $typeid = 0;
  30.       }
  31.     }
  32.     else
  33.     {
  34.  
  35.         $row2 = $dsql->GetOne("SELECT reid,topid,channeltype,ispart FROM `dede_arctype` WHERE reid='$topid' ");
  36.         if(!is_array($row2))
  37.         {
  38.             $typeid = $reid = $topid = $channeltype = $ispart = 0;
  39.         } else {
  40.             $reid = $row2['reid'];
  41.             $channeltype = $row2['channeltype'];
  42.             $ispart = $row2['ispart'];
  43.             $typepid = $row2['id'];
  44.         }
  45.     }
  46.     //调用Typeid
  47.     if( !empty($topid) )
  48.     {
  49.         $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";
  50.     }
  51.   $dsql->Execute('t', $topQuery);
  52.   while($row = $dsql->GetArray('t'))
  53.   {
  54.       $row['typelink'] = GetOneTypeUrlA($row);
  55.       //处理同级栏目中,当前栏目的样式
  56.                 if( $row['id']==$typeid  && $currentstyle!='' )
  57.                 {
  58.                     $linkOkstr = $currentstyle;
  59.                     $linkOkstr = str_replace("~rel~",$row['rel'],$linkOkstr);
  60.                     $linkOkstr = str_replace("~id~",$row['id'],$linkOkstr);
  61.                     $linkOkstr = str_replace("~typelink~",$row['typelink'],$linkOkstr);
  62.                     $linkOkstr = str_replace("~typename~",$row['typename'],$linkOkstr);
  63.                     $revalue .= $linkOkstr;
  64.                 }
  65.                 else
  66.                 {
  67.                   $revalue .= "    <li><a href='{$row['typelink']}'>{$row['typename']}</a></li>\n";
  68.                 }
  69.     randomartlistSon($row['id'],$typeid,$currentstyle, $revalue);
  70.   }
  71.   if($cacheid !='') {
  72.         WriteCacheBlock($cacheid, $revalue);
  73.   }
  74.     return $revalue;
  75. }
  76.  
  77. function randomartlistSon($id,$typeid,$currentstyle,&$revalue)
  78. {
  79.     global $dsql;
  80.     $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";
  81.     $dsql->Execute($id, $query);
  82.     $thisv = '';
  83.   while($row = $dsql->GetArray($id))
  84.   {
  85.       $row['typelink'] = GetOneTypeUrlA($row);
  86.       //处理同级栏目中,当前栏目的样式
  87.                 if( $row['id']==$typeid  && $currentstyle!='' )
  88.                 {
  89.                     $linkOkstr = $currentstyle;
  90.                     $linkOkstr = str_replace("~rel~",$row['rel'],$linkOkstr);
  91.                     $linkOkstr = str_replace("~id~",$row['id'],$linkOkstr);
  92.                     $linkOkstr = str_replace("~typelink~",$row['typelink'],$linkOkstr);
  93.                     $linkOkstr = str_replace("~typename~",$row['typename'],$linkOkstr);
  94.                     $thisv .= $linkOkstr;
  95.                 }
  96.                 else
  97.                 {
  98.                   $thisv .= "    <li><a href='{$row['typelink']}'>{$row['typename']}</a></li>\n";
  99.                 }
  100.  
  101.     randomartlistSon($row['id'],$typeid,$currentstyle, $thisv);
  102.   }
  103.   if($thisv!='') $revalue .= "    <ul>\n$thisv    </ul>\n";
  104. }
 
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{}
转载请注明文章来自织梦侠[秩名]作者的-织梦dedecms5.7 无限级多级栏目菜单调用方法
联系作者
取消
这个作者很懒什么也没留下!
打赏作者
取消

本文作者无偿奉献,就打赏给我们织梦侠吧!

扫码支付
扫码打赏,建议金额1-10元

打开支付宝扫一扫,即可进行扫码打赏哦

提醒:打赏金额将直接进入对方账号,无法退款,请您谨慎操作。