使用DedeCMS后台的“自定义排序”功能(最简单)
这是最直接、最推荐的方法,无需修改代码,适用于大多数情况。

操作步骤:
-
进入文章列表管理: 登录你的DedeCMS后台,找到「内容管理」 -> 「所有文档管理」。
-
选择文章并排序:
- 在文章列表页面,你会看到每篇文章前面都有一个复选框。
- 勾选 你想要进行排序的单篇文章,或者点击列表顶部的「全选」来选择所有文章。
- 勾选后,点击列表上方的「自定义排序」按钮。
-
设置权重值: 点击「自定义排序」后,会弹出一个对话框,在「自定义权重值」输入框中,为你勾选的文章设置一个数字。
(图片来源网络,侵删)- 数字越大,权重越高,排序越靠前。
- 你可以为不同的文章设置不同的权重值,比如置顶的文章设置为100,普通重要文章设置为50,普通文章设置为10或不设置。
- 设置完成后,点击「确定」。
-
查看效果: 保存后,刷新文章列表页面,你会发现,文章已经按照你设置的权重值从高到低重新排列了。
优点:
- 无需修改任何代码,操作简单直观。
- 可以灵活地为单个或批量文章设置权重。
缺点:
- 这种排序只在后台的「所有文档管理」列表中有效。
- 它不会改变前台栏目页或首页的默认排序方式,前台默认仍然按时间排序。
修改模板文件,让前台按权重排序(最常用)
如果你希望网站前台的栏目页、首页等地方的文章也按照权重排序,就需要修改对应的模板文件。

核心原理:
DedeCMS的列表页是通过调用 arclist 或 list 标签来获取文章的,我们只需要在这些标签中加入一个按权重排序的参数即可。
操作步骤:
-
找到模板文件:
- 栏目页:模板文件通常位于
/templets/你的栏目目录/ list_artlist.htm或类似路径,你可以通过「模板」->「模板管理」->「自定义模板」来找到并编辑当前栏目使用的列表模板。 - 首页/其他页面:找到调用该栏目文章的模板文件,
index.htm。
- 栏目页:模板文件通常位于
-
修改
arclist或list: 在你的模板文件中,找到获取文章列表的标签,{dede:arclist typeid='1' titlelen='30' row='10'} <li><a href="[field:arcurl/]">[field:title/]</a></li> {/dede:arclist}在这个标签里,添加一个
orderby='weight'参数,如果需要降序排列(权重高的在前),再加上orderway='desc'。修改后的代码示例:
{dede:arclist typeid='1' titlelen='30' row='10' orderby='weight' orderway='desc'} <li><a href="[field:arcurl/]">[field:title/]</a></li> {/dede:arclist}参数解释:
orderby='weight':指定排序依据为weight(权重)字段。orderway='desc':指定排序方式为desc(降序,即从大到小),如果你想让权重低的排在前面,可以改为orderway='asc'(升序)。
-
更新缓存: 修改模板文件后,务必进入后台「系统」->「一键更新网站」,选择「更新HTML」->「更新栏目页」和「更新主页」,然后生成一下页面,才能看到效果。
优点:
- 可以完全控制前台文章的显示顺序。
- 是实现前台按权重排序的标准方法。
缺点:
- 需要修改模板文件,对新手有一定门槛。
- 如果网站使用了多个模板,需要逐一修改。
修改PHP核心文件(不推荐,仅限高级用户)
警告:此方法会修改DedeCMS的核心文件,升级系统时这些修改会被覆盖,可能导致网站出现问题。除非你非常清楚自己在做什么,否则请谨慎使用。
操作步骤:
-
找到文件: 打开
include/arc.listview.class.php文件,这个文件是处理列表页数据逻辑的核心文件。 -
修改排序代码: 在这个文件中,找到构建SQL查询语句的部分,通常会有一个
order by语句。 搜索类似orderby == 'hot'或orderby == 'click'的代码块,找到处理不同排序方式的逻辑。你需要找到处理默认排序(通常是按时间
pubdate)的代码,并将其修改为默认按weight排序。你可能会找到这样的代码:
if($orderby=='hot' || $orderby=='click') $ordersql = " ORDER BY click $orderway"; else $ordersql = " ORDER BY id $orderway";
你可以将其修改为:
// 默认按权重排序 if($orderby=='hot' || $orderby=='click') { $ordersql = " ORDER BY click $orderway"; } else { // 如果没有指定 orderby,或者指定了其他值,默认按 weight 排序 $ordersql = " ORDER BY weight $orderway"; }或者更直接,将所有默认排序都指向
weight:// 强制所有列表页都按权重排序 $ordersql = " ORDER BY weight $orderway";
-
更新缓存: 修改文件后,同样需要通过「一键更新网站」来生成页面。
优点:
- 一劳永逸,无需每次都修改模板。
缺点:
- 修改核心文件,有极高的风险。
- 系统升级后修改会丢失。
- 可能会影响其他依赖原排序逻辑的功能。
总结与建议
| 方法 | 难度 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|---|
| 后台自定义排序 | ⭐ (非常简单) | 仅需在后台管理文章顺序 | 操作简单,无风险 | 不影响前台显示 |
| 修改模板标签 | ⭐⭐ (中等) | 需要前台页面按权重排序 | 标准、安全、灵活 | 需要修改模板文件 |
| 修改核心文件 | ⭐⭐⭐⭐⭐ (非常难) | 需要全局、强制改变默认排序 | 一劳永逸 | 风险极高,不推荐 |
给你的建议:
- 如果你只是想在后台方便地管理文章的排列顺序,请使用方法一。
- 如果你希望网站前台的栏目页或首页也按照权重来展示文章,请使用方法二,这是最常用且最安全的方式。
- 请尽量远离方法三,除非你是在进行深度二次开发,并且做好了版本控制和升级预案。
