From b0142a6ca0bb48ae76258a7c2be855af4c848237 Mon Sep 17 00:00:00 2001 From: chichilatte Date: Sat, 19 May 2012 18:34:50 +0100 Subject: [PATCH] Tweaked Better Exposed Filters link-toggling functionality so that the links have "active" and sort-order classes. Also sort-order labels are now non-required. Tested on D6.22, Views 6.x-3.0+67-dev, BEF 6.x-3.x-dev. You'll have to patch BEF with the patch mentioned here: http://drupal.org/node/1240238 comment#3. --- .../better_exposed_filters.theme | 48 ++++++++++++++++++- .../better_exposed_filters_exposed_form_plugin.inc | 4 ++ 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/sites/all/modules/better_exposed_filters/better_exposed_filters.theme b/sites/all/modules/better_exposed_filters/better_exposed_filters.theme index f19bfc7..de5f0f9 100644 --- a/sites/all/modules/better_exposed_filters/better_exposed_filters.theme +++ b/sites/all/modules/better_exposed_filters/better_exposed_filters.theme @@ -320,6 +320,14 @@ function theme_select_as_links($element) { $selected_options[] = $element["#$name"]; } + // Get the selected sort_by string + if ($selected_options[0]) { + $selected_sort_by = explode(' ', $selected_options[0], 2); + if (count($selected_sort_by) == 2) + $selected_sort_by = $selected_sort_by[0]; + } + + $element_index = 0; foreach ($element['#options'] as $option => $elem) { // Check for Taxonomy-based filters if (is_object($elem)) { @@ -342,11 +350,43 @@ function theme_select_as_links($element) { $multiple = !empty($element['#multiple']); $as_toggle_links = isset($element['#settings']['toggle_links']) && ($element['#settings']['toggle_links'] == '1'); - foreach ($element_set as $key => $value) { - // Custom ID for each link based on the 's original ID $id = form_clean_id($element['#id'] . '-' . $key); if (array_search($key, $selected_options) === FALSE) { - $link = l($value, bef_replace_query_string_arg($name, $key, $multiple)); + + $link_options = array(); + if ($as_toggle_links) { + + // Get the classes we'll apply to the link. + $link_classes = array(); + + // Get the sort_by and sort_order strings + $sort_pair = explode(' ', $key, 2); + if (count($sort_pair) == 2) { + $sort_by = $sort_pair[0]; + $sort_order = strtolower($sort_pair[1]); + + // Here we want the sort_order as a classname, e.g. "asc". + if ($sort_order) { + $link_classes[] = $sort_order; + } + + } + // See if the link is the selected sort_by (can be either asc or desc, it doesn't matter). + // If the link is selected, hilight it. Or hilight the default sort (the first one) if none are selected. + if ($selected_sort_by == $sort_by || (!$selected_sort_by && $element_index==0)) { + $link_classes[] = 'active'; + } + + if (count($link_classes) > 0) { + $link_options = array('attributes' => array('class' => implode(' ', $link_classes) ) ); + } + } + + // Create the link + $link = l($value, bef_replace_query_string_arg($name, $key, $multiple), $link_options); $output .= theme('form_element', array('#id' => $id), $link); } else { // If we are showing toggle links, avoid show current selected option. @@ -359,6 +399,8 @@ function theme_select_as_links($element) { $output .= theme('form_element', array('#id' => $id), $value); } } + $element_index++; + } $properties = array( diff --git a/sites/all/modules/better_exposed_filters/better_exposed_filters_exposed_form_plugin.inc b/sites/all/modules/better_exposed_filters/better_exposed_filters_exposed_form_plugin.inc index b75e9ab..15d6827 100644 --- a/sites/all/modules/better_exposed_filters/better_exposed_filters_exposed_form_plugin.inc +++ b/sites/all/modules/better_exposed_filters/better_exposed_filters_exposed_form_plugin.inc @@ -206,6 +206,10 @@ class better_exposed_filters_exposed_form_plugin extends views_plugin_exposed_fo // Add BEF form elements to the exposed form options form $form['bef'] = $bef_options; + + // If the sort filters are to be displayed as toggle-links, sort order labels should not be required. + $form['sort_asc_label']['#required'] = FALSE; + $form['sort_desc_label']['#required'] = FALSE; } /* -- 1.7.8.3