织梦arclist如何按权重排序

orderby weight 置顶 排序

什么是权重排序

织梦文章表 dede_archives 中有一个 weight 字段,用于人工指定文章的展示顺序。weight 值越小越靠前(默认值 0),通过设置不同的 weight 值,可以让某些文章在列表中优先展示,比单纯的「按时间排序」更灵活。

效果演示

重点推荐文章标题 weight=1
普通推荐文章 weight=10
最新发布文章 weight=100
历史文章 weight=200

基础调用方法

{dede:arclist} 中加 orderby='weight'

{dede:arclist typeid='1' row='10' orderby='weight' orderway='asc'}
  <li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:arclist}

参数说明:

权重 + 时间组合排序

如果想让权重相等的文章按发布时间倒序,可用 orderby='weight pubdate'(多字段排序):

{dede:arclist typeid='1' row='10'
    orderby='weight pubdate'
    orderway='asc'
    isweight='y'}
  <li>
    <span class="weight">[field:weight/]</span>
    <a href="[field:arcurl/]">[field:title/]</a>
  </li>
{/dede:arclist}

isweight='y' 表示开启权重字段,新版本可省略。

修改文章权重

在后台修改文章权重有两种途径:

方式一:文章编辑页

  1. 后台 → 核心 → 所有文档列表 → 编辑某篇文章。
  2. 「高级参数」标签 → 找到「权重」输入框。
  3. 填入数字(1-1000),数字越小越靠前。

方式二:批量修改

在文档列表页直接修改 weight 列(需要织梦 5.7 SP3+):点击 weight 数字即可编辑。

方式三:SQL 批量更新

-- 把 ID 为 100 的文章设为置顶
UPDATE `dede_archives` SET weight=1 WHERE id=100;

-- 把某栏目所有文章 weight 重置为 id
UPDATE `dede_archives` SET weight=id WHERE typeid=5;

置顶功能的实现

用 weight 实现置顶非常简单,把要置顶的文章 weight 设为 1-10,普通文章 weight 设为 100+:

{dede:arclist typeid='1' row='10' orderby='weight pubdate' orderway='asc'}
  [field:array runphp='yes']
    if(@me['weight'] <=10){
      @me="<li class='sticky'>
              <span class='pin'>置顶</span>
              <a href='{@me['arcurl']}'>{@me['title']}</a>
            </li>";
    }else{
      @me="<li><a href='{@me['arcurl']}'>{@me['title']}</a></li>";
    }
  [/field:array]
{/dede:arclist}
注意:部分旧版织梦 weight 字段未加索引,列表量大时排序会很慢,建议在数据库执行 ALTER TABLE dede_archives ADD INDEX idx_weight (weight);

权重和 flag 配合使用

实际项目中,权重排序常与 flag='h'(头条)配合:

<!-- 头条区:weight 最小的1条 -->
{dede:arclist flag='h' row='1' orderby='weight' orderway='asc'}
  ...
{/dede:arclist}

<!-- 列表区:其余文章 -->
{dede:arclist flag='c' row='10' orderby='weight pubdate' orderway='asc'}
  ...
{/dede:arclist}

常见问题

weight 排序不生效

1) 检查 orderby='weight' 拼写;2) 检查 orderway='asc'(默认 desc 看不出效果);3) 文章 weight 是否真的设置了不同值。

权重相同时顺序乱

orderby='weight pubdate' 多字段排序,确保 weight 相同时按时间倒序。

权重字段不显示

模板中调用 [field:weight/],如果用 arclist 没输出,加 isweight='y' 参数。

管理权重的最佳实践

行动建议

立刻打开你的文章列表,把首页推荐位的几篇文章 weight 设为 1-10,其他保持默认。然后到首页加 orderby='weight pubdate' orderway='asc' 试试效果。运营时建议在内容规划表中预先标好每篇重点文章的权重值,发布时直接填入,避免事后调整影响排序节奏。把权重管理当成「编辑排期表」用,文章的展示顺序就能精准掌控。