9.14.1. Ampliando el controlador de filtro personalizado de Views en Drupal
En el artículo anterior vimos cómo integrar el módulo Views con una base de datos personalizada para el módulo ¿Esto ayudó?:
https://www.drupal.org/project/did_this_help
En este artículo sobrescribiremos el filtro de Views para el campo de opción (sí/no):
Ahora es un campo de texto normal creado por el handler "string", que permite introducir una palabra clave de búsqueda. Pero como solo tenemos dos opciones (Sí/No), sería mejor usar un menú desplegable en lugar de un campo de texto. Vamos a crear un archivo en /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 por una lista dada de opciones sí/no. * * @ingroup views_filter_handlers * * @ViewsFilter("did_this_help") */ class DidThisHelp extends InOperator { }
Vamos a heredar la clase DidThisHelp desde la clase padre InOperator, que proporciona el filtro con menú desplegable, botones de radio o casillas de verificación según la configuración en la interfaz de Views.
En el método getValueOptions() agregaremos la lista de opciones disponibles:
/** * {@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 propiedad valueOptions ya está definida en la clase padre InOperator, por lo que solo necesitamos definir el array de opciones.
Como resultado, obtenemos ese filtro:
Si activamos el filtro expuesto, entonces vemos este menú desplegable:
Puedes sobrescribir cualquier clase de filtro de esta lista de clases proporcionadas por Views y otros módulos: