По умолчанию, если в раскрытом фильтре по дате с оператором between оставить одно из значений пустым, то фильтр будет просто игнорироваться. Виноват в таком поведении метод \Drupal\views\Plugin\views\filter\Date::acceptExposedInput()
, который возвращает FALSE
если хоть одно значение пустое.
Один из способов решить эту проблему:
// src/Plugin/views/filter/DateOptionalFilter.php
namespace Drupal\MODULENAME\Plugin\views\filter;
use Drupal\views\Plugin\views\filter\Date;
class DateOptionalFilter extends Date {
/**
* {@inheritDoc}
*/
public function acceptExposedInput($input): bool {
$result = parent::acceptExposedInput($input);
if (!$result && ($this->operator == 'between' || $this->operator == 'not between')) {
if ($this->value['min'] && !$this->value['max']) {
$result = TRUE;
$this->value['max'] = '3000-01-01';
}
if (!$this->value['min'] && $this->value['max']) {
$result = TRUE;
$this->value['min'] = '1000-01-01';
}
}
return $result;
}
}
// MODULENAME.module
use Drupal\MODULENAME\Plugin\views\filter\DateOptionalFilter;
/**
* Implements hook_views_plugins_filter_alter().
*/
function MODULENAME_views_plugins_filter_alter(array &$plugins): void {
$plugins['date']['class'] = DateOptionalFilter::class;
}
Написанное актуально для
Drupal 9
Похожие записи
Комментарии
Ждём новых и интересных статей.
Иногда бы ещё с пояснениями для "зелёных"
Добавить комментарий