核心思路
调用指定的二级栏目的核心思路是:先定位到它的“父栏目”,然后在该父栏目下调用它的“子栏目”(也就是二级栏目)。

关键在于获取到父栏目的ID。
使用 {dede:channelartlist} 标签(推荐,最灵活)
这是最推荐的方法,因为它可以非常精确地控制,并且代码结构清晰。{dede:channelartlist} 专门用于调用指定栏目及其子栏目。
适用场景:当您想在页面的某个特定位置,只显示某一个一级栏目下的所有二级栏目时。
步骤:

-
找到父栏目ID:登录DedeCMS后台,进入【栏目管理】,找到您想要调用的二级栏目所属的那个一级栏目,记下它的栏目ID,假设“产品中心”是一级栏目,它的ID是
2。 -
使用模板标签:在您需要调用栏目的模板文件(通常是
index.htm或其他自定义页面模板)中,使用以下代码:
{dede:channelartlist typeid='2'}
<h2>{dede:field name='typename'/}</h2>
<ul>
{dede:channel type='son' noself='yes'}
<li>
<a href="[field:typelink/]">[field:typename/]</a>
</li>
{/dede:channel}
</ul>
{/dede:channelartlist}
代码详解:
-
{dede:channelartlist typeid='2'}:
(图片来源网络,侵删)typeid='2':这是最关键的部分。typeid指定了要调用的一级栏目的ID,这里我们填写步骤1中找到的ID2。- 这个标签会循环输出
typeid指定的栏目信息。{dede:field name='typename'}就会输出“产品中心”这个名称。
-
{dede:channel type='son' noself='yes'}:- 这个标签被放在
{dede:channelartlist}内部,它会在当前循环的父栏目(即ID为2的“产品中心”)下查找子栏目。 type='son':明确表示只调用子栏目。noself='yes':表示不调用栏目本身(即不显示“产品中心”这个链接),只显示它的子栏目,如果您的二级栏目可能还有三级栏目,并且也想显示,可以去掉这个属性或改为type='sun'。
- 这个标签被放在
-
[field:typelink/]和[field:typename/]:[field:typelink/]:输出子栏目的链接地址。[field:typename/]:输出子栏目的名称。
使用 {dede:channel} 标签配合 typeid 属性(最简单)
如果您的需求非常简单,只是想在某个地方列出几个不相关的二级栏目,并且它们的父栏目都已知,可以直接使用 适用场景:调用几个不同父栏目下的二级栏目,且它们的ID是已知的。 步骤: 找到所有需要调用的二级栏目的ID,您想调用ID为 使用模板标签: 代码详解: 当需要非常复杂的条件判断时(只调用某个特定模型下的二级栏目),直接在模板中写SQL语句是最强大的方法。 适用场景:需要根据栏目模型、关键字等复杂条件来筛选二级栏目。 步骤: 找到父栏目ID,同方法一,假设父栏目ID为 使用 代码详解: 对于绝大多数情况,方法一 是您应该首先选择和使用的方案,它既安全又易于理解和维护。{dede:channel}
5, 6, 7 的这三个二级栏目。<h3>指定栏目列表</h3>
<ul>
{dede:channel typeid='5,6,7'}
<li>
<a href="[field:typelink/]">[field:typename/]</a>
</li>
{/dede:channel}
</ul>
{dede:channel typeid='5,6,7'}:
typeid 属性可以直接接受一个栏目ID的列表,用英文逗号 分隔。
结合SQL查询(最强大,最灵活)
2。{dede:sql}:<h3>通过SQL调用的二级栏目</h3>
<ul>
{dede:sql sql="SELECT id,typename,typedir FROM `dede_arctype` WHERE reid=2 AND ishidden<>1 ORDER BY sortrank"}
<li>
<a href="[field:typedir function='str_replace("{cmspath}","",@me)'/]">[field:typename/]</a>
</li>
{/dede:sql}
</ul>
{dede:sql sql="..."}:
sql 属性里是完整的MySQL查询语句。SELECT id,typename,typedir FROM dede_arctype:从栏目表 dede_arctype 中查询 id, typename, typedir 这三个字段。注意:如果你的表前缀不是 dede_,请替换成你自己的表前缀。WHERE reid=2:这是核心条件。reid 字段存储的是“父栏目ID”。reid=2 就表示只查找父栏目ID为2的所有栏目,也就是所有二级栏目。AND ishidden<>1:这是一个常用条件,表示不显示隐藏的栏目。ishidden=1 的栏目在后台设置为“隐藏”。ORDER BY sortrank:按照后台设置的“排序值”进行排序,保证顺序正确。[field:typedir function='str_replace("{cmspath}","",@me)'/]:
typedir 字段会包含 {cmspath} 这样的占位符,需要用 function 属性将其替换成真实的网站路径,才能生成正确的链接。
总结与选择建议
方法
优点
缺点
适用场景
方法一: channelartlist
代码结构清晰,符合DedeCMS逻辑,推荐首选
需要知道父栏目ID
调用某一个父栏目下的所有子栏目,这是最常见的需求。
方法二: channel
代码最简单,直接
需要预先知道所有目标栏目的具体ID
调用几个不相关的、已知的ID的栏目。
方法三: SQL查询
功能最强大,灵活性最高
代码相对复杂,需要了解SQL语句和表结构
需要根据复杂条件(如模型、关键字等)来筛选栏目。
