How do you display Views' exposed filters in a block? Drupal6!!
BartVG - August 3, 2008 - 20:38
Inspired by http://drupal.org/node/213069, I tried converting this code for use in D6. This is my result:
<?php
$view = views_get_view('frontpage2');
$form_state['view'] = $view;
$form_state['display'] = $view->display['default'];
$form = drupal_retrieve_form('views_exposed_form', $form_state);
$form['#action'] = url($view->display['page']->display_options['path']);
drupal_process_form('views_exposed_form', $form, $form_state);
return drupal_render_form('views_exposed_form', $form);
?>On the positive side: it works without breaking the site and it gives only 1 php warning.
On the negative side: only the submit button is showed. I think it has something to do with the $form_state array. I explicitly assign $view and $view->display['default'] to that array, but after that it seems to be the only content of it. I guess this array should come from previous form building stages? At least it should have more content than only the two variables that I assing to it. Does someone know where to get the rest of the array?

No progression
I'm also not sure whether the view object contains what it should contain:
view Object
(
[db_table] => views_view
[base_table] => node
[args] => Array
(
)
[use_ajax] =>
[pager] => Array
(
[use_pager] =>
[items_per_page] => 10
[element] => 0
[offset] => 0
[current_page] => 0
)
[exposed_data] => Array
(
)
[exposed_input] => Array
(
)
[vid] => 2
[name] => frontpage
[description] => Emulates the default Drupal front page; you may set the default home page path to this view to make it your front page.
[tag] => default
[view_php] =>
[is_cacheable] => 0
[display] => Array
(
[default] => views_display Object
(
[db_table] => views_display
[vid] => 2
[id] => default
[display_title] => Defaults
[display_plugin] => default
[position] => 1
[display_options] => Array
(
[sorts] => Array
(
[sticky] => Array
(
[id] => sticky
[table] => node
[field] => sticky
[order] => ASC
)
[created] => Array
(
[order] => DESC
[granularity] => second
[id] => created
[table] => node
[field] => created
[relationship] => none
)
)
[defaults] => Array
(
[sorts] =>
[filters] =>
[access] =>
[use_ajax] =>
[items_per_page] =>
[offset] =>
[use_pager] =>
[pager_element] =>
[style_plugin] =>
[style_options] =>
[row_plugin] =>
[row_options] =>
)
[filters] => Array
(
[promote] => Array
(
[id] => promote
[table] => node
[field] => promote
[operator] => =
[value] => 1
[group] => 0
[exposed] =>
[expose] => Array
(
[operator] =>
[label] =>
)
)
[status] => Array
(
[id] => status
[table] => node
[field] => status
[operator] => =
[value] => 1
[group] => 0
[exposed] =>
[expose] => Array
(
[operator] =>
[label] =>
)
)
[type] => Array
(
[operator] => in
[value] => Array
(
[poll] => poll
[story] => story
)
[group] => 0
[exposed] =>
[expose] => Array
(
[operator] =>
[label] =>
)
[id] => type
[table] => node
[field] => type
[relationship] => none
)
[tid] => Array
(
[operator] => or
[value] => Array
(
[6] => 6
[7] => 7
[9] => 9
[8] => 8
[13] => 13
[10] => 10
[11] => 11
[12] => 12
)
[group] => 0
[exposed] => 1
[expose] => Array
(
[use_operator] => 0
[operator] => tid_op
[identifier] => trefwoord
[label] => Trefwoord
[optional] => 1
[single] => 1
[remember] => 1
[reduce] => 0
)
[type] => select
[vid] => 3
[id] => tid
[table] => term_node
[field] => tid
[hierarchy] => 1
[relationship] => none
[reduce_duplicates] => 1
)
)
[access] => Array
(
[type] => none
[role] => Array
(
)
[perm] =>
)
[header_format] => 1
[footer_format] => 1
[empty_format] => 1
[use_ajax] => 1
[items_per_page] => 10
[offset] => 0
[use_pager] => 1
[pager_element] => 0
[style_plugin] => default
[style_options] => Array
(
)
[row_plugin] => node
[row_options] => Array
(
[teaser] => 1
[links] => 1
)
)
)
[page] => views_display Object
(
[db_table] => views_display
[vid] => 2
[id] => page
[display_title] => Page
[display_plugin] => page
[position] => 2
[display_options] => Array
(
[path] => frontpage
[menu] => Array
(
[type] => none
[title] =>
[weight] => 0
)
[tab_options] => Array
(
[type] => none
[title] =>
[weight] => 0
)
)
)
[feed] => views_display Object
(
[db_table] => views_display
[vid] => 2
[id] => feed
[display_title] => Feed
[display_plugin] => feed
[position] => 3
[display_options] => Array
(
[sitename_title] => 1
[title] => Front page feed
[defaults] => Array
(
[title] =>
[sitename_title] =>
)
[style_options] => Array
(
[mission_description] => 1
[description] =>
)
[row_plugin] => node_rss
[row_options] => Array
(
[item_length] => default
)
[path] => rss.xml
[menu] => Array
(
[type] => none
[title] =>
[weight] => 0
)
[tab_options] => Array
(
[type] => none
[title] =>
[weight] => 0
)
[displays] => Array
(
[default] => default
[page] => page
)
)
)
)
[type] => Overridden
[loaded] => 1
[executed] =>
[built] =>
[build_info] => Array
(
)
[attachment_before] =>
[attachment_after] =>
)
Exposed inputs are not available (see views.module line 801 and includes/view.inc line 157 in views-6.x-2.0-rc1) when I call the view like this. The frustrating thing is that the exposed form does get rendered in the page view. :-(
Also, there are no filters in the object (see views.module line 816).
I'm giving up for now. Things get too complicated and I can't seem to find a solution. Ik word er stiepelzot van!!
Grrrr
I've just been struggling with the same problem - but I think I've cracked it!
$view = views_get_view('your_view_name');$view->set_display('default');
$view->init_handlers();
$form_state = array(
'view' => $view,
'display' => $view->display_handler->display,
'method' => 'get',
'rerender' => TRUE,
'no_redirect' => TRUE,
);
$output = drupal_build_form('views_exposed_form', $form_state);
return $output;
Not been tested in anger, but it certainly seems to be working ...
Mike,
Computerminds offer Drupal development, consulting and training
Thanks a lot!!
Now it's working here too!
If you were a girl, I would ... euhm ... nevermind...
Works wonderfully,
Works wonderfully, thanks.
This is also at http://www.computerminds.co.uk/displaying-exposed-filter-form-views-drup...
set_display()
Posted at computerminds but just reposted here just in case someone's browsing.
I get this PHP error when I use the code above:
Fatal error: Call to a member function set_display() on a non-object in drupal\includes\common.inc(1547) : eval()'d code on line 4
What am I doing wrong? Using D6.6.
didn't change the your_view_name
Woops! If you encounter an error like mine, you forgot to change the view. LOL. This might need error checking then to prevent PHP compile errors. ^_^
$view = views_get_view('taxonomy_term');if($view){
$view->set_display('default');
$view->init_handlers();
$form_state = array(
'view' => $view,
'display' => $view->display_handler->display,
'method' => 'get',
'rerender' => TRUE,
'no_redirect' => TRUE,
);
$output = drupal_build_form('views_exposed_form', $form_state);
}else{
$output = ""; // error messages or something...
}
return $output;
Another thing, how do you stop the filters from showing up on the original place?
Not working with view display other than 'default'
Thanks for this code. It works great for the default display of a view but no matter what you put in the $view->set_display(); it still goes and looks up the default display.
Any tips?
Thanks!
_
You don't need to code this-- you can place the exposed filters in a block with the 'Exposed form in block' option in the Basic settings box.
Exposed filter block in panels does not seem to work
I am going to try this piece of code and report back to see if it works.
If I use exposed form block in a panel, it always returns the wrong url. I hope I can set it with this code.
Chris
set exposed filter url and $view->set_display
I would like to pass in the url of the page the view is on.
exposed filters blocks do not work in a panel or a situation where you use node/%/foo as the url.
I am hoping that I could modify the code to ensure
1. that the url passed is the url of the given page
2. set $view->set_display() to take another value other than default
Any ideas?
I'd love to work through this
I'd love to work through this with anyone that's interested in starting a code scrum to figure it out.