Posted by mikeker on November 2, 2009 at 7:56pm
Jump to:
| Project: | Views Filter Pack |
| Version: | 6.x-1.x-dev |
| Component: | Code |
| Category: | bug report |
| Priority: | normal |
| Assigned: | peter-boeren |
| Status: | active |
Issue Summary
For example, using two exposed Taxonomy filters for two different vocabularies. Settings the first filter to "" and the second to a specific value results in the this query without Filter Pack enabled:
SELECT ....
WHERE (node.status <> 0) AND (node.type in ('directory')) AND (term_node.tid = 23)With Filter Pack enabled, the following SQL is generated:
SELECT ....
WHERE (node.status <> 0) AND (node.type in ('directory')) AND (term_node.tid = 0)Below is an export of the view in question, if that helps. Note that it relies on a node type of "directory" and a few Taxonomy vocabularies. But it should give you a basic idea of what I was doing if my explanation above was lacking.
$view = new view;
$view->name = 'tester';
$view->description = 'test';
$view->tag = '';
$view->view_php = '';
$view->base_table = 'node';
$view->is_cacheable = FALSE;
$view->api_version = 2;
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
$handler = $view->new_display('default', 'Defaults', 'default');
$handler->override_option('fields', array(
'field_dir_firstname_value' => array(
'label' => 'First name',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'link_class' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'strip_tags' => 0,
'html' => 0,
),
'link_to_node' => 0,
'label_type' => 'widget',
'format' => 'default',
'multiple' => array(
'group' => TRUE,
'multiple_number' => '',
'multiple_from' => '',
'multiple_reversed' => FALSE,
),
'exclude' => 0,
'id' => 'field_dir_firstname_value',
'table' => 'node_data_field_dir_firstname',
'field' => 'field_dir_firstname_value',
'relationship' => 'none',
),
'field_dir_lastname_value' => array(
'label' => 'Last name',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'link_class' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'strip_tags' => 0,
'html' => 0,
),
'link_to_node' => 0,
'label_type' => 'widget',
'format' => 'default',
'multiple' => array(
'group' => TRUE,
'multiple_number' => '',
'multiple_from' => '',
'multiple_reversed' => FALSE,
),
'exclude' => 0,
'id' => 'field_dir_lastname_value',
'table' => 'node_data_field_dir_lastname',
'field' => 'field_dir_lastname_value',
'relationship' => 'none',
),
));
$handler->override_option('filters', array(
'status' => array(
'operator' => '=',
'value' => '1',
'group' => '0',
'exposed' => FALSE,
'expose' => array(
'operator' => FALSE,
'label' => '',
),
'id' => 'status',
'table' => 'node',
'field' => 'status',
'relationship' => 'none',
),
'type' => array(
'operator' => 'in',
'value' => array(
'directory' => 'directory',
),
'group' => '0',
'exposed' => FALSE,
'expose' => array(
'operator' => FALSE,
'label' => '',
),
'id' => 'type',
'table' => 'node',
'field' => 'type',
'relationship' => 'none',
),
'tid' => array(
'operator' => 'or',
'value' => array(),
'group' => '0',
'exposed' => TRUE,
'expose' => array(
'use_operator' => 0,
'operator' => 'tid_op',
'identifier' => 'tid',
'label' => 'Research Group',
'optional' => 1,
'single' => 1,
'remember' => 0,
'reduce' => 0,
),
'type' => 'select',
'limit' => TRUE,
'vid' => '1',
'id' => 'tid',
'table' => 'term_node',
'field' => 'tid',
'hierarchy' => 0,
'relationship' => 'none',
'reduce_duplicates' => 0,
'views_filter_pack_element_type' => '',
),
'tid_1' => array(
'operator' => 'or',
'value' => array(),
'group' => '0',
'exposed' => TRUE,
'expose' => array(
'use_operator' => 0,
'operator' => 'tid_1_op',
'identifier' => 'tid_1',
'label' => 'Employment Type',
'optional' => 1,
'single' => 1,
'remember' => 0,
'reduce' => 0,
),
'type' => 'select',
'limit' => TRUE,
'vid' => '5',
'id' => 'tid_1',
'table' => 'term_node',
'field' => 'tid',
'hierarchy' => 0,
'relationship' => 'none',
'reduce_duplicates' => 0,
'views_filter_pack_element_type' => NULL,
),
));
$handler->override_option('access', array(
'type' => 'none',
));
$handler->override_option('cache', array(
'type' => 'none',
));
$handler->override_option('style_plugin', 'list');
$handler->override_option('style_options', array(
'grouping' => '',
'type' => 'ul',
));
$handler->override_option('row_options', array(
'inline' => array(
'field_dir_firstname_value' => 'field_dir_firstname_value',
'field_dir_lastname_value' => 'field_dir_lastname_value',
),
'separator' => ' - ',
));
Comments
#1
Thanks Mikeker for your feedback.
I noticed that if there a two of more exposed filters of the same type such as vocabularies than my script doesn't kick in. In your example the first vocabulary will be joined as term_node and the second as term_node2
SELECT node.nid AS nid, node.language AS node_language, node.title AS node_title, term_data.name AS term_data_name, term_data.vid AS term_data_vid, term_data.tid AS term_data_tid FROM node node INNER JOIN term_node term_node ON node.vid = term_node.vid LEFT JOIN term_node term_node2 ON node.vid = term_node2.vid AND term_node2.tid != 0 LEFT JOIN term_data term_data ON term_node.tid = term_data.tid WHERE (node.status <> 0) AND (node.type in ('page')) AND (term_node2.tid = 4) LIMIT 0, 10example of a function that uses 'table' and 'field' combination:
// Determine the exposed key for a field. This needed to determine the post// values.
$exposed_key = _views_filter_pack_retrieve_exposed_key($view, $display, $table, $field);
My script replaces parts of the query in hook_views_query alter by searching for the name of the table and the view. So I was able to reproduce the bug. The next step will be to solve it.
#2