织梦自定义字段模板调用代码
addfields
channelid
内容模型
自定义字段是什么
织梦默认文章模型只有标题、作者、正文等字段。但产品页需要「价格」「规格」「库存」,下载页需要「文件大小」「下载链接」等扩展字段,这些都要通过「内容模型管理」添加自定义字段来实现。
第一步:添加自定义字段
- 后台 → 核心 → 频道模型 → 内容模型管理。
- 选要扩展的模型(如「普通文章」),点「字段管理」。
- 点「添加新字段」,填写:
字段名称:price (只能英文+下划线)
字段提示:商品价格
字段类型:单行文本
默认值:0
最大长度:50
数据类型:单行文本 (varchar)
第二步:内容页调用自定义字段
在 article_*.htm 模板中,自定义字段通过 {dede:field.字段名/} 调用:
<article>
<h1>{dede:field.title/}</h1>
<p class="price">价格:¥{dede:field.price/}</p>
<p>规格:{dede:field.spec/}</p>
<div>{dede:field.body/}</div>
</article>
第三步:列表页/首页 arclist 调用自定义字段
这是关键步骤。{dede:arclist} 默认不输出自定义字段,必须用 addfields 和 channelid 两个参数:
{dede:arclist typeid='1' row='10'
addfields='price,spec,stock'
channelid='1'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span class="price">¥[field:price/]</span>
<span>库存:[field:stock/]</span>
</li>
{/dede:arclist}
参数说明:
addfields='price,spec,stock':要调用的字段名,多个用逗号分隔。channelid='1':内容模型 ID。普通文章=1,图片集=2,软件=3,商品=6。
注意:
channelid 写错会导致 addfields 完全失效,这是 80% 自定义字段调不出来的原因。可在「内容模型管理」列表查看模型 ID。
获取内容模型ID的方法
后台 → 核心 → 频道模型 → 内容模型管理,列表中「ID」列即为 channelid。常见对照:
ID=1 普通文章
ID=2 图片集
ID=3 软件
ID=-1 自定义模型
ID=6 商品(需安装扩展)
使用 function 处理字段值
字段值需要格式化时,用 function 参数:
[field:price function="sprintf('¥%.2f', @me)"/]
[field:pubdate function="MyDate('Y-m-d', @me)"/]
[field:description function="cn_substr(@me, 100)"/]
多选字段与图片字段调用
多选字段(如 checkbox)返回的是逗号分隔字符串,需 explode 处理:
[field:colors runphp='yes']
$arr=explode(',', @me);
@me=implode(' / ', $arr);
[/field:colors]
图片字段返回的是 {dede:img text='' width='800' height='600'}地址{/dede:img} 格式,需要解析:
[field:banner function="GetImgUrl(@me)"/]
// extend.func.php 中添加
function GetImgUrl($imgstr){
preg_match("/\}(.*?)\{/",$imgstr,$m);
return $m[1] ?? '';
}
常见问题
addfields 调不出来
1) channelid 错误;2) 字段名拼写错误;3) 字段没有发布到对应模型;4) 缓存未清。
列表页输出原文 [field:price/]
说明 arclist 没识别该字段,多半是 channelid 缺失。
内容页 {dede:field.price/} 不显示
检查文章是否真的填写了该字段值;查看数据库 dede_addonarticle 表对应记录。
行动建议
建站初期就把所有自定义字段规划好,命名规范统一(如 pro_ 前缀代表产品),避免后期重复修改。把字段清单整理成一份文档,列明字段名、类型、所在模型、用途,便于团队协作和后续扩展。自定义字段用得好,可以让织梦从「博客系统」变身「轻量 CMS」,覆盖大部分企业站、产品站需求。