I have some views of display page which I do not want to show to public if there would not be any result when accessed without any exposed filters set. I have a custom views access plugin and a custom access checking class which can handle the access granting.
My idea so far is that I would like to run the view a first time during access checking without exposed filters. In this way I could find out if the view would ever deliver any results. I tried it in the following way:
$view = Views::getView($view_id);
$view->setDisplay($display_id);
$view->setArguments([$politician_id]);
$view->execute();
$result = $view->total_rows;
The problem is: as soon as an user comes to this page with query parameters in the url set by exposed filters these exposed filters are used for this view query as well. I did not find any way to tell the class in $view to execute without exposed filters. I even tried to set these exposed filters data in the following ways but even then the filter data in the query parameters is still used to filter the result set:
$view = Views::getView($view_id);
$view->setDisplay($display_id);
$view->setArguments([$politician_id]);
$view->initDisplay();
$view->initHandlers();
$view->setExposedInput([]);
$view->exposed_data = [];
$view->exposed_raw_input = [];
$view->execute();
$result = $view->total_rows;
I want to achieve that in this way because I want to use this logic for several views. It would be so smart to simply re-use the arguments and filters set in the views instead of hardcoding a new custom database query as the settings in the views might change. I hope someone can help me.