织梦channel typeid如何实现分类内容调用?

99ANYc3cd6
预计阅读时长 18 分钟
位置: 首页 织梦建站 正文

核心概念:{dede:channel} 标签是什么?

{dede:channel} 是一个列表类的标签,它的主要作用是获取并输出一个频道(栏目)列表

织梦 channel typeid
(图片来源网络,侵删)

你可以把它想象成一个“导航菜单生成器”,它会从你的网站后台读取栏目(频道)数据,然后根据你设定的模板格式,在页面上生成一个栏目列表,比如主导航、侧边栏的“相关栏目”、“子栏目”等。


核心属性:typeid 是什么?

typeid{dede:channel} 标签中最重要、最常用的一个属性,它的作用是指定从哪个栏目开始获取其子栏目列表

typeid 的关键点:

  1. 默认值{dede:channel} 标签不写 typeid 属性,那么它会默认获取网站根目录下的所有一级栏目,这通常用于生成网站的主导航菜单。

  2. 指定栏目:如果你给 typeid 赋值,typeid='3',那么它会获取栏目 ID 为 3 的所有直接子栏目

    织梦 channel typeid
    (图片来源网络,侵删)
  3. 如何获取栏目 ID?

    • 登录 DedeCMS 后台。
    • 进入【核心】 -> 【栏目管理】。
    • 将鼠标悬停在任何一行栏目上,浏览器左下角会显示该栏目的链接,如 dede/catalog_add.php?cid=3,其中的 3 就是这个栏目的 ID。

typeid 的不同用法与示例

让我们通过几个常见的场景来理解 typeid 的强大之处。

示例 1:生成主导航(不使用 typeid

这是最基本、最常见的用法,用于显示网站最顶部的导航菜单。

场景:获取所有顶级栏目。

织梦 channel typeid
(图片来源网络,侵删)

模板代码

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

代码解析

  • {dede:channel type='top'}type='top' 明确表示获取顶级栏目,即使不写 typeidtype='top' 也能达到同样的效果,并且更清晰。
  • [field:typelink/]:调用栏目的链接地址。https://www.yoursite.com/plus/list.php?tid=1
  • [field:typename/]:调用栏目的名称,首页”、“产品中心”、“新闻资讯”。

示例 2:生成“关于我们”下的子栏目列表

场景:网站有一个“关于我们”栏目(假设其 ID 为 2),它下面有“公司简介”、“发展历程”、“企业文化”等子栏目,现在要在“关于我们”页面的侧边栏显示这些子栏目。

模板代码

<h3>关于我们</h3>
<ul>
    {dede:channel typeid='2'}
        <li><a href="[field:typelink/]" title="[field:typename/]">[field:typename/]</a></li>
    {/dede:channel}
</ul>

代码解析

  • typeid='2':这是关键!它告诉标签:“不要管别的,我只关心 ID 为 2 的栏目的子们”。
  • 输出结果将只包含“公司简介”、“发展历程”等“关于我们”的直接子栏目。

示例 3:生成当前栏目的同级栏目(“相关栏目”)

场景:在文章详情页或列表页,用户可能还想看同栏目下的其他文章,这时需要显示与当前栏目平级的栏目列表。

实现方法:使用 DedeCMS 的全局变量 typeid

模板代码

<h3>相关栏目</h3>
<ul>
    {dede:channel typeid='~typeid~'}
        <li><a href="[field:typelink/]" title="[field:typename/]">[field:typename/]</a></li>
    {/dede:channel}
</ul>

代码解析

  • typeid='~typeid~':这里的 ~typeid~ 是一个全局变量,当这个模板被调用时(比如在文章页),~typeid~ 会自动被替换为当前所在栏目的 ID

  • 如果当前正在浏览“公司简介”(假设其父栏目是“关于我们”,ID为2,而“公司简介”自身ID为5),typeid='~typeid~' 就等同于 typeid='5'{dede:channel} 默认获取的是子栏目,而“公司简介”没有子栏目,所以这会输出一个空列表。

  • 修正(获取同级栏目的正确方法):要获取同级栏目,需要结合 reid 属性和 sontop 类型,更推荐使用 sontop 结合 reid

    正确获取同级栏目的代码

    {dede:channel type='son' reid='~typeid~'}
        <li><a href="[field:typelink/]" title="[field:typename/]">[field:typename/]</a></li>
    {/dede:channel}
    • type='son':表示获取子栏目。
    • reid='~typeid~'reid 指的是“父栏目ID”。~typeid~ 是当前栏目ID,它的父栏目ID就是我们要找的同级栏目的“父ID”,这样就能准确获取到同级栏目了。

    更简单的方法(如果确定顶级栏目)

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

    如果你的网站结构不深,直接调用顶级栏目也是一种常见的“相关栏目”展示方式。


{dede:channel} 的其他常用属性

属性名 说明 示例
typeid 指定要获取的栏目ID,默认为顶级栏目 typeid='3'
type 栏目类型。top (顶级), son (子栏目), self (同级及子栏目)。 type='son'
reid 父栏目ID,与 type='son' 配合使用来获取指定父栏目的子栏目(即同级栏目)。 reid='2'
row 调用条数,即显示多少个栏目。 row='8'
col 分多少列显示。 col='4'
currentstyle 当前栏目高亮样式,非常实用! currentstyle="<li class='active'><a href='~typelink~'>~typename~</a></li>"

实战案例:带高亮的导航菜单

这是一个非常实用的例子,展示了如何结合 typeidcurrentstyle 实现当前栏目在导航菜单中高亮显示。

场景:主导航,当用户在“产品中心”页面时,“产品中心”这一项应该有不同的样式。

模板代码

<nav>
    <ul class="main-nav">
        {dede:channel type='top' currentstyle="<li class='active'><a href='~typelink~' class='thisclass'>~typename~</a></li>"}
            <li><a href="[field:typelink/]">[field:typename/]</a></li>
        {/dede:channel}
    </ul>
</nav>

代码解析

  1. {dede:channel type='top' ...}:循环输出所有顶级栏目。
  2. currentstyle="...":这个属性定义了一个模板字符串。
    • 当循环到的当前栏目页面所在栏目**或其子栏目**匹配时,DedeCMS 就会用这个模板来渲染这一项。
    • ~typelink~~typename~currentstyle 中的特殊变量,会被替换成对应栏目的链接和名称。
    • class='thisclass' 是 DedeCMS 默认添加的当前栏目样式类,你也可以自定义,如 class='active'
  3. 最终效果
    • 如果用户在首页,导航会正常渲染。
    • 如果用户进入了“产品中心”或其下的任何子栏目(如“产品A”),导航栏中“产品中心”这一项的 HTML 代码就会变成:
      <li class="active"><a href="/plus/list.php?tid=3" class="thisclass">产品中心</a></li>
    • 这样你就可以通过 CSS (.active { color: #ff0000; }) 来实现高亮效果。
你的需求 应该如何写 {dede:channel}
获取所有顶级栏目(主导航) {dede:channel type='top'}{dede:channel}
获取某个栏目(ID=5)的直接子栏目 {dede:channel typeid='5'}
获取当前栏目的同级栏目 {dede:channel type='son' reid='~typeid~'}
获取当前栏目的所有下级栏目(包括多级) {dede:channel type='self' typeid='~typeid~'}
调用顶级栏目,并限制数量为5个 {dede:channel type='top' row='5'}
调用顶级栏目,并给当前栏目高亮 {dede:channel type='top' currentstyle='...'}

掌握 typeid 的用法是玩转 DedeCMS 模板的第一步,多加练习和尝试不同的组合,你就能轻松构建出各种复杂的栏目列表了。

-- 展开阅读全文 --
头像
C语言如何获取OSVersionInfo系统版本信息?
« 上一篇 2025-12-10
float和double到底有何区别?
下一篇 » 2025-12-10

相关文章

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

目录[+]