在织梦(DedeCMS)系统中,调用子栏目是网站内容展示的常见需求,尤其是在导航栏、侧边栏或内容列表页中,织梦提供了多种标签和方法来实现子栏目的调用,开发者可以根据实际需求选择合适的方式,以下将详细介绍织梦调用子栏目的常用方法、参数配置及注意事项。

使用 {dede:channel} 调用子栏目
{dede:channel} 是织梦中最基础的栏目调用标签,支持递归调用子栏目,通过设置 typeid、 reid、 type 等属性,可以灵活控制栏目的显示范围和层级。
基本语法
{dede:channel type='son' typeid='父栏目ID'}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}
参数说明
typeid:指定父栏目的ID,若不设置则默认调用当前栏目的子栏目。type:栏目类型,可选值包括son(仅显示子栏目)、self(仅显示同级栏目)、top(显示顶级栏目)。reid:与typeid类似,用于指定父栏目ID。row:显示数量,默认为10,可通过row='数值'限制显示条数。currentstyle:当前栏目的样式,currentstyle="<a href='[field:typelink/]' class='current'>[field:typename/]</a>"。
示例代码
假设父栏目ID为1,调用其所有子栏目并限制显示5条:
{dede:channel type='son' typeid='1' row='5'}
<li><a href="[field:typelink/]">[field:typename/]</a></li>
{/dede:channel}
使用 {dede:channelartlist} 调用子栏目及内容
{dede:channelartlist} 是一个更高级的标签,用于调用指定父栏目的子栏目及其内容,常用于首页或列表页的多栏目展示。
基本语法
{dede:channelartlist typeid='父栏目ID'}
<h2>{dede:field name='typename'/}</h2>
{dede:arclist titlelen='30' row='5'}
<a href="[field:arcurl/]">[field:title/]</a>
{/dede:arclist}
{/dede:channelartlist}
参数说明
typeid:父栏目ID,若不设置则默认调用顶级栏目。channelid:指定调用的栏目ID,与typeid类似。listlen:子栏目名称长度限制。innertext:自定义模板内容,支持子标签的嵌套。
示例代码
调用栏目ID为2的子栏目,并显示每个子栏目的最新5条文章:

{dede:channelartlist typeid='2'}
<div class="channel-item">
<h3>{dede:field name='typename'/}</h3>
<ul>
{dede:arclist titlelen='20' row='5'}
<li><a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a></li>
{/dede:arclist}
</ul>
</div>
{/dede:channelartlist}
使用 {dede:sql} 自定义调用子栏目
如果默认标签无法满足需求,可以通过 {dede:sql} 直接执行SQL语句调用子栏目,此方法需要一定的SQL基础,灵活性较高。
基本语法
{dede:sql sql="SELECT id,typename,typedir FROM `dede_arctype` WHERE reid=父栏目ID"}
<a href="[field:typedir function='str_replace("{cmspath}","",@me)'/]">[field:typename/]</a>
{/dede:sql}
参数说明
sql:自定义SQL查询语句,需确保表名前缀正确(默认为dede_)。function:对字段值进行处理,例如去除路径中的{cmspath}。
示例代码
调用栏目ID为3的子栏目,并按排序字段 sortrank 降序排列:
{dede:sql sql="SELECT id,typename,typedir FROM `dede_arctype` WHERE reid=3 ORDER BY sortrank DESC"}
<li><a href="[field:typedir function='str_replace("{cmspath}","",@me)'/]">[field:typename/]</a></li>
{/dede:sql}
调用子栏目的注意事项
- 栏目ID准确性:确保
typeid或reid参数正确,否则可能导致调用失败或显示错误栏目。 - 模板路径:使用
typelink或typedir时,需注意织梦的路径变量{cmspath},避免链接错误。 - 性能优化:避免在首页或高频访问页面中调用过多子栏目,可通过
row参数限制数量。 - 缓存机制:织梦默认开启模板缓存,修改标签后需更新缓存(后台“生成”-“更新HTML”)。
子栏目调用参数对照表
以下为常用参数的快速参考:
| 参数名 | 说明 | 示例值 |
|---|---|---|
typeid |
父栏目ID | typeid='1' |
type |
栏目类型(son/self/top) | type='son' |
row |
显示数量 | row='5' |
currentstyle |
当前栏目样式 | currentstyle="<b>[field:typename/]</b>" |
innertext |
自定义模板内容 | {dede:field name='typename'} |
相关问答FAQs
问题1:为什么调用子栏目时显示为空?
解答:可能原因包括父栏目ID错误、子栏目未发布或被禁用、模板缓存未更新,建议检查 typeid 是否正确,并确保子栏目状态为“正常”,最后在后台点击“更新缓存”重新生成页面。

问题2:如何实现子栏目调用并显示文章数量?
解答:可以通过自定义SQL查询 dede_arctype 表并关联 dede_archives 表统计文章数量,示例代码如下:
{dede:sql sql="SELECT a.id,a.typename, COUNT(b.id) as arcnum FROM `dede_arctype` a LEFT JOIN `dede_archives` b ON a.id=b.typeid WHERE a.reid=1 GROUP BY a.id"}
<a href="[field:typedir function='str_replace("{cmspath}","",@me)'/]">[field:typename/] ([field:arcnum/])</a>
{/dede:sql}
此方法会显示每个子栏目的名称及对应的文章数量。
