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

(图片来源网络,侵删)
后台直接修改(最简单,适用于列表页)
这是最直接的方法,通过修改后台的列表模板文件,直接在调用文章的标签里加入排序规则。
操作步骤:
- 登录织梦后台。
- 进入“模板” -> “模板管理”。
- 在左侧选择你当前使用的网站模板。
- 找到并点击修改你想要调整的文章列表页模板,这通常是:
list_article.htm(文章列表页)index.htm(首页文章列表)- 或其他自定义的列表页模板。
- 在模板文件中,找到调用文章列表的
arclist- 在
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文件。
⚠️ 重要提示: 修改核心文件后,如果未来升级织梦程序,这些修改可能会被覆盖,请务必提前备份好你的网站和文件。
操作步骤:
- 备份文件:在修改前,请务必备份
/include/arc.archives.class.php文件。 - 打开文件:使用FTP或文件管理器,找到并打开
/include/arc.archives.class.php文件。 - 查找代码:在文件中搜索
GetArcList函数(通常在文件开头部分)。 - 修改排序逻辑:找到
$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':指定排序方式为降序(从大到新),这个参数可以确保weight和pubdate都是降序排列,如果你想让其中一个升序,另一个降序,orderby的写法会复杂一些,但通常这种综合排序的需求都是“高权重+新内容”优先,所以用desc是最常见的选择。
总结与建议
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 后台修改模板 | 安全、灵活、可逆,不修改核心文件,升级无忧。 | 需要手动修改每个列表页模板。 | 推荐首选,适用于所有需要按权重排序的特定列表页。 |
| 修改PHP文件 | 一劳永逸,修改后,所有列表页默认生效。 | 有风险,升级织梦会覆盖修改,需重新修改。 | 适用于希望全站默认按权重排序,且不介意未来升级时重复修改的用户。 |
| 综合排序 | 逻辑最完善,兼顾权重和时效性,用户体验好。 | 依赖于方法一的模板修改。 | 强烈推荐,适用于首页头条、推荐位等需要突出重要且新鲜内容的场景。 |
给你的最终建议:
- 优先使用方法一和三:在你的模板文件中,通过
arclist标签的orderby属性来控制排序,这是最安全、最规范的做法。 - 只在必要时使用方法二:如果你有大量的列表页都需要按权重排序,并且不想一个个去改模板,可以考虑修改核心文件,但一定要做好备份。
- 确保权重字段有值:无论使用哪种方法,请确保你在后台发布文章时,为“重要”的文章设置了较高的权重值(设置为10、20等),而普通文章可以留空或设置为0,权重为空或0的文章,在按权重排序时,会被排在有权重值的文章之后。
