核心概念:{dede:field name='flag' /} 是什么?
{dede:field name='flag' /} 标签用于获取并显示当前文章(或文档)的“属性标志”。

这里的 "flag" 指的是在后台发布文章时,文章标题下方的一组复选框选项,这些选项用来给文章打上各种“标签”或“标记”,以便在模板中进行判断和处理,实现不同的显示效果。
它不是一个简单的文本字段,而是一个由多个状态组合而成的“位掩码”(Bitmask)值。
后台中的“属性标志”
我们来看一下后台发布文章时的界面,在文章编辑页面的底部,通常会有一个“属性”设置区域,里面包含多个复选框:
这些复选框就是 flag 字段的具体内容,默认情况下,织梦系统内置了几个常用标志,你还可以在后台自定义添加。

系统默认的标志包括:
- 头条 (h): 文章是否为头条新闻。
- 推荐 (c): 文章是否为推荐内容。
- 跳转 (j): 文章是否为跳转链接(点击标题会跳转到指定URL)。
- 图文 (p): 文章是否为图片集或带有图片的文章。
- 幻灯片 (f): 文章是否为首页焦点图(幻灯片)内容。
- 专题 (s): 文章是否属于某个专题。
自定义标志: 管理员可以在后台的“系统” -> “系统基本参数” -> “核心设置”中,修改“文档列表页默认排序字段”下方的“自定义属性列表”来添加或修改这些标志。
flag 字段的存储原理
当你勾选了“头条”和“推荐”并保存文章后,flag 字段在数据库中存储的不是 "hc" 这样的字符串,而是一个数字。
这个数字是通过一个位运算的规则计算出来的: 每个标志都有一个对应的“位值”(Power of 2):

| 标志 | 位值 | 二进制 |
|---|---|---|
| 头条 | 1 | 1 |
| 推荐 | 2 | 10 |
| 跳转 | 4 | 100 |
| 图文 | 8 | 1000 |
| 幻灯片 | 16 | 10000 |
| 专题 | 64 | 1000000 |
计算方法:
你勾选的所有标志对应的“位值”相加,就是最终的 flag 值。
- 只勾选“头条”:
flag= 1 - 只勾选“推荐”:
flag= 2 - 同时勾选“头条”和“推荐”:
flag= 1 + 2 = 3 - 同时勾选“头条”、“推荐”和“幻灯片”:
flag= 1 + 2 + 16 = 19
{dede:field name='flag' /} 直接输出的是这个计算后的数字,如果一篇文章同时是头条和推荐,那么这个标签会输出 3。
{dede:field name='flag' /} 的正确用法(重点)
直接输出数字 3、19 对用户没有任何意义,这个标签几乎总是与 if 条件判断语句结合使用,来实现不同的页面逻辑。
基本语法:
{dede:field name='flag' function='(@me == "数字值" ? "显示内容" : "")'/}
或者更清晰的写法:
{dede:if condition='(@me == "数字值")'}
<!-- 如果条件成立,显示这里的内容 -->
<span class="tag">头条</span>
<img src="/images/hot.gif" />
{/dede:if}
@me在这里是一个变量,代表{dede:field name='flag' /}当前获取到的值。function和if是两种常用的条件判断方式。
实用示例
假设我们要在文章列表页,根据文章的 flag 属性显示不同的标记。
场景:
- 如果文章是“头条”,显示一个红色的“[头条]”标签。
- 如果文章是“推荐”,显示一个黄色的“[推荐]”标签。
- 如果文章同时是“头条”和“推荐”,则两个标签都显示。
在 list_article.htm 模板文件中,你可以这样写:
<li>
<!-- 文章标题 -->
<a href="[field:arcurl/]">[field:title/]</a>
<!-- 开始判断 flag 属性 -->
<!-- 判断是否为头条 (flag == 1) -->
{dede:if condition='(@me == "1")'}
<span class="tag tag-headline">[头条]</span>
{/dede:if}
<!-- 判断是否为推荐 (flag == 2) -->
{dede:if condition='(@me == "2")'}
<span class="tag tag-recommend">[推荐]</span>
{/dede:if}
<!-- 判断是否同时为头条和推荐 (flag == 3) -->
{dede:if condition='(@me == "3")'}
<span class="tag tag-headline">[头条]</span>
<span class="tag tag-recommend">[推荐]</span>
{/dede:if}
<!-- 你也可以判断其他属性,比如是否为跳转链接 (flag == 4) -->
{dede:if condition='(@me == "4")'}
<span class="tag tag-jump">[跳转]</span>
{/dede:if}
<!-- 结束判断 -->
<!-- 文章发布时间等 -->
<span class="date">[field:pubdate function='MyDate("Y-m-d",@me)'/]</span>
</li>
CSS 样式示例 (可以加到你的CSS文件中):
.tag {
padding: 2px 6px;
border-radius: 3px;
font-size: 12px;
margin-left: 8px;
}
.tag-headline {
background-color: #ff4d4d;
color: #fff;
}
.tag-recommend {
background-color: #ff9900;
color: #fff;
}
.tag-jump {
background-color: #00a0e9;
color: #fff;
}
通过这种方式,你就可以灵活地控制文章的显示样式,实现丰富多彩的页面效果。
| 问题 | 答案 |
|---|---|
{dede:field name='flag' /} 是什么? |
一个获取文章“属性标志”的标签。 |
| 它存储什么? | 一个通过位运算计算出的数字,而不是文本。 |
| 怎么用? | 几乎总是与 if 条件判断结合使用,来显示不同的HTML内容(如标签、图片等)。 |
| 为什么重要? | 它是实现文章内容多样化、精细化展示的关键,是织梦模板开发中必须掌握的知识点。 |
理解了 flag 的工作原理,你就能更好地驾驭织梦模板,制作出功能强大且用户体验良好的网站。
