织梦sort hot如何实现热门内容排序?

99ANYc3cd6
预计阅读时长 14 分钟
位置: 首页 织梦建站 正文

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

织梦sort hot
(图片来源网络,侵删)

这可以通过两种主要方式实现:

  1. 推荐方法:使用自定义SQL查询(灵活、高效)
  2. 备选方法:修改系统核心文件(直接、但有升级风险)

我会优先推荐第一种方法,因为它更安全、更灵活。


使用自定义SQL查询(推荐)

这种方法的核心思想是不修改织梦的核心文件,而是通过在模板文件中直接编写SQL查询语句,来获取按点击量排序的文章列表,这对于不想动核心文件,或者担心未来升级被覆盖的用户来说是最好的选择。

操作步骤:

  1. 找到你的栏目列表模板文件 打开织梦后台,进入【模板】->【默认模板管理】。 找到你想要实现“热度排序”的栏目所对应的列表模板,通常是 list_article.htm。 如果你的网站使用了不同的模板风格,请找到对应风格的模板文件。

    织梦sort hot
    (图片来源网络,侵删)
  2. 修改模板文件中的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查询。

  3. 编写并替换为自定义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} 中一样,使用这些字段来显示文章信息。
  4. 保存并更新 保存修改后的 list_article.htm 文件,然后去后台的【生成】->【更新栏目HTML】或【更新指定栏目HTML】,更新你修改过的栏目。

访客进入这个栏目时,看到的就是按点击量排序的文章列表了。


修改系统核心文件(备选,不推荐新手)

这种方法通过修改织梦的PHP源代码,来改变 {dede:list} 标签的默认排序行为,优点是一旦修改,所有使用 {dede:list} 的地方都会生效,缺点是升级织梦时,这些修改可能会被覆盖,且有一定风险。

操作步骤:

  1. 找到并打开PHP文件 在织梦的根目录下,找到文件 /include/arc.listview.class.php,这个文件是处理列表页逻辑的核心类文件。

  2. 找到并修改排序代码 用代码编辑器(如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倒序
        }
        // ... 一些代码 ...
    }
  3. 修改默认排序逻辑 上述代码中,$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"; // 默认按点击量倒序
    }
  4. 保存文件 保存对 arc.listview.class.php 文件的修改。

  5. 更新缓存 去织梦后台的【系统】->【SQL命令行工具】,执行以下命令来清空缓存:

    DELETE FROM `#@__arccache`;

    或者直接去【生成】->【更新系统缓存】。

注意: 这种方法会影响你网站所有使用 {dede:list} 标签的栏目列表页,如果你只想让特定栏目按热度排序,那么使用方法一会更精确、更安全。


总结与建议

特性 方法一 (自定义SQL) 方法二 (修改核心)
安全性 ,不修改核心文件,升级无忧。 ,升级可能被覆盖,修改不当有风险。
灵活性 ,可以精确控制到每个栏目,甚至每页。 ,全局生效,无法单独控制。
操作难度 中等,需要懂一点SQL和织梦模板标签。 简单,只需修改一个文件。
推荐度 ★★★★★ (强烈推荐) ★★☆☆☆ (仅推荐有经验且需要全局生效的用户)

对于绝大多数用户,请直接使用方法一,它更符合织梦的扩展思想,也更安全可控。

-- 展开阅读全文 --
头像
C语言else语句出错,常见原因是什么?
« 上一篇 04-04
dede图集内容摘要如何生成?
下一篇 » 04-04

相关文章

取消
微信二维码
支付宝二维码

目录[+]