模型?
在 DedeCMS 中,内容模型 是定义不同类型内容“结构”的框架,默认情况下,DedeCMS 有一个“文章”模型,但你可以根据网站需求创建新的模型,

(图片来源网络,侵删)
- 产品模型:包含品牌、型号、价格、规格、产品图片集等字段。
- 下载模型:包含软件大小、授权方式、运行环境、下载链接等字段。
- 房产模型:包含价格、面积、户型、朝向、所在楼层等字段。
- 招聘模型:包含薪资、工作地点、学历要求、工作经验等字段。
每个模型都由一组自定义字段 组成,调用内容模型,本质上就是调用这些模型及其字段的数据。
调用方法总览
模型的数据主要有以下几种方式,由简到繁:
{dede:arclist}:主要用于调用文章模型的数据列表,最常用。{ded:list}:与arclist类似,用于调用文章列表,但通常与分页结合使用。{dede:sql}:最灵活、最强大的方法,可以直接写 SQL 语句查询任何模型的数据。{dede:loop}:用于循环执行任意代码,可以结合sql标签使用。{dede:field}:主要用于在内容详情页(如article_article.htm)中调用当前文章的自定义字段。
详细调用方法与示例
使用 {dede:arclist} 标签(主要用于文章模型)
arclist 是调用文章列表的利器,虽然主要用于“文章”模型,但通过 channelid 属性也可以调用其他模型。
基本语法:

(图片来源网络,侵删)
{dede:arclist typeid='' row='' titlelen='' orderby='' channelid=''}
<a href='[field:arcurl/]'>[field:title/]</a>
<p>[field:description function='cn_substr(@me,100)'/]...</p>
<small>发布时间:[field:pubdate function='MyDate('Y-m-d',@me)'/]</small>
{/dede:arclist}
常用属性说明:
| 属性名 | 说明 | 示例 |
|---|---|---|
typeid |
调用指定栏目ID下的文章,多个ID用逗号隔开。 | typeid='5,6' |
row |
调用文章的数量。 | row='10' |
orderby |
排序方式,常用值:pubdate(发布时间), click(点击量), id(文章ID), rand(随机)。 |
orderby='click' |
channelid |
关键属性! 指定要调用的模型ID,默认为1(文章模型)。 | channelid='2' (假设产品模型的ID是2) |
addfields |
关键属性! 当调用非文章模型时,需要指定要调用的自定义字段名,多个字段用逗号隔开。 | addfields='price,brand' |
innertext |
循环体内的模板代码,即每条记录的显示格式。 | - |
示例1:调用文章模型
{dede:arclist typeid='5' row='5' titlelen='20' orderby='pubdate'}
<li>
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
<span>[field:pubdate function='MyDate('m-d',@me)'/]</span>
</li>
{/dede:arclist}
示例2:调用“产品”模型(假设产品模型ID为2)
{dede:arclist channelid='2' typeid='10' row='4' addfields='price,brand' orderby='pubdate'}
<div class="product-item">
<a href="[field:arcurl/]">
<img src="[field:litpic/]" alt="[field:title/]">
<h3>[field:title/]</h3>
<p>品牌:[field:brand/]</p>
<p>价格:¥[field:price/]</p>
</a>
</div>
{/dede:arclist}
注意: 使用 addfields 后,在 innertext 中就可以直接通过 [field:字段名/] 来调用这些自定义字段了。

(图片来源网络,侵删)
使用 {dede:sql} 标签(最灵活)
当 arclist 无法满足需求时(需要跨栏目、跨模型进行复杂查询),sql 标签是你的终极武器。
基本语法:
{dede:sql sql='SELECT 字段 FROM 表名 WHERE 条件'}
[field:字段名/]
{/dede:sql}
核心难点: 你需要知道 DedeCMS 的表名和字段名。
常用数据表:
| 表名 | 说明 |
|---|---|
dede_archives |
文章主表,存放所有文章的公共信息(标题、发布时间、点击量等)。 |
dede_addonarticle |
文章附加表,存放文章模型的自定义字段(如作者、来源、内容等)。 |
dede_arctype |
栏目表。 |
dede_channeltype |
模型表,记录所有模型的信息。 |
dede_addonXX |
关键! 其他模型的附加表,XX 是模型的ID,产品模型ID为2,则附加表名为 dede_addon2。 |
示例1:查询并显示所有“产品”模型的数据(假设产品模型ID为2,附加表为dede_addon2)
{dede:sql sql='SELECT a.id, a.title, a.litpic, b.price, b.brand FROM dede_archives as a LEFT JOIN dede_addon2 as b ON a.id = b.aid WHERE a.channel=2 ORDER BY a.pubdate DESC LIMIT 0, 5'}
<div class="product">
<a href="/plus/view.php?aid=[field:id/]">
<img src="[field:litpic/]" alt="[field:title/]">
<h3>[field:title/]</h3>
<p>品牌:[field:brand/]</p>
<p>价格:¥[field:price/]</p>
</a>
</div>
{/dede:sql}
SQL语句解析:
SELECT a.id, a.title, a.litpic, b.price, b.brand: 从主表a和附加表b中选取需要的字段。FROM dede_archives as a LEFT JOIN dede_addon2 as b: 关联主表和产品模型的附加表。as a和as b是给表起别名,方便书写。ON a.id = b.aid: 关联条件,主表的id等于附加表的aid。WHERE a.channel=2: 只查询模型ID为2(产品模型)的数据。ORDER BY a.pubdate DESC LIMIT 0, 5: 按发布时间倒序排列,并只取前5条。
在详情页调用自定义字段
当用户点击文章进入详情页(如 article_article.htm)时,使用 {dede:field} 标签来显示当前文章的自定义字段。
基本语法:
{dede:field.字段名/}
示例:
假设你的“产品”模型有一个自定义字段 guige (规格),在详情页模板中这样调用:
<h1>[field:title/]</h1>
<img src="[field:litpic/]" alt="[field:title/]">
<p><strong>产品规格:</strong>{dede:field.guige/}</p>
<p><strong>产品价格:</strong>{dede:field.price/}</p>
<p>{dede:field.body/}</p> <!-- {dede:field.body/} 是调用文章内容 -->
总结与最佳实践
- 首选
arclist:如果只是调用单一模型的数据列表,优先使用{dede:arclist},因为它性能最好,使用最简单,记得设置channelid和addfields。 - 复杂查询用
sql:当需要关联多张表、跨模型、跨栏目进行复杂的数据筛选和排序时,果断使用{dede:sql},这需要你对 DedeCMS 的数据表结构有一定了解。 - 详情页用
field详情页,使用{dede:field.字段名/}来展示当前内容的特定字段。 - 善用调试:如果调用不出来数据,可以:
- 检查模型ID和栏目ID是否正确。
- 检查自定义字段名是否拼写正确。
- 对于
sql标签,可以先在数据库管理工具(如phpMyAdmin)里单独执行你的SQL语句,看是否能查出数据。 - 检查模板标签是否被禁用(后台“系统” -> “系统基本参数” -> “性能选项”)。
希望这份详细的指南能帮助你完全掌握 DedeCMS 内容模型的调用!
