Была задача убрать лишние пункты из раскрытого фильтра views (которых нет в материалах), чтобы views не отображал пустую страницу.
1. Получаю результаты view
2. Достаю из них id всех терминов
3. Затем вырезаю лишние из контекстного фильтра. (в данном коде этого нет);
Проблема:
Захожу во views (пока все отлично) в материалах допустим есть только "фрукты" и "овощи" и они же остались в раскрытом фильтре, остальные вырезаны. Затем я выбираю "фрукты" в раскрытом фильтре, страница перезагружается и у меня исчезают все остальные пункты раскрытого фильтра. Хотя по идее я получаю же список материалов НЕ из текущего views и БЕЗ учета фильров ($view = \Drupal\views\Views::getView('my_view')).
$current_path = \Drupal::service('path.current')->getPath();
$path_args = explode('/', $current_path);
$args = array($path_args[2],$path_args[3]); //аргументы для URL для контекстного фильтра views
$view = \Drupal\views\Views::getView('my_view'); //получаем views
if (is_object($view)) {
$view->setArguments($args); //добавляем аргументы для контекстного фильтра views
$view->execute();
$response = $view->result;
}
$tidIDs = [];
foreach ($response as $key => $value) {
$obj = $response[$key]->_entity;
$propGetter = Closure::bind(function($prop){return $this->$prop;}, $obj, $obj ); //достаём protected свойства
array_push($tidIDs, $getTid['field_tip']['x-default'][0]['target_id']); //добавляем id термина из полученного views в новый массив
}
$uniTidIDs = array_unique($tidIDs);
Комментарии
Добавить значение раскрытого фильтра в 'All'
$view->setExposedInput(array('field_tip' => 'All'));