12.14.1. Переопределение Drupal views фильтра
В прошлой статье мы рассмотрели как писать интеграцию кастомной таблицы БД с модулем Views для модуля Did this help:
https://www.drupal.org/project/did_this_help
В этой статье мы изменим фильтр для поля "choice" (поле yes/no):

Сейчас это обычное текстовое поле представленное с помощью handler'а "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;
/**
 * Filters by given list of yes/no options.
 *
 * @ingroup views_filter_handlers
 *
 * @ViewsFilter("did_this_help")
 */
class DidThisHelp extends InOperator {
}
Мы будем наследоваться от класса InOperator, предоставляющего фильтр в виде выбора dropbox, radio buttons или checkboxes, в зависимости от настроек выбранных во 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, нам нужно только определить массив доступных значений.
В результате у нас будет такой доступный фильтр:

Если включить exposed filter, тогда виджет будет выглядеть как dropbox:

Вы можете переопредлить любой другой класс фильтра из списка доступных в модуле Views:
| Name | Location | Description | 
|---|---|---|
| Access | core/ | Filter by node_access records. | 
| BooleanOperator | core/ | Simple filter to handle matching of boolean values | 
| BooleanOperatorString | core/ | Simple filter to handle matching of boolean values. | 
| Broken | core/ | A special handler to take the place of missing or broken handlers. | 
| Bundle | core/ | Filter class which allows filtering by entity bundles. | 
| Current | core/ | Filter handler for the current user. | 
| Date | core/ | Date/time views filter. | 
| Date | core/ | Filter to handle dates stored as a timestamp. | 
| Equality | core/ | Simple filter to handle equal to / not equal to filters | 
| FilterBooleanOperatorDefaultTest | core/ | Filter to test queryOpBoolean() with default operator. | 
| FilterPluginBase | core/ | Base class for Views filters handler plugins. | 
| GroupByNumeric | core/ | Simple filter to handle greater than/less than filters | 
| HistoryUserTimestamp | core/ | Filter for new content. | 
| InOperator | core/ | Simple filter to handle matching of multiple options selectable via checkboxes | 
| LanguageFilter | core/ | Provides filtering by language. | 
| LatestRevision | core/ | Filter to show only the latest revision of an entity. | 
| ListField | core/ | Filter handler which uses list-fields as options. | 
| ManyToOne | core/ | Complex filter to handle filtering for many to one relationships, such as terms (many terms per node) or roles (many roles per user). | 
| ModerationStateFilter | core/ | Provides a filter for the moderation state of an entity. | 
| Name | core/ | Filter handler for usernames. | 
| NodeComment | core/ | Filter based on comment node status. | 
| NumericFilter | core/ | Simple filter to handle greater than/less than filters | 
| Permissions | core/ | Filter handler for user roles. | 
| Roles | core/ | Filter handler for user roles. | 
| Search | core/ | Filter handler for search keywords. | 
| Standard | core/ | Default implementation of the base filter plugin. | 
| StatisticsLastUpdated | core/ | Filter handler for the newer of last comment / node updated. | 
| Status | core/ | Filter by file status. | 
| Status | core/ | Filter by published status. | 
| StringFilter | core/ | Basic textfield filter to handle string filtering commands including equality, like, not like, etc. | 
| TaxonomyIndexTid | core/ | Filter by term id. | 
| TaxonomyIndexTidDepth | core/ | Filter handler for taxonomy terms with depth. | 
| UidRevision | core/ | Filter handler to check for revisions a certain user has created. | 
| UserUid | core/ | Filter handler to accept a user id to check for nodes that user posted or commented on. | 
| UserUid | core/ | UID filter to check for nodes that a user posted or commented on. | 
| ViewsFilter | core/ | Defines a Plugin annotation object for views filter handlers. |