logo

额外区块类型 (EBT) - 全新的布局构建器体验❗

额外区块类型 (EBT) - 样式化、可定制的区块类型:幻灯片、标签页、卡片、手风琴等更多类型。内置背景、DOM Box、JavaScript 插件的设置。立即体验布局构建的未来。

演示 EBT 模块 下载 EBT 模块

❗额外段落类型 (EPT) - 全新的 Paragraphs 体验

额外段落类型 (EPT) - 类似的基于 Paragraph 的模块集合。

演示 EPT 模块 滚动

滚动

9.14.1. 扩展自定义 Drupal Views 过滤器处理器

29/09/2025, by Ivan

在上一篇文章中,我们研究了如何将 Views 模块与自定义数据库集成,用于 Did this help? 模块:

https://www.drupal.org/project/did_this_help

在这篇文章中,我们将覆盖 Choice (yes/no) 字段的 Views 过滤器:

Yes/no 字段

现在它是一个由 "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 中定义,因此我们只需定义选项数组即可。

最终我们得到了如下过滤器:

Yes/No 过滤器

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

Yes/No 下拉框

你可以覆盖 Views 和其他模块提供的以下任意 Filter 类:

名称 位置 描述
Access core/modules/node/src/Plugin/views/filter/Access.php 根据 node_access 记录进行过滤。
BooleanOperator core/modules/views/src/Plugin/views/filter/BooleanOperator.php 处理布尔值匹配的简单过滤器。
BooleanOperatorString core/modules/views/src/Plugin/views/filter/BooleanOperatorString.php 处理布尔值匹配的简单过滤器。
Broken core/modules/views/src/Plugin/views/filter/Broken.php 用于替代丢失或损坏处理器的特殊处理器。
Bundle core/modules/views/src/Plugin/views/filter/Bundle.php 允许按实体 bundle 过滤的类。
Current core/modules/user/src/Plugin/views/filter/Current.php 当前用户的过滤器处理器。
Date core/modules/datetime/src/Plugin/views/filter/Date.php 日期/时间 Views 过滤器。
Date core/modules/views/src/Plugin/views/filter/Date.php 处理存储为时间戳的日期过滤器。
Equality core/modules/views/src/Plugin/views/filter/Equality.php 处理等于/不等于过滤的简单过滤器。