Drupal Technical
[Drupal 7][Views 3.x] How to programmatically render a view display passing exposed filter inputs via code using $view->exposed_input
This is how you would normally render a view display passing filter inputs via code:
$view = views_get_view('view-name'); $view->set_display('display-name'); $view->is_cacheable = FALSE; $filter_1 = $view->get_item('display-name', 'filter', 'filter_1_id'); $filter_2 = $view->get_item('display-name', 'filter', 'filter_2_id'); $filter_1['value'] = "value1"; $filter_2['value'] = "value2"; $view->set_item('display-name', 'filter', 'filter_1_id', $filter_1); $view->set_item('display-name', 'filter', 'filter_2_id', $filter_2); dpm($view->render());
The problem with this method is that it sometimes fails when you are trying to filter on the node status (published/unpublished) - selecting 'unpublished' items does not work in some cases.
You can use the following method instead to render a view display with exposed filters, passing the filter inputs as follows:
$view = views_get_view('view-name'); $view->set_display('display-name'); $view->is_cacheable = FALSE; $view->exposed_input['filter_1_exposed_input_name'] = "value1"; $view->exposed_input['filter_2_exposed_input_name'] = "value2"; dpm($view->render());
For this, you first need to find the exposed input field name, structure.
For that, use the following piece of code:
$view = views_get_view('view-name'); $view->set_display('display-name'); $view->is_cacheable = FALSE; $view->execute(); dpm($view->exposed_raw_input);
With Devel module enabled, running this once, you will get the names, structures of the available exposed input filter fields. Here's a sample output of that: