D7 jquery slider нужна помощь

Главные вкладки

Аватар пользователя makkon makkon 8 июня 2012 в 17:01

Ковыряю статью http://xandeadx.ru/blog/drupal/532#comment-6048 и http://artreaktor.com/slider-tracker-slaider-dlya-views-exposed-filter-s... для друпала 7-го.
по статье xandeadx все норм вышло. далее хочется сделать синхронизацию min max значений слайдера. для этого прибегнул ко второй ссылке.

во вьюхе в хедере (пока хочу хотябы в случай с без атрибутов в ссылке рассмотреть)

<?php

if (empty($_GET["price"]))

  print (
"EMPTY");
  
$view views_get_current_view();
  foreach (
$view->result as $result)
  {
     
$prices[] = Ceil(($result->field_commerce_price[0]['raw']['amount'])/100);
  }

$maxprice max($prices);
$minprice min($prices);

echo 

'<script>
(function ($) {

$(function()
{

document.getElementById("pmax").value='

.$maxprice.';
document.getElementById("pmin").value='
.$minprice.';
document.getElementById("edit-price-min").value='
.$minprice.';
document.getElementById("edit-price-max").value='
.$maxprice.';

});
}(jQuery));

</script>'

;

}

?>

скрипт js по первой ссылке:

(function($) {
  Drupal.behaviors.slider_example = {
    attach: function(context, settings) {
      $('.slider-widget-wrapper').each(function() {
        var $sliderWrapper = $(this);
        $('<div class="slider-widget" />').appendTo($sliderWrapper).slider({
          range: true,
                                  min: 0,
                                  step: 1,
                                  max: 100,
          values: [$sliderWrapper.find('input:first').val(), $sliderWrapper.find('input:last').val()],
          slide: function(event, ui) {
            $sliderWrapper.find('input:first').val(ui.values[0]);
            $sliderWrapper.find('input:last').val(ui.values[1]);
          }
        });
      });
    }
  };
})(jQuery);

views-exposed-form--product_catalog_list--page.tpl.php добавил:

Как можно передать в скрипт min и max значения, чтобы они обновлялись при каждом запросе?

Комментарии

Аватар пользователя Chalk Chalk 19 июня 2012 в 19:42

Сам столкнулся с подобной проблемой. Решается значит вот как:
Делаем всё, как написано тут http://xandeadx.ru/blog/drupal/532.
Далее сравнимаем с моими файлами и подгоняем под свое. Замечу, что модуль писался для Commerce.

<?php
function YOUR_MODULE_form_views_exposed_form_alter(&$form$form_state) {
  if (
$form['#id'] == 'views-exposed-form-watch-catalog-page') {
    
dsm($form_state);
    
$form['#attached']['library'][] = array('system''ui.slider');
    
$form['#attached']['js'][] = drupal_get_path('module''maxtrust') . '/slider-init.js';
    
$form['#attached']['css'][] = drupal_get_path('module''maxtrust') . '/slider-style.css';
    
$form['commerce_price_amount']['#prefix'] = '<div class="slider-widget-wrapper">';
    
$form['commerce_price_amount']['#suffix'] = '</div>';
    
$min db_query('SELECT MIN(cup.commerce_unit_price_amount) FROM {field_data_commerce_unit_price} cup WHERE cup.commerce_unit_price_currency_code = :currency', array(':currency' => 'RUB'))->fetchField();
    
$max db_query('SELECT MAX(cup.commerce_unit_price_amount) FROM {field_data_commerce_unit_price} cup WHERE cup.commerce_unit_price_currency_code = :currency', array(':currency' => 'RUB'))->fetchField();
    
drupal_add_js(array('min_price' => $min'max_price' => $max), 'setting');
    if(isset(
$form_state['input']['commerce_price_amount'])){
      
drupal_add_js(array('left_price' => $form_state['input']['commerce_price_amount']['min'], 'right_price' => $form_state['input']['commerce_price_amount']['max']), 'setting');
    }
  }
}
?>
(function($) {
  Drupal.behaviors.maxtrust = {
    attach: function(context, settings) {
      $('.slider-widget-wrapper').each(function() {
        var $sliderWrapper = $(this);
        var $left = Drupal.settings.left_price ? Drupal.settings.left_price : Drupal.settings.min_price;
        var $right = Drupal.settings.right_price ? Drupal.settings.right_price : Drupal.settings.max_price;
        $sliderWrapper.find('input:first').val($left);
        $sliderWrapper.find('input:last').val($right);
        $('<div class="slider-widget" />').appendTo($sliderWrapper).slider({
          range: true,
          min: parseInt(Drupal.settings.min_price),
          max: parseInt(Drupal.settings.max_price),
          step: 500,
          values: [$left, $right],
          slide: function(event, ui) {
            $sliderWrapper.find('input:first').val(ui.values[0]);
            $sliderWrapper.find('input:last').val(ui.values[1]);
          }
        });
      });
    }
  };
})(jQuery);

ЗЫ На грамотность не претендую, главное - пока работает без багов Smile

Аватар пользователя makkon makkon 20 июня 2012 в 10:18

спасибо, уже реализовал примерно аналогичным способом - сиквел запросами к бд. только оформлял не в виде модуля, а пихал прямо во вьюху
у вас покрасивше выглядит конечно, но как я понимаю высчитывает мин и макс цены для всех товаров сразу а не непосредственно в необходимом разделе=)