• 售前

  • 售后

热门帖子
入门百科

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

[复制链接]
123456835 显示全部楼层 发表于 2021-8-18 17:28:07 |阅读模式 打印 上一主题 下一主题
以前在用到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{}
复制代码
以上就是本文的全部内容,盼望对各人的学习有所资助,也盼望各人多多支持草根技术分享。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作