flag 是 list 标签中一个非常强大且常用的属性,它主要用于对文章进行特殊条件的筛选和排序,而不仅仅是按发布时间倒序。

flag 属性的基本语法
flag 属性通常放在 {dede:list} 标签的开始位置,用空格隔开。
{dede:list flag='排序值' pagesize='20'}
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
{/dede:list}
flag 常用排序值及说明
flag 的值可以是单个或多个(用英文逗号 组合),多个值表示“或”的关系,即满足其中任何一个条件都会被列出。
| 排序值 | 英文全称 | 说明 | 常见用途 |
|---|---|---|---|
c |
commend |
推荐 | 筛选或按推荐级别排序,这是最常用的值之一。 |
h |
headline |
头条 | 筛选或按头条级别排序。 |
p |
pic |
图片 | 筛选或按图片数量排序(通常指有缩略图的文章)。 |
a |
top |
置顶 | 筛选或按置顶级别排序。 |
s |
sort |
特荐 | 筛选或按特荐级别排序。 |
j |
jump |
跳转 | 筛选或按跳转(外链)文章排序。 |
b |
bold |
加粗 | 筛选或按加粗级别排序。 |
flag 的主要使用场景
场景1:筛选(只显示带有特定标志的文章)
这是 flag 最核心的功能,用于创建特定类型的文章列表。
示例1:显示所有“推荐”文章

{dede:list flag='c' pagesize='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:list}
这个列表只会显示后台设置了“推荐”属性的文章。
示例2:显示所有“头条”且带有“图片”的文章
{dede:list flag='h,p' pagesize='10'}
<li>
<a href="[field:arcurl/]">
<img src="[field:litpic/]" alt="[field:title/]">
[field:title/]
</a>
</li>
{/dede:list}
这个列表只会同时满足“头条”和“有缩略图”两个条件的文章。
场景2:排序(按标志的权重排序)
flag 的另一个强大功能是作为排序依据,DedeCMS 内部为不同的 flag 赋予了默认的权重值,权重越高,排序越靠前。

默认权重值(从高到低):
j(跳转) - 权重最高h(头条)p(图片)s(特荐)c(推荐)a(置顶)b(加粗)- 默认(无 flag)- 权重最低
示例3:按文章的“推荐/头条”级别排序
{dede:list flag='h,c' orderby='flag' pagesize='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<!-- 可以通过其他方式显示标志,-->
[field:flag runphp='yes']
$flags = @me;
$str = '';
if (strpos($flags, 'h') !== false) $str .= '<span class="tag-headline">头条</span>';
if (strpos($flags, 'c') !== false) $str .= '<span class="tag-commend">推荐</span>';
@me = $str;
[/field:flag]
</li>
{/dede:list}
orderby='flag':这是关键,它告诉 DedeCMS 按照flag的权重进行排序。- 结果:列表会优先显示“头条”文章,其次是“推荐”文章,最后是其他没有这些标志的文章。
flag 与其他排序属性的结合使用
flag 可以和 list 标签的其他排序属性(如 orderby, orderway)结合使用,实现更复杂的排序逻辑。
orderby: 排序字段(如pubdate发布时间,hot点击量,sortrank权重/置顶等)orderway: 排序方式(desc降序,asc升序)
示例4:先按“推荐”标志筛选,再按“点击量”从高到低排序
{dede:list flag='c' orderby='click' orderway='desc' pagesize='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>点击:[field:click/]</span>
</li>
{/dede:list}
这个列表只会显示“推荐”文章,并且这些文章会按照点击量从高到低排列。
示例5:先按“置顶”标志筛选,再按“发布时间”从新到旧排序
{dede:list flag='a' orderby='pubdate' orderway='desc' pagesize='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:list}
这个列表会显示所有置顶文章,并且最新的置顶文章排在最前面。
重要注意事项
-
后台设置是前提:无论
flag用于筛选还是排序,文章都必须在后台发布/编辑文章时,手动勾选了相应的属性(如“推荐”、“头条”等),否则flag无法生效。 -
权重机制:理解
flag的默认权重对于排序功能至关重要,当你使用orderby='flag'时,系统就是按照这个默认权重值来排列的。 -
组合使用:多个
flag值之间是“或”的关系,flag='h,c'表示“头条 或者 推荐”,而orderby和orderway是对筛选结果进行二次排序。
| 你的需求 | 应用的 flag 和 orderby 属性 |
|---|---|
| 只看推荐文章 | {dede:list flag='c'} |
| 只看头条和图片文章 | {dede:list flag='h,p'} |
| 按推荐/头条级别排序 | {dede:list flag='h,c' orderby='flag'} |
| 推荐文章按点击量排序 | {dede:list flag='c' orderby='click' orderway='desc'} |
| 置顶文章按发布时间排序 | {dede:list flag='a' orderby='pubdate' orderway='desc'} |
通过灵活运用 flag 属性,你可以创建出非常丰富和实用的文章列表页面,而无需修改任何 PHP 代码,完全通过模板标签实现。
