dede list如何按权重正确排序?

99ANYc3cd6
预计阅读时长 11 分钟
位置: 首页 DEDE建站 正文

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

dede list按权重排序
(图片来源网络,侵删)

修改arclist.class.php文件(推荐)

这是最专业、最灵活的方法,通过修改DedeCMS的核心类文件,我们可以为{dede:list}{dede:arclist}标签增加一个自定义的排序参数。

操作步骤:

  1. 找到核心文件 打开你的DedeCMS后台目录,找到并编辑以下文件: /include/arc.listview.class.php

    注意:如果你需要在首页或频道页也使用按权重排序,你还需要修改 /include/arc.archives.class.php 文件,操作方法与下面类似,但通常我们只需要在列表页修改。

  2. 修改代码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 字段进行排序。

  3. 保存文件 保存对 arc.listview.class.php 文件的修改。

  4. 在模板中使用 你可以在你的列表页模板文件(通常是 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查询(不推荐,仅作了解)

这种方法虽然简单直接,但不够灵活,并且有潜在风险。

操作步骤:

  1. 找到并打开列表页模板 打开你的列表页模板文件,/templets/default/list_article.htm

  2. 修改{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列表页实现按权重排序,它是一次性的配置工作,之后你就可以在所有需要的地方自由地使用这个功能了。

-- 展开阅读全文 --
头像
C语言sleep函数为何未定义?
« 上一篇 前天
响应式织梦CMS模板如何适配多设备?
下一篇 » 前天
取消
微信二维码
支付宝二维码