权重排序如何精准织梦文章?

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

下面我将为你提供几种实现方法,从最简单直接的后台修改,到更灵活的前端修改,再到综合排序,你可以根据自己的需求选择最合适的一种。

织梦文章按权重排序
(图片来源网络,侵删)

后台直接修改(最简单,适用于列表页)

这是最直接的方法,通过修改后台的列表模板文件,直接在调用文章的标签里加入排序规则。

操作步骤:

  1. 登录织梦后台
  2. 进入“模板” -> “模板管理”。
  3. 在左侧选择你当前使用的网站模板。
  4. 找到并点击修改你想要调整的文章列表页模板,这通常是:
    • list_article.htm (文章列表页)
    • index.htm (首页文章列表)
    • 或其他自定义的列表页模板。
  5. 在模板文件中,找到调用文章列表的 arclist
  6. arclist 标签中,添加 orderby='weight' 属性。

修改前: 通常的默认排序是按发布时间倒序。

{dede:arclist typeid='' row='10' titlelen='30'}
    <li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:arclist}

修改后: 按权重从高到低排序。weight 字段是数字,值越大,权重越高。

织梦文章按权重排序
(图片来源网络,侵删)
{dede:arclist typeid='' row='10' titlelen='30' orderby='weight'}
    <li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:arclist}

高级用法:按权重排序,权重相同时再按时间排序

如果你希望权重高的排在前面,但如果权重相同,则希望按发布时间最新的排在前面,可以这样写:

{dede:arclist typeid='' row='10' titlelen='30' orderby='weight pubdate'}
    <li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:arclist}
  • orderby='weight pubdate' 的意思是:首先按 weight 排序(默认是倒序,即从大到小),weight 相同,则再按 pubdate 排序(默认也是倒序,即最新的在前)

修改PHP核心文件(适用于所有列表,包括栏目页)

如果你希望所有文章列表(包括栏目页、首页等)都默认按权重排序,而不是每次都要去修改模板文件,你可以修改织梦的核心PHP文件。

⚠️ 重要提示: 修改核心文件后,如果未来升级织梦程序,这些修改可能会被覆盖,请务必提前备份好你的网站和文件。

操作步骤:

  1. 备份文件:在修改前,请务必备份 /include/arc.archives.class.php 文件。
  2. 打开文件:使用FTP或文件管理器,找到并打开 /include/arc.archives.class.php 文件。
  3. 查找代码:在文件中搜索 GetArcList 函数(通常在文件开头部分)。
  4. 修改排序逻辑:找到 $ordersql 变量的赋值部分,默认情况下,它可能是空的,或者包含 orderby='pubdate' 等逻辑,你需要将其修改为默认按权重排序。

找到类似这样的代码块:

// ... 其他代码 ...
function GetArcList($typeid=0, $schtype= '', $orderby='pubdate', $ismake=1, $resultnum='', $innertext='', $aid=0, $channelid=0, $limitday=0, $flag='',$order=''){
    // ... 其他代码 ...
    $ordersql = "";
    if($orderby=='hot' || $orderby=='click') {
        $ordersql = " ORDER BY arc.click $order";
    }
    else if($orderby=='sortrank' || $orderby=='pubdate') {
        $ordersql = " ORDER BY arc.sortrank $order";
    }
    // ... 其他代码 ...
}

修改为: 将默认的 orderby 逻辑改为 weight,你可以修改 else if 分支,或者增加一个新的 else 分支来处理 weight

// ... 其他代码 ...
function GetArcList($typeid=0, $schtype= '', $orderby='pubdate', $ismake=1, $resultnum='', $innertext='', $aid=0, $channelid=0, $limitday=0, $flag='',$order=''){
    // ... 其他代码 ...
    $ordersql = "";
    // 修改这里,增加对 weight 的判断
    if ($orderby == 'weight') {
        $ordersql = " ORDER BY arc.weight DESC"; // 按权重倒序,值越大越靠前
    }
    else if($orderby=='hot' || $orderby=='click') {
        $ordersql = " ORDER BY arc.click $order";
    }
    else {
        // 保持其他排序方式不变,比如按发布时间
        $ordersql = " ORDER BY arc.sortrank $order";
    }
    // ... 其他代码 ...
}

说明:

  • arc.weight 是数据库中存储权重的字段名。
  • DESC 表示降序(从大到小),ASC 表示升序(从小到大),通常我们希望权重高的排在前面,所以用 DESC

完成修改后,保存文件,即使你在模板里不写 orderby='weight',只要后台的“排序选项”没有特殊设置,很多列表页也会尝试按权重排序,但为了确保可控,推荐同时使用方法一,在模板中明确指定。


综合排序(权重为主,时间为辅)

这是一个非常实用的场景,特别是用在首页的推荐文章或头条新闻上,我们希望优先展示权重高的内容,但如果权重相同,则展示最新发布的内容。

操作步骤:

这个方法结合了方法一,只需要在模板的 arclist 标签中使用 orderby 属性即可,无需修改PHP文件。

{dede:arclist row='5' titlelen='40'}
    <h2><a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a></h2>
    <p>[field:description function='cn_substr(@me,100)'/]...</p>
    <span>[field:pubdate function='MyDate('Y-m-d',@me)'/]</span>
{/dede:arclist}

修改为按权重+时间排序:

{dede:arclist row='5' titlelen='40' orderby='weight pubdate' orderway='desc'}
    <h2><a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a></h2>
    <p>[field:description function='cn_substr(@me,100)'/]...</p>
    <span>[field:pubdate function='MyDate('Y-m-d',@me)'/]</span>
{/dede:arclist}

参数解释:

  • orderby='weight pubdate':告诉织梦,排序规则有两个,先按 weight 排序,weight 相同,再按 pubdate 排序。
  • orderway='desc':指定排序方式为降序(从大到新),这个参数可以确保 weightpubdate 都是降序排列,如果你想让其中一个升序,另一个降序,orderby 的写法会复杂一些,但通常这种综合排序的需求都是“高权重+新内容”优先,所以用 desc 是最常见的选择。

总结与建议

方法 优点 缺点 适用场景
后台修改模板 安全、灵活、可逆,不修改核心文件,升级无忧。 需要手动修改每个列表页模板。 推荐首选,适用于所有需要按权重排序的特定列表页。
修改PHP文件 一劳永逸,修改后,所有列表页默认生效。 有风险,升级织梦会覆盖修改,需重新修改。 适用于希望全站默认按权重排序,且不介意未来升级时重复修改的用户。
综合排序 逻辑最完善,兼顾权重和时效性,用户体验好。 依赖于方法一的模板修改。 强烈推荐,适用于首页头条、推荐位等需要突出重要且新鲜内容的场景。

给你的最终建议:

  1. 优先使用方法一和三:在你的模板文件中,通过 arclist 标签的 orderby 属性来控制排序,这是最安全、最规范的做法。
  2. 只在必要时使用方法二:如果你有大量的列表页都需要按权重排序,并且不想一个个去改模板,可以考虑修改核心文件,但一定要做好备份。
  3. 确保权重字段有值:无论使用哪种方法,请确保你在后台发布文章时,为“重要”的文章设置了较高的权重值(设置为10、20等),而普通文章可以留空或设置为0,权重为空或0的文章,在按权重排序时,会被排在有权重值的文章之后。
-- 展开阅读全文 --
头像
C语言转义字符有哪些?
« 上一篇 04-24
织梦广告文件存哪个文件夹?
下一篇 » 04-25

相关文章

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