2 min read

Drupal 7: How to programmatically render a views exposed form

If you have experience rendering standard forms using drupal_get_form, you might assume that rendering a Views exposed form is just as simple with a form ID. However, this is not entirely correct, as Views does not provide the form in the standard way, and this approach will not work.

To retrieve the base form and render it manually:

$view = views_get_view($view_name);
$view->set_display($display_id);
$view->init_handlers();
$exposed_form_state = array(
  'view' => &$view,
  'display' => &$view->display[$display_id],
  'exposed_form_plugin' => $view->display_handler->get_plugin('exposed_form'),
  'method' => 'get',
  'rerender' => TRUE,
  'no_redirect' => TRUE,
  'always_process' => TRUE,
);
$form = drupal_build_form('views_exposed_form', $exposed_form_state);
$rendered_form = render($form);

To get the final rendered markup of the form:

$view = views_get_view($view_name);
$view->set_display($display_id);
$view->init_handlers();
$exposed_form = $view->display_handler->get_plugin('exposed_form');
$rendered_form = $exposed_form->render_exposed_form(TRUE);