核心概念:自定义字段
在DedeCMS中,除了系统自带的标题、内容、发布时间等字段,你还可以为每个模型(比如文章模型、商品模型)添加自定义字段来存储额外的信息,比如价格、规格、库存等。

假设你已经为你的“商品”模型添加了一个名为 price 的自定义字段。
调用当前商品页面的价格(最常用)
这是在商品详情页(article_product.htm 或你自定义的商品模板)中,显示该商品自身价格的方法。
语法:
{dede:field.price /}
示例: 在商品详情模板中,你可以这样使用:
<h2>商品标题:{dede:field.title/}</h2>
<p>商品价格:<strong>¥{dede:field.price/}</strong> 元</p>
<p>商品库存:{dede:field.stock/} 件</p>
说明:
{dede:field.price/}会直接输出当前这篇商品文章的price字段值。- 这是最简单直接的调用方式。
在列表页(如栏目页、首页)循环调用多个商品的价格
这是在商品列表页(list_product.htm 或首页的arclist调用)中,循环显示每个商品的价格。
语法:
需要在 {dede:arclist} 标签内使用 array 属性来指定要调用的自定义字段。
{dede:arclist typeid='栏目ID' row='10' titlelen='30'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>价格:¥[field:price/]</span>
</li>
{/dede:arclist}
关键点:
typeid='栏目ID':指定你要调用的商品所在的栏目ID,如果想调用所有栏目的商品,可以删除此属性或设置为typeid='0'。row='10':表示调用10条商品信息。[field:price/]:在arclist内部,自定义字段的调用方式是[field:字段名/],注意这里的标签符号是[...]而不是 。
调用指定栏目的商品价格并排序
这个场景很常见,热销商品”、“特价商品”等,你需要从指定栏目调用商品,并按价格或销量等字段排序。
语法:
使用 orderby 和 orderway 属性。
{dede:arclist typeid='10' row='6' orderby='price' orderway='asc'}
<div class="product-item">
<a href="[field:arcurl/]"><img src="[field:picname/]" alt="[field:title/]" /></a>
<h3>[field:title/]</h3>
<p class="price">¥[field:price/]</p>
</div>
{/dede:arclist}
关键点:
orderby='price':表示按照price字段进行排序。orderway='asc':表示升序排列(从低到高)。- 如果你想按价格从高到低排序,则使用
orderway='desc'。
- 如果你想按价格从高到低排序,则使用
其他常用的 orderby 值:
senddate:按发布时间排序(最常用)hot或click:按点击量排序id:按文章ID排序
调用指定ID的单个商品价格
有时候你可能想在页面的某个特定位置(比如首页的推荐位)显示某一个特定商品的价格。
语法:
使用 id 属性来指定文章ID。
{dede:arclist id='25' row='1'}
<div class="featured-product">
<h3>今日推荐</h3>
<a href="[field:arcurl/]">[field:title/]</a>
<p>特价:¥[field:price/]</p>
</div>
{/dede:arclist}
说明:
id='25':这里的25是你想要调用的那篇商品文章在数据库中的ID。row='1':因为指定了单个ID,row设置为1即可。
进阶技巧:格式化价格(保留两位小数)
商品价格通常需要保留两位小数,90 而不是 9 或 20,DedeCMS的 arclist 标签本身不支持直接格式化,但可以通过一个简单的PHP函数来实现。
修改 include/extend.func.php 文件
在你的DedeCMS安装目录下,找到 include/extend.func.php 文件(如果不存在,请自行创建),在文件末尾添加如下PHP函数:
/**
* 格式化价格为两位小数
* @param string $price_str 价格字符串
* @return string 格式化后的价格
*/
function formatPrice($price_str) {
// 先尝试转换为浮点数,避免非数字字符出错
$price = floatval($price_str);
// 使用number_format格式化为两位小数
return number_format($price, 2, '.', '');
}
在模板中调用
添加完函数后,你就可以在模板中使用 function} 标签来调用它了。
在列表页(arclist)中使用:
{dede:arclist typeid='10' row='6'}
<p>价格:¥{dede:field.price function='formatPrice(@me)'/}</p>
{/dede:arclist}
注意: 在 arclist 内部,{dede:field} 标签的用法是 {dede:field.字段名 function='函数名(@me)'/}。
页(article_product.htm)中使用:**
<p>商品价格:<strong>¥{dede:field.price function='formatPrice(@me)'/}</strong> 元</p>
注意: 在内容页,{dede:field} 标签的用法是 {dede:field.字段名 function='函数名(@me)'/}。
总结与排查
如果调用价格不显示,请按以下顺序检查:
- 自定义字段是否存在:登录DedeCMS后台,【核心】-> 【内容模型管理】-> 选择你的商品模型 -> 【字段管理】,确认
price字段是否存在并且被勾选了“使字段在发布内容表单中显示”。 - 字段名称是否正确:检查模板中写的字段名
price是否和后台添加的字段名完全一致,包括大小写。 - 标签语法是否正确:
- 内容页用
{dede:field.price/}。 - 列表页用
[field:price/]。
- 内容页用
- 栏目ID和文章ID是否正确:在列表页或首页调用时,确保
typeid和id的值是正确的。 - 模板是否更新:修改模板后,确保清空了DedeCMS的缓存,或者在后台【生成】-> 【一键更新网站】中更新了对应的页面。
希望这份详细的指南能帮助你成功在DedeCMS中调用商品价格!
