[РЕШЕНО] Убираются нужные фильтры во views.

Главные вкладки

Аватар пользователя Valery.O Valery.O 1 сентября 2017 в 11:47

Была задача убрать лишние пункты из раскрытого фильтра views (которых нет в материалах), чтобы views не отображал пустую страницу.

1. Получаю результаты view
2. Достаю из них id всех терминов
3. Затем вырезаю лишние из контекстного фильтра. (в данном коде этого нет);


Проблема:
Захожу во views (пока все отлично) в материалах допустим есть только "фрукты" и "овощи" и они же остались в раскрытом фильтре, остальные вырезаны. Затем я выбираю "фрукты" в раскрытом фильтре, страница перезагружается и у меня исчезают все остальные пункты раскрытого фильтра. Хотя по идее я получаю же список материалов НЕ из текущего views и БЕЗ учета фильров ($view = \Drupal\views\Views::getView('my_view')).

if ($form_id == 'views_exposed_form' && $form['#id'] == 'views-exposed-form-my-view-page-1') {
    $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);

Лучший ответ

Аватар пользователя Valery.O Valery.O 3 сентября 2017 в 13:58

Добавить значение раскрытого фильтра в 'All'
$view->setExposedInput(array('field_tip' => 'All'));

Комментарии