dede下拉菜单跳转怎么设置?

99ANYc3cd6
预计阅读时长 21 分钟
位置: 首页 DEDE建站 正文
  1. 静态导航菜单:菜单项是固定的,直接链接到指定的栏目页面。
  2. 动态下拉菜单:菜单项是从数据库中动态获取的,产品分类”下有多个子分类,这些子分类会自动显示在下拉菜单中。

这两种情况的实现方法略有不同,我会分别提供详细的步骤和代码。

dede下拉菜单跳转
(图片来源网络,侵删)

静态导航菜单(最常见)

这种情况下,你只需要修改网站顶部的导航栏模板文件,将 <a> 标签的 href 属性指向你想要的链接即可。

操作步骤:

  1. 找到模板文件 DedeCMS 的模板文件通常位于 /templets/ 目录下,导航栏的模板文件可能是 default.htmhead.htm 或者你自定义的模板文件,最常见的是在网站首页模板(通常是 index.htm)或者一个被所有页面引用的公共头部文件(如 head.htm)中。

    你需要登录 DedeCMS 后台,进入【模板】->【模板管理】,找到你当前使用的模板,然后点击对应的模板文件进行编辑。

  2. 定位导航菜单代码 在模板文件中,找到导航菜单的 HTML 代码,它通常是一个 <ul> 列表结构,里面包含多个 <li><a>

    你可能会看到类似这样的代码:

    dede下拉菜单跳转
    (图片来源网络,侵删)
    <div id="nav">
      <ul>
        <li><a href='{dede:global.cfg_cmspath/}/'>首页</a></li>
        <li><a href='about.html'>关于我们</a></li>
        <li><a href='product.html'>产品中心</a></li>
        <li><a href='contact.html'>联系我们</a></li>
      </ul>
    </div>
  3. 修改链接地址 你只需要修改你想要添加下拉菜单的 <a> 标签,我们想给“产品中心”添加一个下拉菜单。

    关键点:为了实现下拉效果,我们通常需要用 <div><ul> 包裹下拉内容,并设置 CSS 来控制其显示和隐藏。

    修改后的 HTML 结构示例:

    <div id="nav">
      <ul>
        <li><a href='{dede:global.cfg_cmspath/}/'>首页</a></li>
        <li><a href='about.html'>关于我们</a></li>
        <!-- 修改产品中心部分 -->
        <li class="dropdown">
          <a href="product.html">产品中心</a>
          <!-- 下拉菜单内容 -->
          <div class="dropdown-content">
            <a href="product/cat1.html">分类一</a>
            <a href="product/cat2.html">分类二</a>
            <a href="product/cat3.html">分类三</a>
          </div>
        </li>
        <li><a href='contact.html'>联系我们</a></li>
      </ul>
    </div>
    • 我们给包含下拉菜单的 <li> 添加了一个 class="dropdown",方便用 CSS 选中它。
    • <a> 标签后面,添加了一个 class="dropdown-content"<div>,里面放置了下拉链接。
  4. 添加 CSS 样式 你需要添加 CSS 代码来让下拉菜单正常工作,这段代码可以放在模板文件的 <head> 标签内,或者链接一个外部的 CSS 文件中。

    dede下拉菜单跳转
    (图片来源网络,侵删)
    /* 下拉菜单容器 */
    #nav ul li.dropdown {
      position: relative; /* 关键:为下拉菜单定位提供参考 */
    }
    /* 默认隐藏下拉菜单内容 */
    .dropdown-content {
      display: none;
      position: absolute; /* 关键:相对于父元素 li.dropdown 定位 */
      background-color: #f9f9f9;
      min-width: 160px;
      box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
      z-index: 1; /* 确保下拉菜单显示在其他内容之上 */
    }
    /* 鼠标悬停在父级 li 上时,显示下拉菜单 */
    #nav ul li.dropdown:hover .dropdown-content {
      display: block;
    }
    /* 下拉菜单链接样式 */
    .dropdown-content a {
      color: black;
      padding: 12px 16px;
      text-decoration: none;
      display: block;
      text-align: left;
    }
    /* 鼠标悬停在下拉链接上的样式 */
    .dropdown-content a:hover {
      background-color: #f1f1f1;
    }

完成以上步骤后,当你的鼠标移动到“产品中心”上时,就会显示下拉菜单,点击菜单项即可跳转到相应页面。


动态下拉菜单(从数据库获取)

这种情况更常见,产品分类”的子分类是后台动态添加的,我们需要在模板中调用出来。

操作步骤:

  1. 找到模板文件 和场景一一样,找到包含导航栏的模板文件(如 head.htmindex.htm)。

  2. 使用 DedeCMS 标签调用栏目 DedeCMS 提供了强大的标签系统来调用数据,要实现动态下拉菜单,我们需要使用 {dede:channel} 标签,并指定其 typeid 为父级栏目的 ID。

    假设:

    • 你的“产品中心”栏目在后台的 ID 是 2
    • 它的子分类(如“手机”、“电脑”)是这个栏目的子栏目。
  3. 修改模板代码 将静态的 HTML 结构替换为 DedeCMS 的标签调用。

    修改后的模板代码示例:

    <div id="nav">
      <ul>
        <li><a href='{dede:global.cfg_cmspath/}/'>首页</a></li>
        <li><a href='about.html'>关于我们</a></li>
        <!-- 动态调用产品中心及其子分类 -->
        <li class="dropdown">
          <!-- 产品中心链接,指向其本身 -->
          <a href="{dede:field name='typeid' runphp='yes'} @me = GetTopTypename(@me); {/dede:field}">
            {dede:field name='typename'/}
          </a>
          <!-- 
            注意:上面的链接方式是假设你在栏目页模板中。
            如果是在首页等非栏目页,直接写死链接更简单:
            <a href='/product/'>产品中心</a>
          -->
          <!-- 下拉菜单内容,调用父栏目ID为2的所有子栏目 -->
          <div class="dropdown-content">
            {dede:channel type='son' typeid='2'}
              <a href="[field:typelink/]">[field:typename/]</a>
            {/dede:channel}
          </div>
        </li>
        <li><a href='contact.html'>联系我们</a></li>
      </ul>
    </div>

    代码解释:

    • {dede:channel type='son' typeid='2'}:这是核心标签。
      • typeid='2':指定父栏目的 ID。请务必将其替换成你自己的“产品中心”栏目的 ID
      • type='son':表示调用该栏目下的所有直接子栏目。
    • [field:typelink/]:输出子栏目的链接地址。
    • [field:typename/]:输出子栏目的名称。
  4. 添加 CSS 样式 CSS 样式和场景一完全一样,直接复制即可,因为生成的 HTML 结构和场景一是一样的,只是内容是动态生成的。

/* 这段 CSS 和场景一完全相同 */
/* 下拉菜单容器 */
#nav ul li.dropdown {
  position: relative;
}
/* 默认隐藏下拉菜单内容 */
.dropdown-content {
  display: none;
  position: absolute;
  background-color: #f9f9f9;
  min-width: 160px;
  box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
  z-index: 1;
}
/* 鼠标悬停在父级 li 上时,显示下拉菜单 */
#nav ul li.dropdown:hover .dropdown-content {
  display: block;
}
/* 下拉菜单链接样式 */
.dropdown-content a {
  color: black;
  padding: 12px 16px;
  text-decoration: none;
  display: block;
  text-align: left;
}
/* 鼠标悬停在下拉链接上的样式 */
.dropdown-content a:hover {
  background-color: #f1f1f1;
}

总结与注意事项

  1. 核心区别

    • 静态:直接修改 HTML 里的 href
    • 动态:使用 {dede:channel} 标签从数据库获取数据并生成链接。
  2. 关键点

    • 模板文件:一定要修改正确的模板文件。
    • 栏目 ID:动态调用时,typeid 必须正确,这是最容易出错的地方,你可以在后台【栏目管理】中查看每个栏目的 ID。
    • CSS 定位position: relative (父级) 和 position: absolute (下拉内容) 是实现下拉菜单定位的关键。
  3. 兼容性

    • 这种纯 CSS 的下拉菜单在所有现代浏览器中都能很好地工作。
    • 如果需要支持非常旧的浏览器(如 IE8),可能需要添加一些额外的 CSS hack 或使用 JavaScript 来增强兼容性。
  4. JavaScript 方案: 有时为了更复杂的效果(如点击展开),或者为了更好的浏览器兼容性,会使用 JavaScript (如 jQuery),原理和 CSS 类似,只是用 JS 来控制 display: blockdisplay: none,但对于简单的悬停效果,CSS 是最简单、最高效的方案。

希望这个详细的教程能帮助你成功实现 DedeCMS 的下拉菜单跳转功能!

-- 展开阅读全文 --
头像
dede联动类别样式如何自定义与调用?
« 上一篇 04-08
汇编、C、C++核心区别是什么?
下一篇 » 04-08

相关文章

取消
微信二维码
支付宝二维码