Created
March 23, 2018 06:51
-
-
Save gormus/83246e8cd892d70c6e2e3a2f900e3af2 to your computer and use it in GitHub Desktop.
Transform select-type exposed filters into jump menus.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// Rename this file to `CUSTOMMODULE.module` | |
/** | |
* Implements hook_form_FORM_ID_alter(). | |
*/ | |
function CUSTOMMODULE_form_views_exposed_form_alter(&$form, &$form_state, $form_id) { | |
// Replace `Size` filter. | |
CUSTOMMODULE_jumpmenu($form, 'field_size_tid'); | |
// Replace `Color` filter. | |
CUSTOMMODULE_jumpmenu($form, 'field_color_tid'); | |
// Non-existing filter. | |
CUSTOMMODULE_jumpmenu($form, 'field_doesnt_exist'); | |
} | |
/** | |
* Transform select filters into a simple jump menu. | |
* | |
* @param $form | |
* Nested array of form elements that comprise the form. | |
* @param $field_name | |
* String representing the name of the field to be replaced. | |
*/ | |
function CUSTOMMODULE_jumpmenu(&$form, $field_name) { | |
if ( | |
isset($form[$field_name]) | |
&& ($form[$field_name]['#type'] === 'select') | |
&& !empty($form[$field_name]['#options']) | |
) { | |
$options = &$form[$field_name]['#options']; | |
foreach ($options as $tid => $value) { | |
if (is_int($tid)) { | |
$path = drupal_get_path_alias('taxonomy/term/' . $tid); | |
$options[url($path)] = $value; | |
unset($options[$tid]); | |
} | |
} | |
$form[$field_name]['#attributes']['onChange'] = 'javascript:if (this.value !== "All") { location.href = this.value; return false; }'; | |
return $form; | |
} | |
return []; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// Rename this file to `CUSTOMMODULE.views_default.inc` | |
/** | |
* Implements hook_views_default_views(). | |
*/ | |
function CUSTOMMODULE_views_default_views() { | |
$views = array(); | |
$view = new view(); | |
$view->name = 'example_view'; | |
$view->description = ''; | |
$view->tag = 'default'; | |
$view->base_table = 'node'; | |
$view->human_name = 'Example view'; | |
$view->core = 7; | |
$view->api_version = '3.0'; | |
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */ | |
/* Display: Master */ | |
$handler = $view->new_display('default', 'Master', 'default'); | |
$handler->display->display_options['title'] = 'Example view'; | |
$handler->display->display_options['use_more_always'] = FALSE; | |
$handler->display->display_options['access']['type'] = 'perm'; | |
$handler->display->display_options['cache']['type'] = 'none'; | |
$handler->display->display_options['query']['type'] = 'views_query'; | |
$handler->display->display_options['exposed_form']['type'] = 'basic'; | |
$handler->display->display_options['pager']['type'] = 'full'; | |
$handler->display->display_options['pager']['options']['items_per_page'] = '50'; | |
$handler->display->display_options['style_plugin'] = 'table'; | |
$handler->display->display_options['style_options']['columns'] = array( | |
'title' => 'title', | |
'field_color' => 'field_color', | |
'field_size' => 'field_size', | |
); | |
$handler->display->display_options['style_options']['default'] = '-1'; | |
$handler->display->display_options['style_options']['info'] = array( | |
'title' => array( | |
'sortable' => 0, | |
'default_sort_order' => 'asc', | |
'align' => '', | |
'separator' => '', | |
'empty_column' => 0, | |
), | |
'field_color' => array( | |
'sortable' => 0, | |
'default_sort_order' => 'asc', | |
'align' => '', | |
'separator' => '', | |
'empty_column' => 0, | |
), | |
'field_size' => array( | |
'sortable' => 0, | |
'default_sort_order' => 'asc', | |
'align' => '', | |
'separator' => '', | |
'empty_column' => 0, | |
), | |
); | |
/* Field: Content: Title */ | |
$handler->display->display_options['fields']['title']['id'] = 'title'; | |
$handler->display->display_options['fields']['title']['table'] = 'node'; | |
$handler->display->display_options['fields']['title']['field'] = 'title'; | |
$handler->display->display_options['fields']['title']['alter']['word_boundary'] = FALSE; | |
$handler->display->display_options['fields']['title']['alter']['ellipsis'] = FALSE; | |
/* Field: Content: Color */ | |
$handler->display->display_options['fields']['field_color']['id'] = 'field_color'; | |
$handler->display->display_options['fields']['field_color']['table'] = 'field_data_field_color'; | |
$handler->display->display_options['fields']['field_color']['field'] = 'field_color'; | |
/* Field: Content: Size */ | |
$handler->display->display_options['fields']['field_size']['id'] = 'field_size'; | |
$handler->display->display_options['fields']['field_size']['table'] = 'field_data_field_size'; | |
$handler->display->display_options['fields']['field_size']['field'] = 'field_size'; | |
/* Sort criterion: Content: Title */ | |
$handler->display->display_options['sorts']['title']['id'] = 'title'; | |
$handler->display->display_options['sorts']['title']['table'] = 'node'; | |
$handler->display->display_options['sorts']['title']['field'] = 'title'; | |
/* Filter criterion: Content: Published */ | |
$handler->display->display_options['filters']['status']['id'] = 'status'; | |
$handler->display->display_options['filters']['status']['table'] = 'node'; | |
$handler->display->display_options['filters']['status']['field'] = 'status'; | |
$handler->display->display_options['filters']['status']['value'] = 1; | |
$handler->display->display_options['filters']['status']['group'] = 1; | |
$handler->display->display_options['filters']['status']['expose']['operator'] = FALSE; | |
/* Filter criterion: Content: Type */ | |
$handler->display->display_options['filters']['type']['id'] = 'type'; | |
$handler->display->display_options['filters']['type']['table'] = 'node'; | |
$handler->display->display_options['filters']['type']['field'] = 'type'; | |
$handler->display->display_options['filters']['type']['value'] = array( | |
'tshirt' => 'tshirt', | |
); | |
/* Filter criterion: Content: Size (field_size) */ | |
$handler->display->display_options['filters']['field_size_tid']['id'] = 'field_size_tid'; | |
$handler->display->display_options['filters']['field_size_tid']['table'] = 'field_data_field_size'; | |
$handler->display->display_options['filters']['field_size_tid']['field'] = 'field_size_tid'; | |
$handler->display->display_options['filters']['field_size_tid']['exposed'] = TRUE; | |
$handler->display->display_options['filters']['field_size_tid']['expose']['operator_id'] = 'field_size_tid_op'; | |
$handler->display->display_options['filters']['field_size_tid']['expose']['label'] = 'Size'; | |
$handler->display->display_options['filters']['field_size_tid']['expose']['operator'] = 'field_size_tid_op'; | |
$handler->display->display_options['filters']['field_size_tid']['expose']['identifier'] = 'field_size_tid'; | |
$handler->display->display_options['filters']['field_size_tid']['expose']['remember_roles'] = array( | |
2 => '2', | |
1 => 0, | |
3 => 0, | |
); | |
$handler->display->display_options['filters']['field_size_tid']['type'] = 'select'; | |
$handler->display->display_options['filters']['field_size_tid']['vocabulary'] = 'size'; | |
/* Filter criterion: Content: Color (field_color) */ | |
$handler->display->display_options['filters']['field_color_tid']['id'] = 'field_color_tid'; | |
$handler->display->display_options['filters']['field_color_tid']['table'] = 'field_data_field_color'; | |
$handler->display->display_options['filters']['field_color_tid']['field'] = 'field_color_tid'; | |
$handler->display->display_options['filters']['field_color_tid']['exposed'] = TRUE; | |
$handler->display->display_options['filters']['field_color_tid']['expose']['operator_id'] = 'field_color_tid_op'; | |
$handler->display->display_options['filters']['field_color_tid']['expose']['label'] = 'Color'; | |
$handler->display->display_options['filters']['field_color_tid']['expose']['operator'] = 'field_color_tid_op'; | |
$handler->display->display_options['filters']['field_color_tid']['expose']['identifier'] = 'field_color_tid'; | |
$handler->display->display_options['filters']['field_color_tid']['expose']['remember_roles'] = array( | |
2 => '2', | |
1 => 0, | |
3 => 0, | |
); | |
$handler->display->display_options['filters']['field_color_tid']['type'] = 'select'; | |
$handler->display->display_options['filters']['field_color_tid']['vocabulary'] = 'color'; | |
/* Display: Page */ | |
$handler = $view->new_display('page', 'Page', 'page'); | |
$handler->display->display_options['path'] = 'example-view'; | |
$handler->display->display_options['menu']['type'] = 'normal'; | |
$handler->display->display_options['menu']['title'] = 'Example view'; | |
$handler->display->display_options['menu']['name'] = 'main-menu'; | |
$views['example_view'] = $view; | |
return $views; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment