Created
October 8, 2016 08:34
-
-
Save henrytran9x/64ae536728a42854f19eac10e66fad11 to your computer and use it in GitHub Desktop.
This patch fix Slider Price in module "better_exposed_filters" drupal 8
This file contains hidden or 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
diff --git a/better_exposed_filters.module b/better_exposed_filters.module | |
index 3d67a71..446d726 100644 | |
--- a/better_exposed_filters.module | |
+++ b/better_exposed_filters.module | |
@@ -246,8 +246,9 @@ function better_exposed_filters_element_validate_slider_animate($element, &$form | |
*/ | |
function better_exposed_filters_element_validate_slider_min_max($element, &$form_state) { | |
$value = $element['#value']; | |
- $slider_min = $form_state['values']['exposed_form_options']['bef'][$element['#bef_filter_id']]['slider_options']['bef_slider_min']; | |
- $slider_max = $form_state['values']['exposed_form_options']['bef'][$element['#bef_filter_id']]['slider_options']['bef_slider_max']; | |
+ | |
+ $slider_min = $form_state->getValue('exposed_form_options')['bef'][$element['#bef_filter_id']]['slider_options']['bef_slider_min']; | |
+ $slider_max = $form_state->getValue('exposed_form_options')['bef'][$element['#bef_filter_id']]['slider_options']['bef_slider_max']; | |
if ($value !== '' && _better_exposed_filters_slider_selected($element, $form_state)) { | |
// Must not have more than 11 decimal places. | |
@@ -271,8 +272,8 @@ function better_exposed_filters_element_validate_slider_step($element, &$form_st | |
$value = $element['#value']; | |
if ($value !== '' && _better_exposed_filters_slider_selected($element, $form_state)) { | |
- $slider_min = $form_state['values']['exposed_form_options']['bef'][$element['#bef_filter_id']]['slider_options']['bef_slider_min']; | |
- $slider_max = $form_state['values']['exposed_form_options']['bef'][$element['#bef_filter_id']]['slider_options']['bef_slider_max']; | |
+ $slider_min = $form_state->getValue('exposed_form_options')['bef'][$element['#bef_filter_id']]['slider_options']['bef_slider_min']; | |
+ $slider_max = $form_state->getValue('exposed_form_options')['bef'][$element['#bef_filter_id']]['slider_options']['bef_slider_max']; | |
// Must be positive. | |
if ($value < 0) { | |
@@ -297,8 +298,8 @@ function better_exposed_filters_element_validate_slider_step($element, &$form_st | |
*/ | |
function _better_exposed_filters_slider_selected($element, &$form_state) { | |
return (isset($element['#bef_filter_id']) && | |
- isset($form_state['values']['exposed_form_options']['bef'][$element['#bef_filter_id']]['bef_format']) && | |
- $form_state['values']['exposed_form_options']['bef'][$element['#bef_filter_id']]['bef_format'] == 'bef_slider'); | |
+ isset($form_state->getValue('exposed_form_options')['bef'][$element['#bef_filter_id']]['bef_format']) && | |
+ $form_state->getValue('exposed_form_options')['bef'][$element['#bef_filter_id']]['bef_format'] == 'bef_slider'); | |
} | |
/** | |
diff --git a/js/bef_sliders.js b/js/bef_sliders.js | |
index 986e664..5a62039 100644 | |
--- a/js/bef_sliders.js | |
+++ b/js/bef_sliders.js | |
@@ -4,12 +4,16 @@ | |
* Adds jQuery Slider functionality to an exposed filter. | |
*/ | |
(function ($) { | |
- Drupal.behaviors.better_exposed_filters_slider = { | |
+ | |
+ Drupal.behaviors.better_exposed_filters = { | |
attach: function(context, settings) { | |
- if (Drupal.settings.better_exposed_filters.slider) { | |
- $.each(Drupal.settings.better_exposed_filters.slider_options, function(i, sliderOptions) { | |
+ if (drupalSettings.better_exposed_filters.slider) { | |
+ | |
+ $.each(drupalSettings.better_exposed_filters.slider_options, function(i, sliderOptions) { | |
+ | |
// Only make one slider per filter. | |
- $("#" + sliderOptions.viewId + " #edit-" + sliderOptions.id + "-wrapper").once('slider-filter', function() { | |
+ | |
+ $("#" + sliderOptions.viewId + " #edit-" + sliderOptions.id + "-wrapper.slider-filter").each(function(e,index) { | |
var $input = $(this).find('input[type=text]'); | |
// This is a "between" or "not between" filter with two values. | |
@@ -30,9 +34,8 @@ | |
// Set the element value in case we are using the slider min & max. | |
$min.val(default_min); | |
$max.val(default_max); | |
- | |
- $min.parents('div.views-widget').after( | |
- $('<div class="bef-slider"></div>').slider({ | |
+ $(this).append( | |
+ $('<div class="bef-slider"></div>').slider({ | |
range: true, | |
min: parseFloat(sliderOptions.min, 10), | |
max: parseFloat(sliderOptions.max, 10), | |
diff --git a/src/Plugin/views/exposed_form/BetterExposedFilters.php b/src/Plugin/views/exposed_form/BetterExposedFilters.php | |
index 7747b6a..a34021a 100644 | |
--- a/src/Plugin/views/exposed_form/BetterExposedFilters.php | |
+++ b/src/Plugin/views/exposed_form/BetterExposedFilters.php | |
@@ -10,7 +10,7 @@ namespace Drupal\better_exposed_filters\Plugin\views\exposed_form; | |
use Drupal\views\Plugin\views\exposed_form\ExposedFormPluginBase; | |
use Drupal\Core\Form\FormStateInterface; | |
use Drupal\Core\Url; | |
- | |
+use Drupal\Component\Utility\Html; | |
/** | |
* Exposed form plugin that provides a basic exposed form. | |
* | |
@@ -285,7 +285,7 @@ Title Desc|Z -> A</pre> Leave the replacement text blank to remove an option alt | |
// The date filter handler extends the numeric filter handler so we have | |
// to exclude it specifically. | |
- if (is_a($filter, 'Drupal\views\Plugin\views\filter\Numeric') && !is_a($filter, 'Drupal\views\Plugin\views\filter\Date')) { | |
+ if (is_a($filter, 'Drupal\views\Plugin\views\filter\NumericFilter') && !is_a($filter, 'Drupal\views\Plugin\views\filter\Date')) { | |
$bef_slider = TRUE; | |
} | |
@@ -780,7 +780,6 @@ Off|No | |
$form[$field_id]['#options'] = $this->cleanOptions($form[$field_id]['#options']); | |
} | |
} | |
- | |
switch ($options['bef_format']) { | |
case 'bef_datepicker': | |
$show_apply = TRUE; | |
@@ -935,7 +934,7 @@ Off|No | |
$bef_add_js = TRUE; | |
$bef_add_css = TRUE; | |
$bef_js['slider'] = TRUE; | |
- | |
+ $price_id = Html::getUniqueId($field_id); | |
// Add js options for the slider for this filter. | |
$bef_js['slider_options'][$field_id] = array( | |
'min' => $options['slider_options']['bef_slider_min'], | |
@@ -943,9 +942,11 @@ Off|No | |
'step' => $options['slider_options']['bef_slider_step'], | |
'animate' => $options['slider_options']['bef_slider_animate'], | |
'orientation' => $options['slider_options']['bef_slider_orientation'], | |
- 'id' => drupal_html_id($field_id), | |
+ 'id' => $price_id, | |
'viewId' => $form['#id'], | |
); | |
+ $form[$field_id]['#type'] = 'fieldset'; | |
+ $form[$field_id]['#attributes'] = array('id' => 'edit-'.$price_id.'-wrapper','class' => array('slider-filter')); | |
break; | |
case 'bef_links': | |
@@ -996,7 +997,7 @@ Off|No | |
'#title' => $form['#info']["filter-$label"]['label'] ?: '', | |
'#description' => $form['#info']["filter-$label"]['description'] ?: '', | |
// Needed to keep styling consistent with other exposed options. | |
- '#attributes' => array('class' => 'form-item'), | |
+ '#attributes' => array('class' => array('form-item')), | |
], | |
]; | |
$form['#info']["filter-$label"]['label'] = ''; | |
@@ -1007,6 +1008,7 @@ Off|No | |
} | |
// Render as either radio buttons or checkboxes. | |
+ | |
if (empty($form[$field_id]['#multiple'])) { | |
// Single-select -- display as radio buttons. | |
$form[$field_id]['#type'] = 'radios'; | |
@@ -1074,19 +1076,21 @@ Off|No | |
if ($bef_add_js) { | |
// Add jQuery UI library code as needed. | |
if ($bef_js['datepicker']) { | |
- drupal_add_library('system', 'ui.datepicker'); | |
+ $form['#attached']['library'][] = 'core/jquery.ui.datepicker'; | |
} | |
if ($bef_js['slider']) { | |
- drupal_add_library('system', 'ui.slider'); | |
+ $form['#attached']['library'][] = 'core/jquery.ui.slider'; | |
} | |
- drupal_add_js(array('better_exposed_filters' => $bef_js), 'setting'); | |
- drupal_add_js(drupal_get_path('module', 'better_exposed_filters') . '/better_exposed_filters.js'); | |
+ $form['#attached']['drupalSettings']['better_exposed_filters'] = $bef_js; | |
+ $form['#attached']['library'][] = 'better_exposed_filters/sliders'; | |
} | |
+ | |
if ($bef_add_css) { | |
- drupal_add_css(drupal_get_path('module', 'better_exposed_filters') . '/better_exposed_filters.css'); | |
+ $form['#attached']['library'][] = 'better_exposed_filters/general'; | |
} | |
+ | |
// Check for secondary elements. | |
if ($allow_secondary && !empty($secondary)) { | |
// Add secondary elements after regular exposed filter elements. | |
@@ -1185,6 +1189,7 @@ Off|No | |
* @return array | |
* The resulting settings array | |
*/ | |
+ | |
protected function bef_set_defaults() { | |
$count = func_num_args(); | |
if (!$count) { | |
@@ -1270,6 +1275,7 @@ Off|No | |
* @return array | |
* Multi-dimensional settings array. | |
*/ | |
+ | |
protected function bef_get_settings() { | |
// General, sort, pagers, etc. | |
$defaults = array( |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment