Drupal → Как расширить функционал фильтр-плагина Views? (добавляем возможность фильтровать числовые поля по нескольким значениям)
Пример добавления возможности фильтровать числовые поля по нескольким значениями (оператор "in").
1. В папке своего модуля src/Plugin/views/filter
создаём класс и наследуем его от класса, который нужно расширить. В этом классе переопределяем нужные методы и по необходимости добавляем свои. Аннотацию плагина добавлять не нужно.
class ExtendedNumericFilter extends NumericFilter { /** * {@inheritDoc} */ public function operators() { $operators = parent::operators(); $operators['in'] = [ 'title' => $this->t('Is one of'), 'short' => $this->t('in'), 'short_single' => $this->t('='), 'method' => 'opIn', 'values' => 1, ]; return $operators; } /** * "in" operator. */ protected function opIn($field) { $values = explode(',', $this->value['value']); $this->query->addWhere($this->options['group'], $field, $values, $this->operator); } }
2. Подменяем класс оригинального плагина в хуке hook_views_plugins_filter_alter()
:
/** * Implements hook_views_plugins_filter_alter(). */ function MODULENAME_views_plugins_filter_alter(array &$plugins) { $plugins['numeric']['class'] = ExtendedNumericFilter::class; }
3. Сбрасываем кэш.
Теперь у числовых полей в фильтре появится оператор "Is one of", которому можно прописать значения в формате 1,2,3
.
По аналогии можно подменить любой плагин в друпале, но злоупотреблять этим не стоит, особенно если пишете общедоступный модуль.
Оставить комментарий