У меня есть представление, в котором необходимо установить значение по умолчанию для открытого фильтра на основе поля пользовательского объекта. Это в основном работает:
функция MYMODULE_views_pre_build(\Drupal\views\ViewExecutable $view) {
если ($view->current_display !== 'MY_VIEW_DISPLAY') {
возвращаться;
}
$exposedFilterValues = $view->getExposedInput();
если (!array_key_exists('MY_FIELD', $exposedFilterValues)) {
$personalizedDefaultValue = $someUserEntity->getMyCustomDefaultFilterValue();
$view->setExposedInput(array_merge($exposedFilterValues, ['MY_FIELD' => $personalizedDefaultValue] );
$view->element['#cache']['tags'] = Cache::mergeTags($view->element['#cache']['tags'] ?? [], $someUserEntity->getCacheTags() );
}
}
НО:
На этой странице представлений также есть контекстный фильтр, фильтрующий совершенно другое поле. Как только значение контекстного фильтра присутствует в URL-адресе, приведенный выше код все еще выполняется, но это не влияет на внешний интерфейс. Без значения контекстного фильтра он работает отлично.
Почему код для открытого поля не работает, когда существует совершенно другое контекстное значение поля?