下面我将为你详细讲解 DedeCMS 中调用自定义字段的几种方法,从最简单到最灵活,并附上实例。

(图片来源网络,侵删)
第一步:准备工作(必须)
在调用任何字段之前,请确保你已经完成了以下设置:
-
创建并绑定模型:
- 进入后台
核心->内容模型管理。 - 如果你需要一个文章之外的新模型(产品”、“案例”),点击
增加一个新模型并设置好字段。 - 如果只是想在文章里加几个自定义字段,可以直接编辑
普通文章模型,点击管理字段->增加新字段。
- 进入后台
-
添加自定义字段:
- 在你选择的模型中,点击
管理字段。 - 点击
增加新字段。 - 字段名:这是数据库中的字段名,只能使用英文字母、数字和下划线,
price,product_intro。 - 字段提示:在后台发布内容时显示的提示文字,产品价格”、“产品简介”。
- 字段类型:根据你的需求选择,如
单行文本、多行文本、编辑器、图片、附件等。 - 字段参数:设置是否必填、默认值等。
- 保存字段。
- 在你选择的模型中,点击
-
时填写字段:
(图片来源网络,侵删)- 去到前台或后台,发布一篇属于该模型的内容。
- 你会看到新增的字段已经出现在发布表单中,填入你的数据即可。
第二步:调用自定义字段的方法
假设你已经创建了一个名为 product_intro 的多行文本字段和一个名为 product_price 的单行文本字段。
页(article_article.htm)中调用 - 最简单
这是最常见的情况,在文章的详情页调用该文章自身的自定义字段。
使用 DedeCMS 的原生标签 {dede:field}
-
调用单行文本/数字字段 (如
product_price)
(图片来源网络,侵删)<p>产品价格: {dede:field.product_price /}</p>- 语法:
{dede:field.字段名 /} - 注意:这里的
字段名是你在第一步中设置的字段名(product_price),而不是字段提示。
- 语法:
-
调用多行文本/编辑器字段 (如
product_intro)<div class="intro"> <h3>产品简介</h3> {dede:field.product_intro} </div>- 注意:对于多行文本,
{dede:field}标签默认会去除 HTML 标签,如果你的product_intro是通过编辑器输入的,希望保留<p>、<strong>等标签,需要使用function='htmlspecialchars_decode'函数。
<div class="intro"> <h3>产品简介</h3> {dede:field.product_intro function='htmlspecialchars_decode(@me)'/} </div>@me是 DedeCMS 模板中的特殊变量,代表当前标签的值。htmlspecialchars_decode函数的作用是将 HTML 实体转换回 HTML 标签。
- 注意:对于多行文本,
-
调用图片字段 (如
product_image)图片字段通常保存的是图片路径,调用方式和单行文本一样,但为了在页面上正确显示,通常会加上
{dede:global.cfg_basehost/}来补全网站地址。<img src="{dede:global.cfg_basehost/}{dede:field.product_image /}" alt="产品图片">
在列表页(list_*.htm)或首页(index.htm)中调用 - 需要开启字段
在列表页或首页循环调用文章时,默认情况下为了性能,系统不会加载所有自定义字段,你需要手动开启。
步骤:
- 进入后台
系统->系统基本参数->其他选项。 - 找到
列表附加字段这个选项。 - 在这里填入你希望在列表页调用的字段名,多个字段用英文逗号隔开。
product_intro,product_price,product_image - 保存设置。
在列表页模板中使用 {dede:list} 或 {dede:arclist} 调用
一旦你在后台设置了列表附加字段,就可以在列表循环标签中使用了。
示例 (使用 {dede:list} 标签):
{dede:list pagesize='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<!-- 调用产品价格 -->
<p>价格: [field:product_price /]</p>
<!-- 调用产品简介(截取50个字符) -->
<p>简介: [field:product_intro function='cn_substr(@me, 50)'/]...</p>
<!-- 调用产品图片 -->
<img src="{dede:global.cfg_basehost/}[field:product_image /]" alt="[field:title/]">
</li>
{/dede:list}
关键点:
- 在列表循环中,
{dede:field.xxx}要换成[field:xxx]。 function='cn_substr(@me, 50)'是一个非常实用的函数,用于截取字符串(这里是中文,截取50个字符),避免简介过长影响布局。- 同样,图片地址也需要用
{dede:global.cfg_basehost/}来补全。
使用 SQL 查询调用 - 最灵活
当你需要非常复杂的查询逻辑,或者调用跨模型、跨表的数据时,直接使用 dede:sql 标签是最佳选择。
示例:假设你想在首页调用某个特定栏目(ID=3)下所有产品的价格和名称。
{dede:sql sql="SELECT id, title, product_price FROM `dede_archives` a JOIN `dede_addonarticle` d ON a.id = aid WHERE a.typeid = 3"}
<div class="product-item">
<a href="/plus/view.php?aid=[field:id/]">[field:title/]</a>
<span>价格: [field:product_price /]</span>
</div>
{/dede:sql}
说明:
sql="...":在这里写你的标准 SQL 查询语句。- 表名注意:
dede_archives是文章主表,包含id,typeid,title等基本信息。dede_addonarticle是文章附加表,表名根据你的模型后缀而定,如果你创建的是“普通文章”,附加表就是addonarticle;如果你创建的是“产品模型”,附加表可能是addonproduct,你可以在dede_addon表里找到对应的表。- 两个表通过
aid(附加表的aid字段) 和id(主表的id字段) 关联。
[field:字段名 /]:在dede:sql标签内,使用[field:]来输出查询结果中的列。
总结与最佳实践
| 场景 | 推荐方法 | 标签语法 | 注意事项 |
|---|---|---|---|
| 文章详情页 | 原生标签 | {dede:field.字段名 /} |
需用 function='htmlspecialchars_decode(@me)' |
| 列表页/首页 | 原生标签 + 后台设置 | [field:字段名 /] |
必须在后台 系统基本参数 -> 其他选项 中设置 列表附加字段 |
| 复杂/特殊查询 | SQL 查询 | {dede:sql sql="..."} |
需要了解 DedeCMS 的表结构(主表、附加表),注意表名后缀 |
核心要点回顾:
- 字段名:调用时用的是你在后台创建字段时填写的英文“字段名”,而不是“字段提示”。
- 作用域:详情页用
{dede:field},列表页用[field:]。 - 列表页调用:最容易被忽略的一步,一定要去后台开启“列表附加字段”。
- 图片路径:前台调用时,用
{dede:global.cfg_basehost/}来补全相对路径为绝对路径,可以避免图片加载失败。
希望这份详细的指南能帮助你完全掌握 DedeCMS 自定义字段的调用!
