Ковыряю статью 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 по первой ссылке:
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 значения, чтобы они обновлялись при каждом запросе?
Комментарии
Сам столкнулся с подобной проблемой. Решается значит вот как:
Делаем всё, как написано тут 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');
}
}
}
?>
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);
ЗЫ На грамотность не претендую, главное - пока работает без багов
спасибо, уже реализовал примерно аналогичным способом - сиквел запросами к бд. только оформлял не в виде модуля, а пихал прямо во вьюху
у вас покрасивше выглядит конечно, но как я понимаю высчитывает мин и макс цены для всех товаров сразу а не непосредственно в необходимом разделе=)