如何在dede中实现带有currentstyle的嵌套li二级菜单?

要实现嵌套的二级菜单并添加currentstyle,可以使用HTML和CSS代码。以下是一个简单的示例:,,“html,,,,,,嵌套二级菜单,, ul {, liststyletype: none;, margin: 0;, padding: 0;, }, li {, display: inlineblock;, position: relative;, }, li a {, display: block;, padding: 5px 10px;, textdecoration: none;, }, li ul {, display: none;, position: absolute;, top: 100%;, left: 0;, }, li:hover > ul {, display: block;, }, li:hover > a {, backgroundcolor: #ccc;, },,,,,一级菜单1,,二级菜单11,二级菜单12,,,一级菜单2,,二级菜单21,二级菜单22,,,,,,“,,这段代码创建了一个包含两个一级菜单项的导航栏,每个一级菜单项下都有一个二级菜单。当鼠标悬停在一级菜单项上时,对应的二级菜单会显示出来。当前悬停的一级菜单项的背景颜色会变为灰色。

dede实现嵌套li加currentstyle的二级菜单

如何在dede中实现带有currentstyle的嵌套li二级菜单?

实现步骤

1. 准备工作

在开始之前,确保已经安装并配置好DedeCMS系统,并且已经创建了相应的栏目和子栏目。

2. 修改标签库文件

打开DedeCMS系统的includetaglibchannel.lib.php 文件,找到以下两行代码:

//检查是否有子栏目,并返回rel提示(用于二级菜单)
$row['rel'] = " rel='dropmenu{$row['id']}'";

这两行代码是DedeCMS官方为了支持二级菜单所添加的硬编码。

3. 编写头部导航代码

如何在dede中实现带有currentstyle的嵌套li二级菜单?

将以下代码添加到模板的头部文件中:

<ul>
    <li><a href='{dede:global.cfg_cmsurl/}/'>
        <span class="cn">首页</span>
        <span class="en">Home</span>
    </a></li>
    {dede:channel type='top' row='10' currentstyle='<li class="current"><a href="~typelink~" ~rel~>#<span class="cn">~typename~</span><span class="en">~dirName~</span></a></li>'}
    <li>
        <a href='[field:typeurl/]' [field:rel/]>
            <span class="cn">[field:typename/]</span>
            <span class="en">[field:typedir runphp='yes' commet="获得最后目录名,英文"]
                $l=split("/", @me);
                @me=array_pop($l);
            [/field:typedir]</span>
        </a>
    </li>
    {/dede:channel}
</ul>

这段代码会在头部生成一个包含顶级栏目的导航条,并为当前栏目添加current 样式。

4. 编写底部导航代码

将以下代码添加到模板的底部文件中:

{dede:channelartlist typeid='top'}
<ul id="dropmenu{dede:field.typeid/}">
    {dede:channel type='son' noself='yes'}
    <li><a href="[field:typelink/]">[field:typename/]</a></li>
    {/dede:channel}
</ul>
{/dede:channelartlist}

这段代码会在底部生成一个包含子栏目的下拉菜单,并通过id 属性与顶部导航进行关联。

5. CSS和JS设置

接下来需要编写CSS和JS来实现菜单的显示和隐藏效果,这部分内容较为复杂,可以根据具体需求进行调整,以下是一个简单的示例:

如何在dede中实现带有currentstyle的嵌套li二级菜单?

ul#dropmenu1 { display: none; }
ul#dropmenu1 li { float: left; marginleft: 10px; }
ul#dropmenu1 li a { color: #333; textdecoration: none; }
ul#dropmenu1 li a:hover { color: red; }
$(document).ready(function() {
    $("ul li").hover(function() {
        $(this).find("ul").stop(true, true).delay(200).fadeIn(200);
    }, function() {
        $(this).find("ul").stop(true, true).delay(200).fadeOut(200);
    });
});

相关问答FAQs

问题一:为什么在DedeCMS中实现嵌套li加currentstyle的二级菜单这么麻烦?

答:DedeCMS的标签系统相对固定,不支持直接生成复杂的嵌套菜单结构,需要通过修改标签库文件和使用JavaScript来实现这种复杂的菜单效果,DedeCMS官方之前的版本也使用了JavaScript来实现这一功能,并为此进行了一些硬编码。

问题二:如何确保生成的二级菜单能够正确显示当前栏目的样式?

答:要确保生成的二级菜单能够正确显示当前栏目的样式,需要在模板代码中正确使用currentstyle 属性,并在CSS中定义相应的样式,可以在<li> 标签中添加class="current" 类,然后在CSS中为该类定义样式,确保在JavaScript中正确处理鼠标悬停事件,以便在用户悬停时显示或隐藏子菜单。

<ul class="navmenu">
  <li class="menuitem" onmouseover="this.className='menuitem hover'" onmouseout="this.className='menuitem'">
    <a href="link1.html" class="menulink ${currentStyle}">菜单项1</a>
  </li>
  <li class="menuitem" onmouseover="this.className='menuitem hover'" onmouseout="this.className='menuitem'">
    <a href="link2.html" class="menulink ${currentStyle}">菜单项2
      <ul class="submenu">
        <li class="menuitem" onmouseover="this.className='menuitem hover'" onmouseout="this.className='menuitem'">
          <a href="link21.html" class="menulink ${currentStyle}">子菜单项1</a>
        </li>
        <li class="menuitem" onmouseover="this.className='menuitem hover'" onmouseout="this.className='menuitem'">
          <a href="link22.html" class="menulink ${currentStyle}">子菜单项2</a>
        </li>
      </ul>
    </a>
  </li>
  <li class="menuitem" onmouseover="this.className='menuitem hover'" onmouseout="this.className='menuitem'">
    <a href="link3.html" class="menulink ${currentStyle}">菜单项3</a>
  </li>
</ul>
<script type="text/javascript">
  function currentStyle() {
    var currentUrl = window.location.href;
    var menuItems = document.getElementsByClassName("menuitem");
    for (var i = 0; i < menuItems.length; i++) {
      var menuItem = menuItems[i];
      var link = menuItem.getElementsByTagName("a")[0];
      if (currentUrl == link.href) {
        menuItem.className += " current";
      }
    }
  }
</script>
属性/方法 说明 示例代码
ul标签的class 指定菜单的容器,用于应用样式

li标签的class 指定菜单项的样式,包括嵌套菜单的样式

li标签的onmouseover事件 当鼠标悬停在菜单项上时触发的事件

li标签的onmouseout事件 当鼠标离开菜单项时触发的事件

a标签的href 指定菜单项的链接地址 菜单项文本
a标签的class 指定菜单项文本的样式,包括当前页面的样式 菜单项文本
currentStyle变量 判断当前页面是否与菜单项链接地址相同,并应用相应的样式 菜单项文本
JavaScript代码 用于判断当前页面与菜单项链接地址是否相同,并动态修改样式

原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1185058.html

(0)
未希的头像未希新媒体运营
上一篇 2024-10-08
下一篇 2024-10-08

相关推荐

  • css 绝对定位如何居中显示,页面要居中,使用CSS进行绝对定位

    绝对定位是一种CSS布局模型,它允许开发者精确地控制元素的位置,在绝对定位模式下,元素的位置是相对于其最近的已定位祖先元素进行计算的,如果没有已定位的祖先元素,那么它将相对于初始包含块进行定位,2. 问题:如何使绝对定位的元素居中显示?要使绝对定位的元素居中显示,我们可以将元素的top和left属性设置为50%,然后将元素的margin-top和margin-left属性设置为负的 * ,我们

    2023-12-04
    0260
  • jquery怎么移除事件监听事件

    在jQuery中,我们可以使用.off()方法来移除事件监听器,这个方法接受一个或多个参数,这些参数是要移除的事件类型和事件处理函数。以下是一些示例:1、移除所有事件监听器:$(selector).off();在这个例子中,selector是你想要移除事件监听器的元素的选择器,如果你想要移除所有的按钮点击事件监听器,你可以这样做:$(……

    2024-03-21
    0204
  • top命令详解

    top命令是Linux系统中用于实时监控系统进程的工具,能够动态显示进程状态、资源占用等信息。

    2024-03-03
    0108
  • 如何在cmd中运行Python文件

    在cmd中输入python 文件名.py,按回车键即可运行Python文件。确保已安装Python并将其添加到系统环境变量中。

    2024-05-04
    0213

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

免费注册
电话联系

400-880-8834

产品咨询
产品咨询
分享本页
返回顶部
云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购  >>点击进入