addfilter dede 参数如何使用?

99ANYc3cd6
预计阅读时长 17 分钟
位置: 首页 DEDE建站 正文

addfilter 的主要作用是 为列表或内容页添加额外的查询条件(即 WHERE 子句),从而实现更灵活的数据筛选,它通常与 arclistlistsql 等具有列表查询功能的标签配合使用。

addfilter dede 参数
(图片来源网络,侵删)

基本语法

{addfilter field='字段名' value='值' relation='关系' condition='条件'}

这个标签本身不会输出任何内容,它更像一个“指令”,告诉后续的列表标签如何修改其 SQL 查询语句。


参数详解

addfilter 有四个核心参数,理解它们是关键:

field (必须)

  • 作用: 指定你要筛选的 数据表字段名
  • 类型: 字符串
  • 示例:
    • field='typeid': 筛选栏目ID。
    • field='flag': 筛选文章属性(如 'h' 推荐, 'c' 特荐等)。
    • field='arcrank': 筛选审核状态(如 '-1' 待审核, '0' 已审核)。
    • field='click': 筛选点击量。
    • field='pubdate': 筛选发布日期。
    • field='mid': 筛选作者/会员ID。

value (必须)

  • 作用: 指定字段要匹配的
  • 类型: 字符串或数字
  • 示例:
    • value='10': 匹配值为 10 的记录。
    • value='h': 匹配属性为 'h' (推荐) 的记录。
    • value='2025-01-01': 匹配日期为 '2025-01-01' 的记录。

relation (可选)

  • 作用: 指定当前 addfilter 条件与 其他条件(或默认条件)之间的逻辑关系,这是实现复杂筛选的关键。
  • 类型: 字符串
  • 常用值:
    • AND (默认): 并且,表示必须同时满足当前条件和其他所有条件。
    • OR: 或者,表示满足当前条件 或者 满足其他条件即可。
    • AND NOT: 并且不,表示必须满足其他条件,但 不能 满足当前条件。
    • OR NOT: 或者不,表示不满足当前条件 或者 满足其他条件即可。(较少用)

condition (可选)

  • 作用: 指定字段与值之间的 比较运算符,比简单的 更加灵活。
  • 类型: 字符串
  • 常用值:
    • (默认): 等于。
    • 不等于。
    • >: 大于。
    • >=: 大于等于。
    • <: 小于。
    • <=: 小于等于。
    • LIKE: 模糊匹配。value='%关键词%' 可以查找标题或内容中包含“关键词”的文章。
    • IN: 在...之中。value='1,2,3' 可以查找ID为1、2或3的文章。
    • NOT IN: 不在...之中。

使用场景与示例

场景1:筛选特定属性的文章(最常用)

需求: 在首页或栏目页,只显示带有 "推荐" 标志的文章。

代码:

addfilter dede 参数
(图片来源网络,侵删)
{addfilter field='flag' value='h' relation='AND'}
{dede:arclist titlelen='30' row='10'}
    <li><a href='[field:arcurl/]'>[field:title/]</a></li>
{/dede:arclist}

解析:

  • field='flag': 我们要筛选 dede_archives 表中的 flag 字段。
  • value='h': h 是 DedeCMS 中“推荐”的标志。
  • relation='AND': (可省略,因为是默认值) 确保这个条件与 arclist 标签自带的 typeid(栏目ID)等条件是“关系。
  • 最终生成的 SQL WHERE 子句类似:... WHERE typeid='栏目ID' AND flag='h'

场景2:组合筛选(AND 关系)

需求: 在某个栏目下,显示“推荐” 并且 审核状态为“已发布”的文章。

代码:

{addfilter field='flag' value='h' relation='AND'}
{addfilter field='arcrank' value='0' relation='AND'}
{dede:arclist titlelen='30' row='10'}
    <li><a href='[field:arcurl/]'>[field:title/]</a></li>
{/dede:arclist}

解析:

addfilter dede 参数
(图片来源网络,侵删)
  • 第一个 addfilter 添加了 flag='h' 的条件。
  • 第二个 addfilter 添加了 arcrank='0' 的条件,并明确指定 relation='AND'
  • 最终生成的 SQL WHERE 子句类似:... WHERE typeid='栏目ID' AND flag='h' AND arcrank='0'

场景3:使用 OR 关系实现“或”逻辑

需求: 显示栏目ID为 1 的文章 或者 是“推荐”的文章(无论在哪个栏目)。

代码:

{addfilter field='flag' value='h' relation='OR'}
{dede:arclist typeid='1' titlelen='30' row='10'}
    <li><a href='[field:arcurl/]'>[field:title/]</a></li>
{/dede:arclist}

解析:

  • typeid='1'arclist 标签自带的条件,表示只查找栏目1。
  • addfilterrelation='OR' 改变了逻辑,表示查找 (栏目ID=1) 或者 (flag='h') 的文章。
  • 最终生成的 SQL WHERE 子句类似:... WHERE typeid='1' OR flag='h'

场景4:使用 condition 参数进行复杂筛选

需求: 显示点击量 大于 100 的文章。

代码:

{addfilter field='click' value='100' condition='>'}
{dede:arclist titlelen='30' row='10'}
    <li><a href='[field:arcurl/]'>[field:title/]</a> ([field:click/])</li>
{/dede:arclist}

解析:

  • field='click': 筛选点击量字段。
  • value='100': 基准值是100。
  • condition='>': 比较运算符是“大于”。
  • 最终生成的 SQL WHERE 子句类似:... WHERE typeid='栏目ID' AND click > 100

场景5:使用 NOT 排除特定内容

需求: 在首页显示所有文章,但 不显示 标题包含“广告”字样的文章。

代码:

{addfilter field='title' value='%广告%' condition='LIKE' relation='AND NOT'}
{dede:arclist titlelen='30' row='10'}
    <li><a href='[field:arcurl/]'>[field:title/]</a></li>
{/dede:arclist}

解析:

  • field='title': 在标题字段中筛选。
  • value='%广告%': 使用 LIKE 和 实现模糊匹配,查找包含“广告”的标题。
  • condition='LIKE': 指定使用模糊匹配。
  • relation='AND NOT': 这是一个强大的组合,表示“并且不包含...”,它确保文章必须属于当前栏目 (typeid),但同时标题不能包含“广告”。
  • 最终生成的 SQL WHERE 子句类似:... WHERE typeid='栏目ID' AND NOT title LIKE '%广告%'

注意事项

  1. 标签顺序: addfilter 标签必须放在它要影响的列表标签(如 arclist, list之前
  2. 字段存在: field 参数指定的字段必须是目标数据表(通常是 dede_archives)中真实存在的字段,否则可能会导致查询错误。
  3. 值类型: value 的值类型要和字段类型匹配。click 是数字,value 直接写数字即可;title 是字符串,value 最好用单引号或双引号括起来。
  4. 调试: 如果筛选结果不符合预期,最好的方法是查看页面最终生成的 SQL 语句,你可以在 include/dedetag.class.php 中找到相关代码进行输出调试,或者使用浏览器开发者工具的网络面板分析请求。
参数 作用 可选值 示例
field 指定筛选字段 数据表字段名 field='typeid'
value 指定筛选值 任意字符串或数字 value='10'
relation 指定逻辑关系 AND, OR, AND NOT, OR NOT relation='OR'
condition 指定比较运算符 , , >, <, LIKE, IN condition='>'

addfilter 是 DedeCMS 模板开发中实现动态数据筛选的利器,熟练掌握它能让你制作出功能更加强大和个性化的网站。

-- 展开阅读全文 --
头像
织梦后台登录界面乱码如何解决?
« 上一篇 2025-12-18
dede datalist标签php如何实现数据调用?
下一篇 » 2025-12-18

相关文章

取消
微信二维码
支付宝二维码

目录[+]