dede channel调用怎么写?参数用法有哪些?

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

{dede:channel} 标签主要用于获取网站栏目的列表信息,通常用于制作网站的导航栏、侧边栏的栏目列表、面包屑导航等。


基础语法

{dede:channel} 标签的基本语法如下:

{dede:channel}
    <a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}
  • {dede:channel}{/dede:channel} 是标签的开始和结束。
  • [field:typelink/] 是一个字段,表示栏目的链接地址。
  • [field:typename/] 是一个字段,表示栏目的名称。

最简单的应用示例(制作主导航):

假设你的网站有几个顶级栏目,你想把它们显示在网站顶部,可以这样写:

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

核心属性详解

{dede:channel} 的强大之处在于它的各种属性,通过组合这些属性可以实现不同的调用效果。

type - 栏目类型(最常用)

  • top: 调用顶级栏目,这是默认值,会获取所有没有被其他栏目包含的一级栏目。
  • son: 调用当前栏目的子栏目,必须在使用此标签的页面中指定当前栏目ID(通过 typeid 属性),否则调用失败。
  • self: 调用当前栏目及其所有子栏目,同样需要指定 typeid
  • sun: 调用指定栏目ID下的所有子栏目(多级)

示例:

  • 调用顶级栏目(主导航)

    {dede:channel type='top'}
        <a href="[field:typelink/]">[field:typename/]</a>
    {/dede:channel}
  • 调用指定栏目ID为3的子栏目(产品分类的子分类)

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

typeid - 指定栏目ID

这个属性用于指定要操作的栏目,当 typesonself 时,typeid 是必须的,你也可以用它来指定一个或多个顶级栏目(用逗号隔开),type 属性可以省略。

示例:

  • 只调用栏目ID为2和5的栏目
    {dede:channel typeid='2,5'}
        <a href="[field:typelink/]">[field:typename/]</a>
    {/dede:channel}

row - 调用栏目数量

指定要调用的栏目数量,默认为调用所有符合条件的栏目。

示例:

  • 只调用前5个顶级栏目
    {dede:channel type='top' row='5'}
        <a href="[field:typelink/]">[field:typename/]</a>
    {/dede:channel}

currentstyle - 当前栏目样式

这是一个非常实用的属性,用于高亮显示当前所在的栏目,当用户访问某个栏目页面时,这个栏目对应的链接会应用你指定的样式。

语法: currentstyle='<a href="[field:typelink/]" class="active">[field:typename/]</a>'

示例:

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

工作原理:

  • 当访问首页时,{dede:channel} 会正常输出所有顶级栏目。
  • 当你点击并进入“关于我们”栏目页面时,{dede:channel} 会自动检测到当前栏目是“关于我们”,然后输出 currentstyle 中定义的代码,即 <a href="..." class="active">关于我们</a>,而其他栏目则输出普通的 <a>

常用字段列表

在标签内部,[field:xxx/] 用于输出栏目的各种信息。

字段名 说明 示例
typename 栏目名称 [field:typename/]
typelink 栏目链接 [field:typelink/]
id 栏目ID [field:id/]
description 栏目描述 [field:description/]
seotitle 栏目SEO标题 [field:seotitle/]
keywords 栏目关键词 [field:keywords/]
content 栏目介绍(内容) [field:content/]
typedir 栏目目录(路径) [field:typedir/]
litpic 栏目缩略图 <img src="[field:litpic/]" alt="[field:typename/]">

综合实例

实例1:带缩略图和描述的侧边栏栏目列表

假设我们要在侧边栏调用一个栏目(ID为4)下的所有子栏目,并显示每个子栏目的缩略图、名称和描述。

<div class="sidebar-category">
    <h3>产品分类</h3>
    <ul>
        {dede:channel type='son' typeid='4'}
        <li>
            <a href="[field:typelink/]">
                <img src="[field:litpic/]" alt="[field:typename/]" />
                <h4>[field:typename/]</h4>
                <p>[field:description function='cn_substr(@me, 50)'/]</p>
            </a>
        </li>
        {/dede:channel}
    </ul>
</div>

说明:

  • typeid='4' 指定了父栏目ID。
  • type='son' 调用其子栏目。
  • [field:litpic/] 调用栏目缩略图。
  • [field:description function='cn_substr(@me, 50)'/] 调用栏目描述,并用 cn_substr 函数截取前50个字符,防止过长。

实例2:面包屑导航

面包屑导航通常使用 {dede:field name='position' /} 标签,但它的原理也是基于 {dede:channel},如果你想自定义面包屑的样式,可以这样做:

<div class="breadcrumb">
    <a href="/">首页</a>
    {dede:field name='position' runphp='yes'}
        // 这是一个更高级的用法,通过PHP代码来处理面包屑字符串
        // 将 > 替换为 /
        $aaa = str_replace(' >', ' / ', @me);
        @me = $aaa;
    {/dede:field}
</div>

对于面包屑,直接使用 {dede:field name='position' /} 是最简单直接的方法。


常见问题与注意事项

  1. 为什么调不出来子栏目?

    • 原因:最常见的原因是忘记指定 typeid 属性,当 type='son'type='self' 时,系统必须知道是哪个栏目的子栏目,typeid 是必需的。
    • 解决:确保在标签中写上了正确的栏目ID,typeid='5'
  2. currentstyle 不生效?

    • 原因:通常是因为 typeidtype 的组合不正确,你在顶级栏目页面(首页)调用,但 typeid 指定的是二级栏目,currentstyle 就无法正确匹配。
    • 解决:确保 currentstyle 的使用场景正确,通常用于调用顶级栏目 (type='top') 来高亮主导航。
  3. 栏目链接打不开,显示404?

    • 原因:DedeCMS 的栏目链接有两种形式:动态链接(如 plus/list.php?tid=1)和静态链接(如 category/1.html),如果你的网站开启了伪静态,但栏目内容页没有生成对应的静态HTML文件,就会导致404。
    • 解决:进入后台“生成” -> “一键更新网站” -> “更新栏目HTML”,重新生成所有栏目页。

希望这份详细的教程能帮助你完全掌握 {dede:channel} 标签的使用!

-- 展开阅读全文 --
头像
织梦5.7如何获取当前栏目ID?
« 上一篇 02-03
dede 自定义表单 验证码
下一篇 » 02-03
取消
微信二维码
支付宝二维码