知识专栏
多方位、多角度、深度解读您所关心的问题

建站时,很多生产制造企业客户的网站导航栏目有三个层级的栏目,这是很常见的。

那么用织梦dedecms建设网站时,怎么在网站导航栏实现调用顶级/一级、二级、三级栏目分类?

完整调用标签代码如下:

        <ul class="menu">
            <li {dede:field name=typeid runphp="yes"}(@me=="")? @me=" class='current'":@me="";{/dede:field}><a href="/">首页</a></li>
            {dede:channelartlist typeid='top' row='8' currentstyle="current"}
            <li class="{dede:field.currentstyle/}">
                <a href="{dede:field name='typeurl'/}" class="">{dede:field name='typename' /}</a>
                <div class="zmenu" style="visibility: hidden; height: auto; overflow: hidden; opacity: 0;">
                    <dl>
                      <dd class="zmenu-l"><img src="{dede:field name='minimage' /}" width="350" /></dd>
                      <dd class="zmenu-r">
                        {dede:sql sql='select * from dede_arctype where reid =~id~ '}
                        <span>
                            <h1><a target="_blank" href="[field:typedir function='str_replace("{cmspath}","",@me)'/]">[field:typename/]</a></h1>
                            <ul class="cp_nav">
                              [field:id runphp='yes']
                                    global $dsql;
                                    $id=@me;
                                    $sql='Select * from dede_arctype where reid='.$id.' ORDER BY id limit 0,20';
                                    $dsql->SetQuery($sql);
                                    $dsql->Execute();
                                    while($row = $dsql->GetArray()){
                                        $url = str_replace("{cmspath}","",$row['typedir']);
                                        $str .='<li><a href="'.$url.'" target="_blank">'.$row['typename'].'</a></li><li>|</li>';
                                        @me = $str;
                                    }                      
                                    if(@me == $id){ //避免3级栏目为空时 写出分类ID,这里加以判断
                                      @me ='';
                                    }
                              [/field:id]   
                            </ul>
                        </span>
                        {/dede:sql}
                      </dd>
                    </dl>
                </div>
            </li>
            {/dede:channelartlist}
        </ul>

上述部分代码说明:

1、{dede:field name=typeid runphp="yes"}(@me=="")? @me=" class='current'":@me="";{/dede:field}是判断是否为网站首页,如果是首页,就显示class='current'样式;

2、currentstyle="current"和{dede:field.currentstyle/}配套,是判断如果是当前栏目,这该栏目显示current样式,可以对该样式设置高亮效果。

如果有四级、五级等更多子栏目的话,就需要进行二次开发后,再进行调用了,本文所分享的调用代码无法调用出四级、五级等更多层级的子栏目了。

注意:上述高亮代码在实际应用中,会发现当前栏目并没有显示current样式,也就是没有高亮效果,这是因为织梦dedecms系统默认的channelartlist标签不支持currentstyle高亮效果,需要进行如下开发:

打开/include/taglib/channelartlist.lib.php文件,

找到

$pv->Fields['typeurl'] = GetOneTypeUrlA($typeids[$i]);

在其下方新增以下代码:

  if($typeids[$i]['id'] == $refObj->TypeLink->TypeInfos['id'] || $typeids[$i]['id'] == $refObj->TypeLink->TypeInfos['reid'] || $typeids[$i]['id'] == $refObj->TypeLink->TypeInfos['topid'] || $typeids[$i]['id'] == GetTopid($refObj->TypeLink->TypeInfos['id']) ){
   $pv->Fields['currentstyle'] = $currentstyle ? $currentstyle : 'current';
  } else {
   $pv->Fields['currentstyle'] = '';
  }

到此,去后台更新网站后,再刷新前端网页,就可以正常显示当前栏目的高亮效果了。

赞一下
--
踩一脚
--

您已成功复制微信号

leishi010

打开微信添加好友?

确定