9.14.1. Estendere un gestore personalizzato di filtro Views in Drupal
Nell'articolo precedente abbiamo visto come integrare i moduli Views con un database personalizzato per il modulo Did this help?:
https://www.drupal.org/project/did_this_help
In questo articolo sovrascriveremo il filtro di Views per il campo Scelta (sì/no):

Ora è un normale campo di testo creato dal gestore "string", che permette di aggiungere una chiave di ricerca. Ma abbiamo solo due opzioni Sì/No, quindi sarebbe meglio avere un menu a tendina invece di un campo di testo. Creiamo un file /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;
/**
 * Filtra in base a una lista di opzioni sì/no.
 *
 * @ingroup views_filter_handlers
 *
 * @ViewsFilter("did_this_help")
 */
class DidThisHelp extends InOperator {
}
Erediteremo la classe DidThisHelp dalla classe padre InOperator, che fornisce un filtro con selezione a tendina, pulsanti radio o checkbox a seconda delle impostazioni della UI di Views.
Nel metodo getValueOptions() aggiungeremo la lista delle opzioni disponibili:
  /**
   * {@inheritdoc}
   */
  public function getValueOptions() {
    if (isset($this->valueOptions)) {
      return $this->valueOptions;
    }
    $this->valueOptions = [
      'yes' => $this->t('Sì'),
      'no' => $this->t('No'),
    ];
    return $this->valueOptions;
  }
La proprietà valueOptions è stata definita nella classe padre InOperator, quindi dobbiamo solo definire l'array delle opzioni.
Come risultato otteniamo questo filtro:

Se abilitiamo il filtro esposto, vedremo questo menu a tendina:

Puoi sovrascrivere qualsiasi classe Filter da questo elenco di classi fornite da Views e altri moduli:
| Nome | Percorso | Descrizione | 
|---|---|---|
| Access | core/ | Filtro per record node_access. | 
| BooleanOperator | core/ | Filtro semplice per la gestione dei valori booleani. | 
| BooleanOperatorString | core/ | Filtro semplice per la gestione dei valori booleani. | 
| Broken | core/ | Un gestore speciale per sostituire gestori mancanti o non funzionanti. | 
| Bundle | core/ | Classe di filtro che consente di filtrare per bundle di entità. | 
| Current | core/ | Gestore di filtro per l'utente corrente. | 
| Date | core/ | Filtro Views per data/ora. | 
| Date | core/ | Filtro per gestire le date memorizzate come timestamp. | 
| Equality | core/ | Filtro semplice per gestire uguaglianza/disuguaglianza. | 
| FilterBooleanOperatorDefaultTest | core/ | Filtro per testare queryOpBoolean() con operatore predefinito. | 
| FilterPluginBase | core/ | Classe base per i plugin gestori dei filtri Views. | 
| GroupByNumeric | core/ | Filtro semplice per gestire maggiore/minore di. | 
| HistoryUserTimestamp | core/ | Filtro per contenuti nuovi. | 
| InOperator | core/ | Filtro semplice per gestire corrispondenze di più opzioni selezionabili via checkbox. | 
| LanguageFilter | core/ | Fornisce filtro per lingua. | 
| LatestRevision | core/ | Filtro per mostrare solo l'ultima revisione di un'entità. | 
| ListField | core/ | Gestore di filtro che usa i campi lista come opzioni. | 
| ManyToOne | core/ | Filtro complesso per gestire relazioni molti-a-uno, come termini (molti termini per nodo) o ruoli (molti ruoli per utente). | 
| ModerationStateFilter | core/ | Fornisce un filtro per lo stato di moderazione di un'entità. | 
| Name | core/ | Gestore di filtro per nomi utente. | 
| NodeComment | core/ | Filtro basato sullo stato dei commenti dei nodi. | 
| NumericFilter | core/ | Filtro semplice per gestire maggiore/minore di. | 
| Permissions | core/ | Gestore di filtro per ruoli utente. | 
| Roles | core/ | Gestore di filtro per ruoli utente. | 
| Search | core/ | Gestore di filtro per parole chiave di ricerca. | 
| Standard | core/ | Implementazione predefinita del plugin filtro base. | 
| StatisticsLastUpdated | core/ | Gestore di filtro per ultimo commento/nodo aggiornato. | 
| Status | core/ | Filtro per stato file. | 
| Status | core/ | Filtro per stato di pubblicazione. | 
| StringFilter | core/ | Filtro base con campo testo per gestire comandi di filtraggio stringhe inclusi uguaglianza, like, not like, ecc. | 
| TaxonomyIndexTid | core/ | Filtro per ID termine. | 
| TaxonomyIndexTidDepth | core/ | Gestore di filtro per termini tassonomici con profondità. | 
| UidRevision | core/ | Gestore di filtro per verificare revisioni create da un certo utente. | 
| UserUid | core/ | Gestore di filtro per accettare un ID utente e verificare i nodi che quell'utente ha pubblicato o commentato. | 
| UserUid | core/ | Filtro UID per verificare i nodi che un utente ha pubblicato o commentato. | 
| ViewsFilter | core/ | Definisce un oggetto di annotazione Plugin per i gestori dei filtri Views. |