dede当前栏目高亮如何实现?

99ANYc3cd6
预计阅读时长 17 分钟
位置: 首页 DEDE建站 正文

使用 channel 标签的 currentstyle 属性(最推荐、最简单)

这是 DedeCMS 官方提供的最标准、最简单的方法,专门用于实现导航栏的当前栏目高亮。

dede 当前栏目高亮
(图片来源网络,侵删)

适用场景:网站主导航、栏目列表等。

实现步骤

  1. 找到模板文件: 登录您的 DedeCMS 后台,进入【模板】->【默认模板管理】,找到您网站首页模板文件,通常是 index.htm

  2. 修改栏目调用代码: 在您的模板文件中,找到调用栏目的 {dede:channel} 标签,它可能看起来像这样:

    dede 当前栏目高亮
    (图片来源网络,侵删)
    <ul class="nav">
      <li><a href="{dede:global.cfg_basehost/}/">首页</a></li>
      <li><a href='{dede:channel type='top' row='8'}'[field:typelink/]{/dede:channel}></li>
    </ul>
  3. 添加 currentstyle 属性: 修改 {dede:channel} 标签,为其添加 currentstyle 属性,这个属性定义了当栏目是当前栏目时,链接的显示样式。

    <ul class="nav">
      <li><a href="{dede:global.cfg_basehost/}/">首页</a></li>
      <!-- 
        currentstyle 定义了当前栏目项的HTML代码
        [field:typelink/] 会被替换为当前栏目的链接
        [field:typename/]  会被替换为当前栏目的名称
      -->
      <li>
        {dede:channel type='top' row='8' currentstyle="<a href='~typelink~' class='current'>~typename~</a>"}
          <a href="[field:typelink/]">[field:typename/]</a>
        {/dede:channel}
      </li>
    </ul>

代码解析

  • type='top':表示只调用顶级栏目。
  • row='8':表示调用8个栏目。
  • currentstyle="...":这是核心。
    • 当访问者所在的页面正好是这个栏目时,DedeCMS 会执行 currentstyle 里的代码。
    • ~typelink~:会被替换为当前栏目的完整链接。
    • ~typename~:会被替换为当前栏目的名称。
    • 我们在这里给当前链接添加了一个 class="current",方便我们用 CSS 来定义高亮样式。
  1. 添加 CSS 样式: 在您的 CSS 文件(style.css)中,为 .current 类添加样式,使其高亮显示。

    /* 导航栏普通链接样式 */
    .nav a {
      display: block;
      padding: 10px 15px;
      color: #333;
      text-decoration: none;
    }
    /* 导航栏当前栏目高亮样式 */
    .nav a.current {
      background-color: #ff6600; /* 背景色 */
      color: #ffffff; /* 文字颜色 */
      font-weight: bold; /* 文字加粗 */
    }

最终效果: 当用户访问“关于我们”栏目时,导航栏中的“关于我们”链接会自动应用 class="current",显示为我们定义的橙色背景和白色文字。

dede 当前栏目高亮
(图片来源网络,侵删)

使用 typeid 属性手动判断(更灵活,适用于子栏目)

currentstyle 方法非常方便,但在某些复杂场景下(比如面包屑导航、文章页面的位置判断),你可能需要更灵活的控制,这时可以使用 typeidif 判断。

适用场景:面包屑导航、文章详情页的栏目高亮等。

实现步骤

  1. 在模板中使用 typeid: 在需要判断的栏目位置,使用 {dede:field name='typeid'} 获取当前栏目的 ID。

  2. 结合 if 标签进行判断: 使用 DedeCMS 的 if 标签来判断当前栏目 ID 是否等于某个特定值。

    示例:面包屑导航

    <div class="breadcrumb">
      <a href="{dede:global.cfg_basehost/}/">首页</a>
      {dede:field name='typeid' runphp='yes'}
        $id = @me;
        // 获取当前栏目的顶级栏目ID
        $topid = getTopid($id);
        $typename = '';
        if($topid > 0) {
          $row = GetOneType($topid);
          $typename = $row['typename'];
          @me = ' > <a href="'.GetOneTypeUrl($topid).'">'.$typename.'</a>';
        } else {
          // 如果本身就是顶级栏目
          $row = GetOneType($id);
          $typename = $row['typename'];
          @me = ' > <a href="'.GetOneTypeUrl($id).'">'.$typename.'</a>';
        }
      {/dede:field}
      {dede:field name='typename'/}
    </div>

    更简单的 if 判断示例

    <ul>
      {dede:channel type='top' row='8'}
        <li>
          <a href="[field:typelink/]" 
             {if dede:field name='typeid' == 'id'}class="current"{/if}>
             [field:typename/]
          </a>
        </li>
      {/dede:channel}
    </ul>

    注意:上面的 if 判断在模板中直接写 typeid == 'id' 可能会失效,更推荐使用 runphp 的方式,或者使用 currentstyle,这里只是展示 if 的用法思路。


针对首页高亮

首页的高亮比较特殊,因为它没有 typeid,通常我们通过判断当前页面的模板名称或路径来实现。

实现步骤

  1. 修改首页导航代码

    <ul class="nav">
      <!-- 首页链接 -->
      <li>
        <a href="{dede:global.cfg_basehost/}/" 
           {dede:global name='typename' runphp='yes'}
             @me = (empty(@me) || @me == "首页") ? 'class="current"' : '';
           {/dede:global}>
          首页
        </a>
      </li>
      <!-- 栏目链接 -->
      {dede:channel type='top' row='8' currentstyle="<li><a href='~typelink~' class='current'>~typename~</a></li>"}
        <li><a href="[field:typelink/]">[field:typename/]</a></li>
      {/dede:channel}
    </ul>

代码解析{dede:global name='typename'} 在首页模板中会返回空值或“首页”,我们使用 runphp 来判断,@me (即 typename 的值) 为空,就给 a 标签加上 class="current"


总结与建议

方法 优点 缺点 适用场景
currentstyle 最简单、最标准、代码量少 灵活性相对较低 网站主导航、一级栏目列表(首选方法)
typeid + if 非常灵活,可处理复杂逻辑 代码稍复杂,需要一定的 PHP 基础 面包屑导航、文章页面的位置判断、需要精确控制高亮样式时
首页判断 解决了首页的特殊性 逻辑相对独立 首页导航项的高亮

对于绝大多数网站,强烈推荐使用方法一 (currentstyle),因为它最简单、最稳定,且是 DedeCMS 设计之初就考虑好的功能,只有在 currentstyle 无法满足的复杂需求下,再考虑使用方法二。

-- 展开阅读全文 --
头像
织梦首页模板路径在哪改?如何修改?
« 上一篇 03-31
Linux C语言编码有哪些核心技巧?
下一篇 » 03-31
取消
微信二维码
支付宝二维码

目录[+]