dede导航带样式循环,如何实现动态样式加载?

99ANYc3cd6
预计阅读时长 21 分钟
位置: 首页 DEDE建站 正文
  1. 模板文件:在模板文件中编写HTML结构和DedeCMS的循环标签。
  2. CSS样式:为这个HTML结构编写CSS样式,以达到你想要的视觉效果。

下面我将为你提供一个从基础到高级的完整示例,包括多种常见导航样式的实现方法。

dede导航带样式循环
(图片来源网络,侵删)

准备工作:确保栏目数据正确

在开始之前,请确保你的网站后台“栏目管理”中的顶级栏目已经设置好,并且它们的“类型”都是“栏目频道”,DedeCMS会根据这些栏目来生成导航。


第一步:编写模板HTML与DedeCMS循环标签

这是核心部分,我们需要使用DedeCMS的 {dede:channel} 标签来循环输出顶级栏目。

打开你的模板文件(通常是 templets/default/ 目录下的文件,如 head.htmindex.htm),在导航位置插入以下代码。

基础循环代码(无样式)

这是最原始的循环,只会输出 <a>

{dede:channel type='top' row='8'}
    <a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}

代码解释:

dede导航带样式循环
(图片来源网络,侵删)
  • {dede:channel type='top' row='8'}:
    • type='top':表示只调用顶级栏目。
    • row='8':表示调用的栏目数量,可以根据你的需要修改,或者不写(不写则调用所有顶级栏目)。
  • [field:typelink/]:输出栏目的链接地址。
  • [field:typename/]:输出栏目的名称。

第二步:添加CSS样式

我们给上面的HTML结构添加样式,让它变得美观,CSS可以写在 <head> 标签内的 <style> 块中,或者链接一个外部CSS文件。

这里提供几种非常流行的导航样式示例。

示例1:水平横向导航条(最常用)

这是最经典、最常用的导航样式。

HTML模板代码 (带类名)

dede导航带样式循环
(图片来源网络,侵删)

为了让CSS能够精准地控制,我们给每个元素添加一些类名和分隔符。

<!-- 顶部导航开始 -->
<div class="nav">
    <ul class="nav-list">
        {dede:channel type='top' row='8'}
        <li><a href="[field:typelink/]" title="[field:typename/]">[field:typename/]</a></li>
        {/dede:channel}
    </ul>
</div>
<!-- 顶部导航结束 -->

CSS 样式代码

/* 导航容器 */
.nav {
    background-color: #333; /* 导航背景色 */
    height: 50px;          /* 导航高度 */
    line-height: 50px;     /* 行高,用于垂直居中文字 */
}
/* 导航列表 */
.nav-list {
    list-style: none;      /* 去掉列表默认的小圆点 */
    margin: 0;             /* 去掉默认外边距 */
    padding: 0;            /* 去掉默认内边距 */
    text-align: center;    /* 文字居中 */
}
/* 导航列表中的每一项 */
.nav-list li {
    display: inline-block; /* 让列表项横向排列 */
    margin: 0 15px;        /* 控制每个菜单项之间的间距 */
}
/* 导航链接 */
.nav-list li a {
    color: #fff;           /* 文字颜色 */
    text-decoration: none; /* 去掉下划线 */
    font-size: 16px;       /* 字体大小 */
    display: block;        /* 让a标签充满整个li,方便添加悬停效果 */
}
/* 鼠标悬停效果 */
.nav-list li a:hover {
    color: #ffcc00;       /* 鼠标悬停时文字颜色变黄 */
}
/* 当前页面对应的栏目高亮效果 */
/* 这部分需要配合DedeCMS的 currentstyle 属性使用,下面会讲到 */
.nav-list li a.current {
    color: #ffcc00;
    font-weight: bold;
}

高级技巧与常用功能

高亮当前栏目

这是一个非常实用的功能,让用户知道自己当前在哪个页面。

修改HTML模板代码

{dede:channel} 标签中使用 currentstyle 属性来定义当前栏目的HTML样式。

<div class="nav">
    <ul class="nav-list">
        {dede:channel type='top' row='8' currentstyle="<li class='active'><a href='~typelink~' class='current'>~typename~</a></li>"}
        <li><a href="[field:typelink/]" title="[field:typename/]">[field:typename/]</a></li>
        {/dede:channel}
    </ul>
</div>

代码解释:

  • currentstyle="...":当循环的栏目正好是当前页面所在的栏目时,DedeCMS会使用这里的代码替换默认的 <li>...</li> 代码。
  • ~typelink~~typename~:是 currentstyle 属性中的特殊占位符,分别代表 [field:typelink/][field:typename/]
  • 我们给当前栏目的 <a> 标签添加了 class="current",这样我们就可以在CSS中为它写特殊样式(比如上面CSS中的 .nav-list li a.current)。

带下拉子菜单的导航

如果你的栏目有二级栏目,并且希望在鼠标悬停时显示出来,可以使用 {dede:sonchannel}

HTML模板代码 (带下拉菜单)

<div class="nav">
    <ul class="nav-list">
        {dede:channel type='top' row='8'}
        <li>
            <a href="[field:typelink/]" title="[field:typename/]">[field:typename/]</a>
            <!-- 检查是否有子栏目,有则显示下拉菜单 -->
            [field:sonchannel runphp='yes']
                global $dsql;
                $sql = "SELECT id,typename,typedir FROM `#@__arctype` WHERE reid='@me' AND ishidden<>1 ORDER BY sortrank";
                $sonids = '';
                $dsql->SetQuery($sql);
                $dsql->Execute('s');
                while($row = $dsql->GetArray('s')) {
                    $sonids .= "<a href='{$row['typedir']}'>{$row['typename']}</a> ";
                }
                if(empty($sonids)) @me = '';
                else @me = "<div class='sub-nav'>".$sonids."</div>";
            [/field:sonchannel]
        </li>
        {/dede:channel}
    </ul>
</div>

CSS 样式代码 (用于下拉菜单)

/* ... 之前的样式保持不变 ... */
/* 子导航容器 */
.sub-nav {
    display: none;          /* 默认隐藏 */
    position: absolute;     /* 绝对定位,相对于 li */
    top: 50px;              /* 放在主菜单的下方 */
    left: 0;
    background-color: #444;
    padding: 10px 0;
    min-width: 150px;       /* 设置一个最小宽度 */
    z-index: 1000;
}
/* 当鼠标悬停在 li 上时,显示子导航 */
.nav-list li:hover .sub-nav {
    display: block;         /* 显示下拉菜单 */
}
.sub-nav a {
    display: block;         /* 让每个链接占一行 */
    padding: 8px 15px;
    color: #fff;
    text-decoration: none;
    white-space: nowrap;    /* 防止文字换行 */
}
.sub-nav a:hover {
    background-color: #555;
}

注意:为了让 position: absolute 正常工作,需要给包含下拉菜单的 <li> 标签添加 position: relative;

.nav-list li {
    display: inline-block;
    margin: 0 15px;
    position: relative; /* 添加这一行 */
}

创建一个带样式的DedeCMS导航,核心流程如下:

  1. 选择循环标签:根据需求选择 {dede:channel} (顶级栏目) 或 {dede:sonchannel} (子栏目)。
  2. 编写HTML结构:在模板中使用循环标签,并用 <ul><li> 搭建好列表框架,给元素添加有意义的 class 名。
  3. 添加CSS样式:编写CSS来控制导航的布局(横向、纵向)、颜色、字体、间距和交互效果(悬停、高亮)。
  4. 使用高级功能:如 currentstyle 实现高亮,或结合 position: absolutehover 实现下拉菜单。

通过以上步骤,你就可以灵活地创建出符合你网站设计的各种导航菜单了。

-- 展开阅读全文 --
头像
织梦导航选中与不选中,如何实现与区别?
« 上一篇 今天
dede友情链接如何实现竖向排列效果?
下一篇 » 今天

相关文章

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