实现这个功能主要有两种方法,强烈推荐第一种,因为它更灵活、更高效。

修改arclist.class.php文件(推荐)
这是最专业、最灵活的方法,通过修改DedeCMS的核心类文件,我们可以为{dede:list}和{dede:arclist}标签增加一个自定义的排序参数。
操作步骤:
-
找到核心文件 打开你的DedeCMS后台目录,找到并编辑以下文件:
/include/arc.listview.class.php注意:如果你需要在首页或频道页也使用按权重排序,你还需要修改
/include/arc.archives.class.php文件,操作方法与下面类似,但通常我们只需要在列表页修改。 -
修改代码 在
arc.listview.class.php文件中,找到GetSql()函数,这个函数负责生成最终的SQL查询语句。在这个函数里,找到类似这样的代码段(通常在
else if($orderby=="hot")或else if($orderby=="click")的附近):// ... 其他排序判断 ... else if($orderby == "weekviews") { $ordersql = " ORDER BY weekviews $orderWay"; } else if($orderby == "monthviews") { $ordersql = " ORDER BY monthviews $orderWay"; } // ... 其他排序判断 ...在这些
else if语句的末尾,在最后一个else语句之前,添加以下代码:// 按权重排序 else if($orderby == "weight") { $ordersql = " ORDER BY weight $orderWay"; }这段代码的意思是:当标签里指定
orderby='weight'时,SQL语句就会按照weight字段进行排序。 -
保存文件 保存对
arc.listview.class.php文件的修改。 -
在模板中使用 你可以在你的列表页模板文件(通常是
list_article.htm)中,修改{dede:list}标签了。修改前:
{dede:list pagesize='10'} <!-- 循环输出内容 --> <a href="[field:arcurl/]">[field:title/]</a> <p>[field:description/]...</p> {/dede:list}修改后(按权重从高到低排序):
{dede:list orderby='weight' orderway='desc' pagesize='10'} <!-- 循环输出内容 --> <a href="[field:arcurl/]">[field:title/]</a> <p>[field:description/]...</p> {/dede:list}参数解释:
orderby='weight': 告诉DedeCMS按照weight字段排序。orderway='desc': 指定排序方式为 降序(从高到低,权重大的排在前面)。orderway='asc': 如果需要按权重从低到高排序,则使用orderway='asc'。
优点:
- 灵活:可以随时在模板中通过修改标签参数来控制排序方式。
- 高效:直接修改SQL查询,比二次查询效率高。
- 专业:这是DedeCMS官方推荐扩展功能的方式。
直接修改SQL查询(不推荐,仅作了解)
这种方法虽然简单直接,但不够灵活,并且有潜在风险。
操作步骤:
-
找到并打开列表页模板 打开你的列表页模板文件,
/templets/default/list_article.htm。 -
修改
{dede:list} 直接在{dede:list}标签里嵌入SQL语句,覆盖掉默认的排序。{dede:list pagesize='10'} <!-- 这里是默认的排序,我们将其替换掉 --> {/dede:list} <!-- 替换成下面这种形式 --> {dede:sql sql='SELECT * FROM dede_archives WHERE typeid=~typeid~ ORDER BY weight DESC LIMIT 0,10'} <a href='[field:arcurl/]'>[field:title/]</a> <p>[field:description/]...</p> {/dede:sql}代码解释:
dede:sql是DedeCMS执行原生SQL的标签。SELECT * FROM dede_archives: 查询文章表。WHERE typeid=~typeid~: 筛选出当前栏目下的文章。~typeid~是DedeCMS的变量,代表当前栏目ID。ORDER BY weight DESC: 核心部分,按weight字段降序排序。LIMIT 0,10: 限制输出10条记录。
缺点:
- 不灵活:如果需要分页,这个方法就非常麻烦,你需要自己实现分页逻辑,远不如
{dede:list}方便。 - 有风险:直接操作SQL,如果写错可能会导致查询失败或网站报错。
- 效率较低:对于复杂的列表和分页,不如
{dede:list}标签经过优化的处理方式高效。
总结与建议
| 方法 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|
修改arc.listview.class.php |
灵活、高效、专业、支持分页 | 需要修改核心文件,升级时可能需要重复修改 | ⭐⭐⭐⭐⭐ (强烈推荐) |
直接使用{dede:sql} |
简单直观,无需修改核心文件 | 不灵活、不支持分页、有风险 | ⭐☆☆☆☆ (不推荐,仅作应急) |
请务必选择方法一来为你的DedeCMS列表页实现按权重排序,它是一次性的配置工作,之后你就可以在所有需要的地方自由地使用这个功能了。
