使用 {dede:channelartlist} 标签(推荐,最常用)
这个标签专门用于获取指定父栏目下的所有子栏目,并且可以循环输出每个子栏目下的文章列表,这是实现“主栏目下子栏目”调用的最佳方式。
标签结构
{dede:channelartlist typeid='父栏目ID'}
<h2><a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a></h2>
<ul>
{dede:arclist titlelen='30' row='8'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:arclist}
</ul>
{/dede:channelartlist}
参数详解
-
{dede:channelartlist typeid='父栏目ID'}typeid: 这是最关键的参数,你需要填写你想要调用的父栏目(主栏目)的ID。- 如果你想调用当前所在栏目的父栏目下的所有子栏目,可以使用
typeid='~typeid~'。 - 如果不填写
typeid,默认会调用顶级栏目。
-
{dede:field name='typeurl'/}- 输出当前循环到的子栏目的链接地址。
-
{dede:field name='typename'/}- 输出当前循环到的子栏目的名称。
-
{dede:arclist ...}- 这个标签嵌套在
{dede:channelartlist}内部,用于循环输出当前子栏目下的文章列表。 titlelen='30': 标题长度,截取30个字符。row='8': 调用文章的数量,调用8篇。- 你可以在这个标签内使用所有
arclist标签支持的属性,如orderby='hot'(按热调),idlist=''(指定文章ID) 等。
- 这个标签嵌套在
使用 {dede:channel} 标签(仅调用子栏目列表)
如果你的需求仅仅是显示子栏目的列表,而不需要在每个子栏目下再显示文章,那么使用 {dede:channel} 会更简单。
标签结构
{dede:channel type='son' typeid='父栏目ID'}
<a href="[field:typeurl/]">[field:typename/]</a>
{/dede:channel}
参数详解
-
{dede:channel type='son' typeid='父栏目ID'}typeid: 同样,填写父栏目(主栏目)的ID。type='son': 这是核心参数,表示只调用指定栏目ID下的直接子栏目(一级子栏目)。
-
[field:typeurl/]和[field:typename/]分别输出子栏目的链接和名称。
如何获取父栏目ID?
在织梦后台,将鼠标移动到“栏目名称”上,浏览器左下角状态栏会显示该栏目的链接,cid= 后面的数字就是该栏目的ID。
使用SQL标签 {dede:sql} (最灵活,适合复杂需求)
如果你的需求非常特殊,比如需要跨栏目调用,或者需要获取一些额外的自定义字段信息,那么可以直接使用SQL查询。
标签结构
{dede:sql sql='SELECT id,typename,typedir FROM `dede_arctype` WHERE reid = 父栏目ID ORDER BY id'}
<a href='/[field:typedir/]/'>[field:typename/]</a>
{/dede:sql}
参数详解
sql: 这里是标准的MySQL查询语句。dede_arctype: 这是织梦存放栏目的数据表(如果你的前缀不是dede_,请修改)。reid = 父栏目ID:reid字段存储的是父栏目的ID,这里你需要手动填入你想要调用的父栏目ID。ORDER BY id: 按栏目ID排序,你也可以用sortrank排序。
[field:typedir/]和[field:typename/]: 输出查询结果中的对应字段。
注意: 使用SQL标签需要你对织梦的数据表结构有一定了解,并且要注意SQL注入的风险,确保 父栏目ID 是一个确定的数字。
总结与对比
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
{dede:channelartlist} |
功能最强大,结构清晰,可同时输出子栏目列表及其下的文章。 | 标签层级稍多,理解成本略高。 | 网站首页、栏目页,需要展示“栏目+其下推荐文章”的经典布局。 |
{dede:channel} |
标签简单,调用速度快,只获取子栏目信息。 | 功能单一,无法直接调用子栏目下的文章。 | 仅需要展示一个纯子栏目导航列表时,如页脚的“产品分类”。 |
{dede:sql} |
灵活性最高,可以获取任何你想要的字段,不受限于默认标签。 | 需要懂SQL,有安全风险,可读性差。 | 调用自定义字段、跨栏目调用、实现复杂逻辑等特殊需求。 |
对于绝大多数情况,强烈推荐使用第一种方法 {dede:channelartlist},因为它完美地契合了“调用主栏目下子栏目”这一需求,并且功能全面。
