织梦dede 无限级多级栏目菜单调用方法

织梦教程 强烈建议 2024-02-06 13:42 94 0

  以前在用到5.7无限级栏目列表菜单时下载了网上的资料都未成功,因此我参考网上及dedecms本身的channel.lib.php及cattree.lib.php制作了调用标签。

  1、在include\taglib建立randomartlist.lib.php

  内容如下:

  

  if(!defined('DEDEINC')) exit('Request Error!');

  function lib_randomartlist(&$ctag, &$refObj)

  {

  global $dsql;

  //属性处理

  //topid 指定顶级树 id ,指定后,前一个属性将无效

  $attlist="typeid|0,showall|,currentstyle|,cacheid|";

  FillAttsDefault($ctag->CAttribute->Items,$attlist);

  extract($ctag->CAttribute->Items, EXTR_SKIP);

  $revalue = '';

  //读取固定的缓存块

  $cacheid = trim($cacheid);

  if($cacheid !='') {

  $revalue = GetCacheBlock($cacheid);

  if($revalue != '') return $revalue;

  }

  //如果属性里没指定栏目id,从引用类里获取栏目信息

  if(empty($typeid))

  {

  if( isset($refObj->TypeLink->TypeInfos['id']) )

  {

  $typeid = $refObj->TypeLink->TypeInfos['id'];

  $reid = $refObj->TypeLink->TypeInfos['reid'];

  $topid = $refObj->TypeLink->TypeInfos['topid'];

  }

  else {

  $typeid = 0;

  }

  }

  else

  {

  $row2 = $dsql->GetOne("SELECT reid,topid,channeltype,ispart FROM `dede_arctype` WHERE reid='$topid' ");

  if(!is_array($row2))

  {

  $typeid = $reid = $topid = $channeltype = $ispart = 0;

  } else {

  $reid = $row2['reid'];

  $channeltype = $row2['channeltype'];

  $ispart = $row2['ispart'];

  $typepid = $row2['id'];

  }

  }

  //调用Typeid

  if( !empty($topid) )

  {

  $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";

  }

  $dsql->Execute('t', $topQuery);

  while($row = $dsql->GetArray('t'))

  {

  $row['typelink'] = GetOneTypeUrlA($row);

  //处理同级栏目中,当前栏目的样式

  if( $row['id']==$typeid && $currentstyle!='' )

  {

  $linkOkstr = $currentstyle;

  $linkOkstr = str_replace("~rel~",$row['rel'],$linkOkstr);

  $linkOkstr = str_replace("~id~",$row['id'],$linkOkstr);

  $linkOkstr = str_replace("~typelink~",$row['typelink'],$linkOkstr);

  $linkOkstr = str_replace("~typename~",$row['typename'],$linkOkstr);

  $revalue .= $linkOkstr;

  }

  else

  {

  $revalue .= "

  • {$row['typename']}
  • \n";

      }

      randomartlistSon($row['id'],$typeid,$currentstyle, $revalue);

      }

      if($cacheid !='') {

      WriteCacheBlock($cacheid, $revalue);

      }

      return $revalue;

      }

      function randomartlistSon($id,$typeid,$currentstyle,&$revalue)

      {

      global $dsql;

      $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";

      $dsql->Execute($id, $query);

      $thisv = '';

      while($row = $dsql->GetArray($id))

      {

      $row['typelink'] = GetOneTypeUrlA($row);

      //处理同级栏目中,当前栏目的样式

      if( $row['id']==$typeid && $currentstyle!='' )

      {

      $linkOkstr = $currentstyle;

      $linkOkstr = str_replace("~rel~",$row['rel'],$linkOkstr);

      $linkOkstr = str_replace("~id~",$row['id'],$linkOkstr);

      $linkOkstr = str_replace("~typelink~",$row['typelink'],$linkOkstr);

      $linkOkstr = str_replace("~typename~",$row['typename'],$linkOkstr);

      $thisv .= $linkOkstr;

      }

      else

      {

      $thisv .= "

  • {$row['typename']}
  • \n";

      }

      randomartlistSon($row['id'],$typeid,$currentstyle, $thisv);

      }

      if($thisv!='') $revalue .= "

      \n$thisv
    \n";

      }

      2、调用方式:

      

      

      

      3、css方式:

      .alist{}

      .alist ul {}

      .alist ul li {}

      .alist ul li a{}

      .alist ul li a:hover,.alist ul li .thisclass{}

      .alist ul li ul{}

      .alist ul li ul li{}

      .alist ul li ul li a{}

      .alist ul li ul li a:hover,.alist ul li ul li .thisclass{}



    时间:(2024-02-06 13:42:08)
    本站资源均来自互联网或会员发布,如果不小心侵犯了您的权益请与我们联系。我们将立即删除!谢谢!