滚动
9.14.1. 扩展自定义 Drupal Views 过滤器处理器
在上一篇文章中,我们研究了如何将 Views 模块与自定义数据库集成,用于 Did this help? 模块:
https://www.drupal.org/project/did_this_help
在这篇文章中,我们将覆盖 Choice (yes/no) 字段的 Views 过滤器:

现在它是一个由 "string" 处理器创建的普通文本字段,允许添加搜索关键字。但我们只有两个选项 Yes/No,因此最好使用下拉框而不是文本框。让我们创建文件 /did_this_help/src/Plugin/views/filter/DidThisHelp.php:
<?php
namespace Drupal\did_this_help\Plugin\views\filter;
use Drupal\views\Plugin\views\filter\InOperator;
/**
* 通过给定的 Yes/No 选项列表进行过滤。
*
* @ingroup views_filter_handlers
*
* @ViewsFilter("did_this_help")
*/
class DidThisHelp extends InOperator {
}
我们将 DidThisHelp 类继承自父类 InOperator,该类提供了根据 Views UI 设置使用选择下拉框、单选按钮或复选框的过滤器。
在 getValueOptions() 方法中,我们将添加可用选项列表:
/**
* {@inheritdoc}
*/
public function getValueOptions() {
if (isset($this->valueOptions)) {
return $this->valueOptions;
}
$this->valueOptions = [
'yes' => $this->t('Yes'),
'no' => $this->t('No'),
];
return $this->valueOptions;
}
属性 valueOptions 已在父类 InOperator 中定义,因此我们只需定义选项数组即可。
最终我们得到了如下过滤器:

如果启用了公开过滤器,那么我们会看到这个下拉框:

你可以覆盖 Views 和其他模块提供的以下任意 Filter 类:
| 名称 | 位置 | 描述 |
|---|---|---|
| Access | core/ |
根据 node_access 记录进行过滤。 |
| BooleanOperator | core/ |
处理布尔值匹配的简单过滤器。 |
| BooleanOperatorString | core/ |
处理布尔值匹配的简单过滤器。 |
| Broken | core/ |
用于替代丢失或损坏处理器的特殊处理器。 |
| Bundle | core/ |
允许按实体 bundle 过滤的类。 |
| Current | core/ |
当前用户的过滤器处理器。 |
| Date | core/ |
日期/时间 Views 过滤器。 |
| Date | core/ |
处理存储为时间戳的日期过滤器。 |
| Equality | core/ |
处理等于/不等于过滤的简单过滤器。 |