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

所属分类: CMS教程 / dedecms 阅读数: 935
收藏 0 赞 0 分享

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

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

内容如下:

  <?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 .= "    <li><a href='{$row['typelink']}'>{$row['typename']}</a></li>\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 .= "    <li><a href='{$row['typelink']}'>{$row['typename']}</a></li>\n";
                }
 
    randomartlistSon($row['id'],$typeid,$currentstyle, $thisv);
  }
  if($thisv!='') $revalue .= "    <ul>\n$thisv    </ul>\n";
}

2、调用方式:

     <div class="alist">
          <ul>
              {dede:randomartlist topid='12' currentstyle="<li><a href='~typelink~' class='thisclass'>~typename~</a></li>"}
                 <li><a href="{dede:field name='typeurl'/}" title="{dede:field name='typename'/}">{dede:field name='typename'/}</a></li>
              {/dede:randomartlist}
            </ul>
      </div>

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{}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

织梦dedecms 忘记管理员后台密码的解决技巧

好多情况下,由于各种原因忘记了dedecms的密码,给大家带来了很大的麻烦,官方也没有出直接修改密码的东西可能是为了安全考虑吧。下面是最根本的方法,需要的朋友可以参考下。
收藏 0 赞 0 分享

取消dedecms 留言簿的验证码的方法

有时候感觉加了验证码,为互动带来了麻烦,如果垃圾广告很少的话可以取消,下面是具体的实现方法。
收藏 0 赞 0 分享

DEDECMS相关文章不相关的解决办法

关键字描述:相关 办法 解决 文章   " < row-> ss &rsquo DEDE的相关文章完全不相关,有朋友在DEDE官方放出根据TAG显示相关文章,也是很不错,可惜我在根据那边文章改DEDE代码后老是不行,可能是能力有限,当然也有可能是代
收藏 0 赞 0 分享

Dedecms默认模板用户评论扩展

关键字描述:评论 扩展 用户 模板 默认 " < > class 登录 Dedecms默认模板内容页评论处有个不足的地方,就是用户登录之后还会出现那个提示用户登录的框子,天涯这里给出了以下解决方案,如果喜欢的朋友可以拿去。 首先我们给内容页模板写上一段
收藏 0 赞 0 分享

DEDE取消发表文章时去掉验证码

关键字描述:dede 取消 发表文章 验证码 网站 关闭 后台 我的一个DEDECMS的网站里面所有的东西都是自己发布的,所以不需要验证码! DEDE默认是有验证码的,而且后台是不能关闭的,所以我们需要对代码动下手术拉! 今天,小青就在xkzzz谈一谈如何将d
收藏 0 赞 0 分享

【Arclist 标记】--Dedecms模板标签代码

关键字描述:标签 代码 模板 标记 表示 文档 < " 属性 orderby 这个标记是DedeCms最常用的一个标记,也叫自由列表标记,其中 hotart、coolart、likeart、ar
收藏 0 赞 0 分享

Dedecms实时更新热门关键字!

关键字描述:关键字 热门 更新 实时 标记 Copy code < subday num Dedecms实时更新热门关键字其实实现起来很简单,可是很多人不知道。 登录到dedecms后台 后台:自定义宏标记 添加一标记: 所属栏目:默认不用动 标记名称:ke
收藏 0 赞 0 分享

从零学DedeCms模板教程

关键字描述:教程 模板 < 模版 代码 标记 &mdash 制作 field:title/ DedeCms真是一个非常棒的系统,我从接触到现在一年时间再也没有理会其他CMS系统,推荐刚开始建站或准备换程序的朋友使用DedeCms系统。就像柏拉图说的:利剑已出,天下必乱
收藏 0 赞 0 分享

dedecms制作的admin5的评论效果

dedecms制作的admin5的评论效果 哪位朋友修改后了 请出个演示 以便让其他朋友提供参考 谢谢 声明:大家下载后请先在本地调式,确定无误后再使用。请备份原文件 把附件一覆盖到 主目录plus文件夹下; 把附件二覆盖到
收藏 0 赞 0 分享

dede解决两个标题之间的空格问题

关键字描述:空格 问题 之间 标题 解决 两个 显示 dedecms 一行 没有 问题: dedecms想在一行显示多个标题,比如两个或者三个,标题之间不需要空格,但是dedecms默认的一行显示的标题间有空格 修改./include/inc_arcpart_view.
收藏 0 赞 0 分享
查看更多