这个功能的需求通常是想让访客在进入某个栏目时,默认看到的是该栏目下最受欢迎(点击量最高)的文章,而不是默认按发布时间排序。

这可以通过两种主要方式实现:
- 推荐方法:使用自定义SQL查询(灵活、高效)
- 备选方法:修改系统核心文件(直接、但有升级风险)
我会优先推荐第一种方法,因为它更安全、更灵活。
使用自定义SQL查询(推荐)
这种方法的核心思想是不修改织梦的核心文件,而是通过在模板文件中直接编写SQL查询语句,来获取按点击量排序的文章列表,这对于不想动核心文件,或者担心未来升级被覆盖的用户来说是最好的选择。
操作步骤:
-
找到你的栏目列表模板文件 打开织梦后台,进入【模板】->【默认模板管理】。 找到你想要实现“热度排序”的栏目所对应的列表模板,通常是
list_article.htm。 如果你的网站使用了不同的模板风格,请找到对应风格的模板文件。
(图片来源网络,侵删) -
修改模板文件中的SQL调用代码 在
list_article.htm文件中,找到调用文章列表的核心代码,通常是这样的:{dede:list pagesize='10'} <a href="[field:arcurl/]">[field:title/]</a> <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span> {/dede:list}这里的
{dede:list}标签是织梦的默认标签,它会从数据库中按默认规则(通常是按发布时间倒序)获取文章。你需要将这个标签替换为自定义的SQL查询。
-
编写并替换为自定义SQL代码 将上面的
{dede:list}代码块,替换为以下代码:{dede:sql sql=' SELECT id, title, arcurl, litpic, pubdate, click FROM `#@__archives` WHERE typeid = [field:id/] AND arcrank > -1 ORDER BY click DESC LIMIT 0, 10 '} <a href="[field:arcurl/]">[field:title/]</a> <span>点击:[field:click/]</span> <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span> {/dede:sql}代码解释:
{dede:sql ...}: 这是一个自定义的SQL查询标签。sql='...': 这里是你的SQL语句。SELECT id, title, arcurl, litpic, pubdate, click: 你需要从文章表(#@__archives)中查询的字段。click字段就是记录点击次数的字段。FROM#@archives`从文章数据表中查询。#@是织梦表的前缀,如果你的前缀不是dede_`,会自动替换成你自己的前缀。WHERE typeid = [field:id/]: 这是关键![field:id/]是当前栏目的ID,这个条件确保了我们只查询当前栏目下的文章。arcrank > -1是为了只显示已审核通过的文章。ORDER BY click DESC: 这是核心排序逻辑! 按照点击量(click)字段进行降序(DESC)排列,也就是从高到低。LIMIT 0, 10: 限制查询结果,从第0条开始,共10条,你可以根据需要修改这个数字,控制每页显示的文章数量。[field:arcurl/],[field:title/],[field:click/]: 在{dede:sql}标签内,你可以像在{dede:list}中一样,使用这些字段来显示文章信息。
-
保存并更新 保存修改后的
list_article.htm文件,然后去后台的【生成】->【更新栏目HTML】或【更新指定栏目HTML】,更新你修改过的栏目。
访客进入这个栏目时,看到的就是按点击量排序的文章列表了。
修改系统核心文件(备选,不推荐新手)
这种方法通过修改织梦的PHP源代码,来改变 {dede:list} 标签的默认排序行为,优点是一旦修改,所有使用 {dede:list} 的地方都会生效,缺点是升级织梦时,这些修改可能会被覆盖,且有一定风险。
操作步骤:
-
找到并打开PHP文件 在织梦的根目录下,找到文件
/include/arc.listview.class.php,这个文件是处理列表页逻辑的核心类文件。 -
找到并修改排序代码 用代码编辑器(如VS Code, Sublime Text, Notepad++)打开这个文件。 按快捷键
Ctrl + F搜索关键词orderby。 你会找到类似这样的代码段(可能因版本略有不同):// 在大约第300行左右,找到这个函数 function GetList($atts) { // ... 一些代码 ... if($orderby=='') { $orderby = 'default'; // 默认排序 } // ... 一些代码 ... if($orderby=='hot' || $orderby=='click') { $ordersql = " ORDER BY click DESC"; } else if($orderby=='good') { // ... } // ... 更多 else if ... else { $ordersql = " ORDER BY id DESC"; // 默认按ID倒序 } // ... 一些代码 ... } -
修改默认排序逻辑 上述代码中,
$orderby是空,$ordersql就会被设置为ORDER BY id DESC,我们的目标就是把它改成按点击量排序。找到这段代码:
if($orderby=='') { $orderby = 'default'; // 默认排序 }然后在它后面的
else分支里,找到:else { $ordersql = " ORDER BY id DESC"; // 默认按ID倒序 }将
ORDER BY id DESC修改为ORDER BY click DESC。修改后应该是这样:
else { $ordersql = " ORDER BY click DESC"; // 默认按点击量倒序 } -
保存文件 保存对
arc.listview.class.php文件的修改。 -
更新缓存 去织梦后台的【系统】->【SQL命令行工具】,执行以下命令来清空缓存:
DELETE FROM `#@__arccache`;
或者直接去【生成】->【更新系统缓存】。
注意: 这种方法会影响你网站所有使用 {dede:list} 标签的栏目列表页,如果你只想让特定栏目按热度排序,那么使用方法一会更精确、更安全。
总结与建议
| 特性 | 方法一 (自定义SQL) | 方法二 (修改核心) |
|---|---|---|
| 安全性 | 高,不修改核心文件,升级无忧。 | 低,升级可能被覆盖,修改不当有风险。 |
| 灵活性 | 高,可以精确控制到每个栏目,甚至每页。 | 低,全局生效,无法单独控制。 |
| 操作难度 | 中等,需要懂一点SQL和织梦模板标签。 | 简单,只需修改一个文件。 |
| 推荐度 | ★★★★★ (强烈推荐) | ★★☆☆☆ (仅推荐有经验且需要全局生效的用户) |
对于绝大多数用户,请直接使用方法一,它更符合织梦的扩展思想,也更安全可控。
