核心概念
在 DedeCMS 中,排序功能是通过 sort 参数来实现的,你需要在列表页的 {dede:list} 或 {dedarclist} 标签中指定排序的字段和方式。

(图片来源网络,侵删)
- 排序字段: 你想根据哪个字段排序,
price(价格)。 - 排序方式:
asc(升序,从小到大) 或desc(降序,从大到小)。
使用 {dede:list} 标签(最常用,适用于列表页)
这是最直接、最常用的方法,通常用于频道列表页(如 list_article.php 模板)。
第 1 步:确保价格字段存在
在进行排序之前,请确保你的文章模型(或商品模型)中有一个名为 price 的字段,如果没有,你需要:
- 进入后台:
核心->内容模型管理->[选择你的模型,如“文章”]->字段管理。 - 点击
添加新字段。 - 字段名称填写
price,字段类型选择数字,然后保存。
第 2 步:修改列表页模板文件
找到你的列表页模板文件,通常是 /templets/你的模板目录/list_article.htm。
- 找到
{dede:list}:这个标签是用于循环输出列表内容的。 - 添加
sort属性:在{dede:list}标签中添加sort='price'和orderway='desc'(或asc) 属性。
修改前 (默认模板):

(图片来源网络,侵删)
{dede:list pagesize='20'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>价格: [field:price/]</span>
</li>
{/dede:list}
修改后 (按价格降序排列):
{dede:list sort='price' orderway='desc' pagesize='20'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>价格: [field:price/]</span>
</li>
{/dede:list}
参数解释:
sort='price': 指定按price字段进行排序。orderway='desc': 指定排序方式为降序(价格从高到低),如果你想按价格从低到高排序,请将其改为orderway='asc'。pagesize='20': 每页显示20条记录,这是可选的。
第 3 步:添加排序链接(可选但推荐)
为了让用户可以自由选择排序方式(如“价格从高到低”、“价格从低到高”),你可以在页面上添加链接。
<a href="{dede:global.cfg_cmspath/}/list.php?tid={dede:field.id/}&orderby=price&orderway=asc">价格从低到高</a>
<a href="{dede:global.cfg_cmspath/}/list.php?tid={dede:field.id/}&orderby=price&orderway=desc">价格从高到低</a>
URL参数说明:

(图片来源网络,侵删)
orderby: 对应sort参数,指定排序字段。orderway: 指定排序方式 (asc或desc)。
使用 {dede:arclist} 标签(适用于首页、封面页等)
{dede:arclist} 是一个更灵活的标签,常用于首页调用文章列表或产品列表。
第 1 步:修改模板文件
找到使用 {dede:arclist} 的模板文件,如 index.htm。
修改前 (默认模板):
{dede:arclist typeid='1' titlelen='30' row='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>价格: [field:price/]</span>
</li>
{/dede:arclist}
修改后 (按价格升序排列):
{dede:arclist typeid='1' titlelen='30' row='10' sort='price' orderway='asc'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>价格: [field:price/]</span>
</li>
{/dede:arclist}
参数解释:
typeid='1': 指定栏目ID,只调用该栏目下的内容。sort='price': 按价格排序。orderway='asc': 按价格升序排列。
重要注意事项
- 字段名称必须完全匹配:
sort属性中的值(如price)必须与你数据库中字段的名字完全一致,包括大小写。 - 数据类型:确保你的
price字段在数据库中是数字类型(如int,decimal,float),而不是文本类型(varchar或text),如果是文本类型,排序可能会得到错误的结果("100" 会被排在 "20" 前面)。 - 性能考虑:对非索引字段进行排序,尤其是在数据量大的情况下,可能会导致页面加载缓慢,如果网站数据量很大,建议为
price字段在数据库中添加索引。 - 标签兼容性:
{dede:list}和{dede:arclist}的排序功能在 DedeCMS 5.7 及以上版本中都非常稳定。
| 需求 | 修改方式 | |
|---|---|---|
| 列表页按价格降序 | {dede:list} |
在标签内添加 sort='price' orderway='desc' |
| 首页按价格升序 | {dede:arclist} |
在标签内添加 sort='price' orderway='asc' |
| 让用户点击排序 | 普通链接 | 在链接URL中添加 orderby=price&orderway=desc |
选择最适合你需求的方法,按照步骤操作即可成功实现按价格排序功能,如果遇到问题,请首先检查 price 字段是否已正确添加到你的模型中。
