dede channel如何调用指定子栏目?

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

核心标签解析

  1. {dede:channelartlist}:

    dede channel 调用指定子栏目
    (图片来源网络,侵删)
    • 作用: 这个标签用于获取一个或多个指定父栏目及其下的子栏目列表,它本身会循环父栏目。
    • 关键属性:
      • typeid: 核心属性,用于指定要调用的父栏目ID,如果指定多个ID,用英文逗号隔开,typeid='1,3',如果不指定 typeid,则默认调用当前栏目的所有同级栏目和它的子栏目。
      • row: 显示的父栏目数量。
  2. {dede:channel}:

    • 作用: 在 {dede:channelartlist} 的循环内部,用于获取当前父栏目下的子栏目列表。
    • 关键属性:
      • typeid: 在 channelartlist 内部使用时,这个属性可以省略,它会自动获取当前循环到的父栏目的ID。
      • row: 显示的子栏目数量。
      • type: 'son' 表示显示所有子栏目,默认值就是 'son',所以通常可以不写。

调用指定一个父栏目的所有子栏目

这是最常见的需求,在网站首页调用 "产品中心" 栏目下的所有产品分类。

假设 "产品中心" 栏目的 ID 是 5。

代码示例:

dede channel 调用指定子栏目
(图片来源网络,侵删)
{dede:channelartlist typeid='5'}
    <h2>{dede:field name='typename'/}</h2>
    <ul>
        {dede:channel type='son'}
        <li>
            <a href="[field:typelink/]">[field:typename/]</a>
        </li>
        {/dede:channel}
    </ul>
{/dede:channelartlist}

代码解释:

  1. {dede:channelartlist typeid='5'}:

    • typeid='5' 指定了我们要操作的父栏目是 ID 为 5 的 "产品中心"。
    • 这段代码会先找到 ID 为 5 的栏目,并将其信息(如栏目名称)提供给内部的 {dede:field name='typename'}
  2. <h2>{dede:field name='typename'}/}</h2>:

    • channelartlist 内部的 {dede:field} 标签用于获取父栏目的信息。
    • name='typename' 获取的是父栏目(ID=5)的名称,即 "产品中心"。
  3. {dede:channel type='son'}:

    dede channel 调用指定子栏目
    (图片来源网络,侵删)
    • 这个标签在 channelartlist 内部,它会自动获取当前父栏目(ID=5)下的所有子栏目。
    • type='son' 是默认值,可以省略,明确写上有助于理解代码。
  4. [field:typelink/][field:typename/]:

    • 这是 channel 标签内的底层字段,用于获取子栏目的信息。
    • [field:typelink/]: 子栏目的链接地址。
    • [field:typename/]: 子栏目的名称。

调用指定多个父栏目的子栏目

在首页同时展示 "产品中心" (ID=5) 和 "新闻资讯" (ID=7) 下的所有子栏目。

代码示例:

{dede:channelartlist typeid='5,7'}
    <h2>{dede:field name='typename'/}</h2>
    <ul>
        {dede:channel type='son'}
        <li>
            <a href="[field:typelink/]">[field:typename/]</a>
        </li>
        {/dede:channel}
    </ul>
{/dede:channelartlist}

代码解释:

  • 唯一的区别在于 typeid='5,7',用英文逗号分隔了多个父栏目ID。
  • channelartlist 会依次循环 ID 为 5 和 ID 为 7 的父栏目,每次循环都会输出一个 <h2> 和对应的子栏目列表。

只调用指定父栏目的前 N 个子栏目

"产品中心" (ID=5) 下有很多子栏目,但我们只想在首页显示前 4 个。

代码示例:

{dede:channelartlist typeid='5'}
    <h2>{dede:field name='typename'/}</h2>
    <ul>
        {dede:channel row='4' type='son'}
        <li>
            <a href="[field:typelink/]">[field:typename/]</a>
        </li>
        {/dede:channel}
    </ul>
{/dede:channelartlist}

代码解释:

  • {dede:channel} 标签中增加了 row='4' 属性,这限制了输出的子栏目数量为 4 个。

在当前栏目页调用其子栏目

这是一个非常实用的场景,你进入了 "产品中心" (ID=5) 这个栏目页,你希望在这个页面里直接列出它下面的所有产品分类。

代码示例:

{dede:channelartlist}
    <h2>{dede:field name='typename'/}</h2>
    <ul>
        {dede:channel type='son'}
        <li>
            <a href="[field:typelink/]">[field:typename/]</a>
        </li>
        {/dede:channel}
    </ul>
{/dede:channelartlist}

代码解释:

  • 这次 {dede:channelartlist} 没有指定 typeid
  • typeid 不存在时,channelartlist 会默认获取当前栏目及其同级栏目
  • 由于我们只关心当前栏目,所以内部的 {dede:channel type='son'} 会完美地调用出当前栏目的所有子栏目,这个方法非常方便,无需手动查找当前栏目的ID。

其他相关标签(补充)

虽然 channelartlist 是最推荐的方法,但了解其他方法也有助于你处理不同需求。

{dede:channel} 单独使用

如果你想调用所有顶级栏目(一级栏目),可以这样用:

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

{dede:sql} 自定义SQL查询(最灵活)

如果以上方法无法满足你的复杂需求(根据特定条件筛选子栏目),你可以直接使用SQL标签。

示例:调用 ID 为 5 的父栏目下,且 arcrank (文章状态) 为 -1 (正常) 的子栏目。

{dede:sql sql='SELECT id, typename, typelink FROM `dede_arctype` WHERE reid = 5 AND arcrank = -1 ORDER BY sortrank ASC'}
    <li><a href='[field:typelink/]'>[field:typename/]</a></li>
{/dede:sql}

代码解释:

  • sql='...': 在这里写你的 SQL 查询语句。
  • dede_arctype: DedeCMS 存储栏目的数据表。
  • reid = 5: reid 字段存储的是父栏目的ID。reid = 5 就是查找父ID为5的所有子栏目。
  • [field:typelink/][field:typename/]: sql 标签也可以使用底层字段来获取查询结果。

总结与最佳实践

场景 推荐标签 关键属性
调用指定父栏目的子栏目 {dede:channelartlist} + {dede:channel} typeid='父栏目ID'
调用多个父栏目的子栏目 {dede:channelartlist} + {dede:channel} typeid='ID1,ID2'
限制子栏目数量 {dede:channelartlist} + {dede:channel} {dede:channel}中使用 row='N'
在当前栏目页调用子栏目 {dede:channelartlist} + {dede:channel} 不指定 typeid
调用所有顶级栏目 {dede:channel}
-- 展开阅读全文 --
头像
HTML5网站、微信运营、织梦模板如何协同?
« 上一篇 2025-12-01
fprintf和printf到底有啥区别?
下一篇 » 2025-12-01

相关文章

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

目录[+]