调用分类信息主要通过 DedeCMS 的 arclist 标签和 sql 标签来实现,下面我将分门别类地介绍各种常用的调用方法。

准备工作:确保模型和栏目正确设置
在调用之前,请确保你已经正确设置了分类信息:
-
模型管理:
- 进入
后台->核心->内容模型管理->添加模型。 - 创建一个用于分类信息的模型,分类信息”,你可以添加自定义字段,如“联系人”、“电话”、“价格”、“地址”等。
- 进入
-
栏目管理:
- 进入
后台->栏目->添加栏目。 - 选择你刚才创建的“分类信息”模型。
- 关键步骤:在“栏目选项”中,务必勾选“使用栏目交叉功能”,这是调用子栏目的前提。
- 创建多个子栏目,招聘信息”、“房屋租赁”、“二手交易”等,并将它们设置为顶级栏目“分类信息”的子栏目。
- 进入
使用 arclist 标签调用
arclist 是最常用、最灵活的调用标签,适合调用单个子栏目或多个指定栏目的信息。

调用指定单个栏目的信息
这是最基础的用法,用于调用某一个特定栏目(如 ID 为 5 的“招聘信息”)的最新内容。
{dede:arclist typeid='5' titlelen='30' row='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:arclist}
参数说明:
typeid='5':指定要调用的栏目 ID,如果留空typeid='',则默认调用当前栏目的内容,len='30'`:标题长度,截取 30 个字符。row='10':获取文章的数量,这里是 10 条。orderby='pubdate':排序方式,按发布时间排序,其他选项有hot(浏览量)、click(点击量)、id(文章ID) 等。orderway='desc':排序方式,desc为降序(最新在前),asc为升序。[field:arcurl/]:文章的链接地址。[field:title/]。[field:pubdate/]:发布日期,可以使用function进行格式化,如MyDate('Y-m-d',@me)。
调用多个指定栏目的信息
如果需要同时调用几个不同子栏目的信息,用逗号隔开栏目 ID 即可。
{dede:arclist typeid='5,6,7' titlelen='30' row='10'}
<li>
<span class="category">[field:typename/]</span>
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:arclist}
typeid='5,6,7':同时调用 ID 为 5、6、7 的三个栏目的信息。[field:typename/]:显示文章所属的栏目名称。
调用顶级栏目及其所有子栏目的信息
这是非常常见的需求,例如调用“分类信息”这个顶级栏目下的所有内容(包括其所有子栏目)。

使用 topid 和 typeid 组合
{dede:arclist typeid='5' topid='5' row='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:arclist}
typeid='5':指定顶级栏目 ID。topid='5':表示调用顶级栏目为 ID 5 的所有子栏目的内容,这个组合是实现此功能的关键。
使用 channel 标签获取顶级栏目 ID,再嵌套 arclist
更灵活的方式是先获取顶级栏目 ID,再进行调用。
{dede:channel type='top' typeid='5'}
{dede:arclist typeid='[field:id/]' topid='[field/id/]' row='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:arclist}
{/dede:channel}
这种方法在模板结构上更清晰,适合复杂的调用场景。
使用 sql 标签调用
当 arclist 标签无法满足复杂的查询需求时(需要根据自定义字段进行筛选),sql 标签是更强大的选择。
调用指定分类信息表的数据
DedeCMS 的分类信息通常存储在 dede_addonarticle 表中(如果你的模型名称是“分类信息”),你需要通过 JOIN 关联主表 dede_archives 来获取标题、链接等信息。
示例:调用顶级栏目 ID 为 5 的所有招聘信息,并按自定义字段“price”排序
{dede:sql sql="
SELECT a.id, a.title, a.pubdate, t.body, t.price
FROM dede_archives AS a
JOIN dede_addonarticle AS t ON a.id = t.aid
WHERE a.typeid IN (
SELECT id FROM dede_arctype WHERE topid = 5
)
ORDER BY t.price DESC
LIMIT 0, 10
"}
<li>
<a href="[field:arcurl function='str_replace("~","",$cfg_cmspath)"/]/plus/view.php?aid=[field:id/]">[field:title/]</a>
<span>价格:[field:price/] 元</span>
</li>
{/dede:sql}
代码解析:
sql="...":这里是完整的 SQL 查询语句。SELECT ... FROM dede_archives AS a JOIN dede_addonarticle AS t ON a.id = t.aid:关联主表和附加表,以获取标题和自定义字段。WHERE a.typeid IN (SELECT id FROM dede_arctype WHERE topid = 5):这个子查询用于找到顶级栏目 ID 为 5 的所有子栏目的 ID,IN关键字确保只查询这些子栏目下的文章。ORDER BY t.price DESC:按附加表中的price字段降序排列。LIMIT 0, 10:限制返回 10 条记录。[field:arcurl function='str_replace("~","",$cfg_cmspath)"/]/plus/view.php?aid=[field:id/]:由于sql标签默认不生成文章链接,我们需要手动构造。[field:id/]是文章 ID,plus/view.php?aid=是 DedeCMS 默认的文章查看链接。[field:price/]:直接调用附加表中的price字段值。
调用自定义字段
无论使用 arclist 还是 sql,调用自定义字段的方法都是一样的。
假设你在“分类信息”模型中添加了一个名为 contact (联系人) 的自定义字段。
在 arclist 中调用:
arclist 默认不调用附加表字段,需要使用 array 属性来指定。
{dede:arclist typeid='5' row='5' addfields='contact,phone'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<p>联系人:[field:contact/]</p>
<p>电话:[field:phone/]</p>
</li>
{/dede:arclist}
addfields='contact,phone':指定需要调用的附加表字段名,多个用逗号隔开。
在 sql 中调用:
如上面的 SQL 示例所示,直接在 SELECT 语句中写出字段名即可,如 t.contact, t.phone。
总结与最佳实践
| 调用需求 | 推荐标签 | 示例代码片段 |
|---|---|---|
| 调用单个栏目 | arclist |
{dede:arclist typeid='5' row='10'}... |
| 调用多个指定栏目 | arclist |
{dede:arclist typeid='5,6,7' row='10'}... |
| 调用顶级栏目及其所有子栏目 | arclist (推荐) |
{dede:arclist typeid='5' topid='5' row='10'}... |
| 根据自定义字段排序或筛选 | sql |
{dede:sql sql="SELECT ... WHERE t.price > 100 ..."}... |
| 调用自定义字段 | arclist / sql |
arclist 用 addfields;sql 直接在 SELECT 中写字段名。 |
建议:
- 优先使用
arclist:它的性能较好,且模板标签简洁,能满足大部分调用需求。 - 谨慎使用
sql:虽然sql功能强大,但直接写 SQL 语句有安全风险(注意 SQL 注入),并且当网站数据量大时,复杂的 SQL 查询可能会影响页面加载速度,仅在arclist无法满足需求时使用。 - 善用缓存:DedeCMS 有自己的缓存机制,对于不常更新的调用内容(如首页推荐信息),可以在后台开启“仅动态浏览”或使用缓存标签,以提升网站性能。
希望这份详细的教程能帮助你熟练掌握 DedeCMS 分类信息的调用!
