在dedecms内容页中调用副栏目是网站开发中常见的需求,尤其是在内容分类较多且存在主副栏目关联的情况下,副栏目的调用可以帮助用户更快速地访问相关内容,提升网站的导航体验和内容关联性,以下将详细介绍dedecms内容页调用副栏目的实现方法,包括代码示例、注意事项及常见问题解决。

dedecms内容页调用副栏目的核心思路是通过获取当前文章的副栏目ID,然后利用栏目列表或arclist标签调用相关内容,具体实现步骤如下:
获取副栏目ID
在dedecms中,文章的副栏目存储在dede_archives
表的typeid
字段(主栏目)和sortrank
字段(副栏目ID,需通过配置开启),默认情况下,副栏目需要手动添加,且需确保后台“系统参数-核心设置”中是否启用了“支持多级栏目”和“副栏目”功能,若已启用,可通过以下代码获取副栏目ID:
{dede:field name='typeid' function='GetTopid(@me)'/}
此代码获取的是主栏目ID,若需获取副栏目ID,需结合数据库查询或自定义函数实现,建议在include/common.func.php中添加自定义函数:
function GetSubTypeid($aid) { global $dsql; $query = "SELECT dede_addonarticle.typeid FROM dede_addonarticle WHERE aid='$aid'"; $row = $dsql->GetOne($query); return $row['typeid']; }
调用副栏目内容
获取副栏目ID后,可通过arclist
或list
标签调用该栏目的文章,以下为常用代码示例:

调用副栏目标题
{dede:field name='typeid' function='GetSubTypeid(@me)'/}
调用副栏目下的文章列表
{dede:arclist typeid='[field:typeid function="GetSubTypeid(@me)"/]' row='5' titlelen='30'} <li><a href="[field:arcurl/]">[field:title/]</a></li> {/dede:arclist}
调用副栏目名称及链接
{dede:field name='typeid' function='GetSubTypeid(@me)'/} {dede:channel type='self' typeid='[field:typeid function="GetSubTypeid(@me)"/]'} <a href="[field:typelink/]">[field:typename/]</a> {/dede:channel}
注意事项
- 权限配置:确保模板文件对
include/common.func.php
有读取权限,否则自定义函数无法生效。 - 栏目关联:副栏目需在文章编辑时手动选择,否则无法获取相关ID。
- 标签参数:
arclist
标签中的typeid
参数需动态传入,避免硬编码导致调用错误。 - 缓存问题:若修改后未显示效果,可尝试清除后台“系统-SQL命令行工具”中的缓存表。
常见问题与解决方案
以下是实际操作中可能遇到的问题及解决方法:
| 问题现象 | 可能原因 | 解决方案 |
|----------|----------|----------|无法显示 | 未正确获取副栏目ID | 检查GetSubTypeid
函数是否添加到common.func.php
,并确认文章是否设置了副栏目 |重复 | arclist
标签未设置row
参数 | 明确指定row
值,如row='5'
限制显示数量 |
| 链接跳转错误 | 栏目ID与实际不符 | 使用{dede:field name='typeid'/}
打印主栏目ID,对比副栏目ID是否正确 |
相关问答FAQs
问题1:为什么调用副栏目时显示空白?
解答:通常是因为文章未设置副栏目或自定义函数未正确加载,请检查文章编辑页面的“副栏目”选项是否已选择,并确认common.func.php
中的GetSubTypeid
函数语法无误,若问题依旧,可尝试直接在模板中硬编码副栏目ID测试是否为函数调用问题。
问题2:如何调用多个副栏目的内容?
解答:若文章关联多个副栏目,需修改GetSubTypeid
函数以返回数组或逗号分隔的ID字符串,然后在arclist
标签中使用typeid='id1,id2'
格式,修改函数为:

function GetSubTypeids($aid) { global $dsql; $query = "SELECT GROUP_CONCAT(typeid) FROM dede_addonarticle WHERE aid='$aid'"; $row = $dsql->GetOne($query); return $row['GROUP_CONCAT(typeid)']; }
调用时使用:
{dede:arclist typeid='[field:typeid function="GetSubTypeids(@me)"/]' row='10'}
通过以上方法,可灵活实现dedecms内容页副栏目的调用,满足不同场景下的内容展示需求,实际操作中需根据网站结构调整代码,并注意测试验证。