Skip to content

Instantly share code, notes, and snippets.

@henrytran9x
Created October 8, 2016 08:34
Show Gist options
  • Save henrytran9x/64ae536728a42854f19eac10e66fad11 to your computer and use it in GitHub Desktop.
Save henrytran9x/64ae536728a42854f19eac10e66fad11 to your computer and use it in GitHub Desktop.
This patch fix Slider Price in module "better_exposed_filters" drupal 8
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