什么是 noflag 属性?
noflag 是织梦CMS自定义标记({dede:})中的一个排除属性,它的作用是:在调用文章列表时,排除掉所有设置了指定标识(flag)的文章。

它和 flag 属性是相对的。
flag='h':只调用设置了h(头条) 标识的文章。noflag='h':调用所有文章,但排除掉设置了h(头条) 标识的文章。
noflag 属性的语法和用法
noflag 属性通常用在需要循环输出文章列表的标签中,最常见的有 arclist(文章列表)、list(栏目列表)、likearticle(相关文章)等。
基本语法
{dede:标签名 noflag='标识值' ...}
<!-- 循环体内的内容 -->
<a href="[field:arcurl/]">[field:title/]</a>
{/dede:标签名}
标识值
noflag 属性的值是一个或多个标识字符的组合,这些字符是在后台发布文章时,在“高级选项” -> “自定义属性”中设置的。
常见的默认标识有:
c:推荐h:头条p:图片j:跳转s:幻灯a:特荐b:滚动f:加粗
注意:这些标识字符是大小写敏感的,通常使用小写。
多个标识的组合
如果你想排除多个标识的文章,可以将它们直接拼接在一起,不需要任何分隔符。
noflag='hc':排除所有“头条”和“推荐”的文章。noflag='psj':排除所有“图片”、“幻灯”和“跳转”的文章。
实战场景与示例
理解了概念,我们来看几个实际开发中非常常见的应用场景。
首页调用普通文章,排除头条和推荐
假设你的首页布局是:顶部有一个专门的头条推荐区域,下面是一个“最新文章”列表,这个“最新文章”列表里就不应该再包含头条和推荐的文章,否则内容就会重复。
实现方法:
- 在后台发布文章时,给需要作为“头条”或“推荐”的文章,在“自定义属性”中勾选
h或c。 - 在首页模板 (
index.htm) 中,编写如下代码来调用普通文章:
<h2>最新文章</h2>
<ul>
{dede:arclist titlelen='40' row='10' noflag='hc'}
<li>
<span class="date">[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
</li>
{/dede:arclist}
</ul>
代码解析:
noflag='hc':这里的关键部分,它告诉织梦,在获取文章列表时,跳过所有flag字段中包含h或c的记录。- 这样,即使你最新发布的文章被设为了头条或推荐,它也不会出现在这个列表里,完美实现了内容分离。
栏目页调用文章,排除“图片”和“跳转”文章
假设某个栏目(如“下载中心”)里的文章,一部分是图文并茂的内容(标识 p),一部分是纯文字的下载链接(标识 j),你希望在栏目页只显示纯文字的下载链接。
实现方法:
在栏目模板 (list_article.htm) 中:
<h3>下载列表</h3>
<dl>
{dede:list pagesize='15' noflag='pj'}
<dt><a href="[field:arcurl/]">[field:title/]</a></dt>
<dd>[field:description function='cn_substr(@me,100)'/]...</dd>
{/dede:list}
</dl>
代码解析:
noflag='pj':这个设置会排除掉所有标识为p(图片) 和j(跳转) 的文章,栏目页只会显示没有这两个标识的普通文章。
相关文章调用,排除“特荐”文章
页,你希望显示一些相关的普通文章,但不想让“特荐”级别的文章出现在这里,以保持相关文章的“普通”属性。
实现方法:
页模板 (article_article.htm) 中:
<div class="related">
<h4>相关文章</h4>
{dede:likearticle titlelen='24' row='8' noflag='a'}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:likearticle}
</div>
代码解析:
noflag='a':在调用与当前文章相关的文章时,排除了所有标识为a(特荐) 的文章。
noflag 与 flag 的区别与联系
这是一个容易混淆的点,这里做个清晰的对比:
| 属性 | 作用 | 逻辑关系 | 示例 (只调用普通文章) |
|---|---|---|---|
flag |
包含/只调用,只返回设置了指定标识的文章。 | 白名单机制。 | flag='' (空字符串) 表示调用所有标识为空的文章。 |
noflag |
排除/不调用,返回所有文章,但会过滤掉设置了指定标识的文章。 | 黑名单机制。 | noflag='hc' 表示排除所有设置了 h 或 c 标识的文章。 |
如何实现“只调用普通文章”?
“普通文章”指的是那些没有设置任何自定义属性的文章,有两种方法可以实现:
-
使用
flag(推荐):{dede:arclist flag=''} ... {/dede:arclist}flag=''的意思是,只调用flag字段为空的文章,这正是“普通文章”的定义。 -
使用
noflag(可以,但不精确):{dede:arclist noflag='hcpsjbf'} ... {/dede:arclist}这种方法是把所有已知的标识都列出来进行排除,这种方法有两个缺点:
- 不灵活:如果你以后新增了一个自定义标识(
v代表视频),你就需要回来修改模板代码。 - 不彻底:如果有人使用了你未知的自定义标识,这些文章依然会被调用。
- 不灵活:如果你以后新增了一个自定义标识(
如果需求是“只调用普通文章”,优先使用 flag='',如果需求是“排除掉某几类特殊文章”,则使用 noflag。
| 特性 | 描述 |
|---|---|
| 核心功能 | 排除指定标识的文章,不显示在列表中。 |
| 使用标签 | 主要用于 arclist, list, likearticle 等循环列表标签。 |
| 属性值 | 一个或多个标识字符的直接组合(如 'hc', 'psj'),不分大小写(但建议统一小写)。 |
与 flag 的关系 |
noflag 是 flag 的反向操作。flag 是“只显示”,noflag 是“不显示”。 |
| 最佳实践 | - 当需要从列表中移除特定类型的内容(如头条、推荐、图片)时,noflag 是最直接、最高效的工具。- 当需要调用“完全普通”的文章时,使用 flag='' 比 noflag 更精确、更灵活。 |
掌握 noflag 属性,能让你在织梦模板制作中更加得心应手,轻松实现复杂的内容布局和筛选需求。
