@zzakirow

Как модифицировать умный фильтр?

Хочется в умном фильтре в ползунке показать круглые цифры (0, 100, 200, 300, 400).
Битрикс берет их из базы данных. Там записаны разные цифры.
Соответственно и в ползунке они высчитываются сами.

В шаблоне я нашел где поменять можно эти цифры:
$value1 = number_format($arItem["VALUES"]["MIN"]["VALUE"], $precision, ".", "");
$value2 = number_format($arItem["VALUES"]["MIN"]["VALUE"] + $step, $precision, ".", "");
$value3 = number_format($arItem["VALUES"]["MIN"]["VALUE"] + $step * 2, $precision, ".", "");
$value4 = number_format($arItem["VALUES"]["MIN"]["VALUE"] + $step * 3, $precision, ".", "");
$value5 = number_format($arItem["VALUES"]["MAX"]["VALUE"], $precision, ".", "");


Но, когда я сдвигаю ползунок, то вижу что он продолжает высчитываться по старой схеме. Получая данные с сервера.
Скорее всего это все делается в шаблонном script.js.

Как можно решить эту задачу не правя script.js?
  • Вопрос задан
  • 830 просмотров
Решения вопроса 1
@PetrPo
Вот читаю, вроде и вопрос нормальный и движешься ты в правильном направлении, и понимаешь, что надо script.js править. А в конце, посоветуйте как поправить javascript не правя javascript. Да, никак!

У тебя javascriptофобия? )

1. Открываешь template.php, ищешь где там вызывается new BX.Iblock.SmartFilter, над этим вызовом параметры
$arJsParams = array(
	"leftSlider" => 'left_slider_'.$key,
	// .............

	// добавляешь свой параметр, например step (значение = шаг)
	"step" => 100
);


2. Открываешь script.js ищешь BX.Iblock.SmartFilter = (function() там внутри
var SmartFilter = function(arParams)
{
	if (typeof arParams === 'object')
	{
		this.leftSlider = BX(arParams.leftSlider);
		// ...........
		
		// где-нибудь здесь добавляешь
		this.step = arParams.step || 1;
	}
};


3. Ищешь функцию
SmartFilter.prototype.recountMinPrice = function()
{
	var newMinPrice = (this.priceDiff*this.leftPercent)/100;
	newMinPrice = (this.minPrice + newMinPrice).toFixed(this.precision);
	
	// добавляешь эту строку
	newMinPrice = Math.round(newMinPrice/this.step) * this.step;

	if (newMinPrice != this.minPrice)
		this.minInput.value = newMinPrice;
	else
		this.minInput.value = "";
	/** @global JCSmartFilter smartFilter */
	smartFilter.keyup(this.minInput);
};


4. Ищешь функцию
SmartFilter.prototype.recountMaxPrice = function()
{
	var newMaxPrice = (this.priceDiff*this.rightPercent)/100;
	newMaxPrice = (this.maxPrice - newMaxPrice).toFixed(this.precision);
	
	// добавляешь эту строку
	newMaxPrice = Math.round(newMaxPrice/this.step) * this.step;

	if (newMaxPrice != this.maxPrice)
		this.maxInput.value = newMaxPrice;
	else
		this.maxInput.value = "";
	/** @global JCSmartFilter smartFilter */
	smartFilter.keyup(this.maxInput);
};


P.S. в template.php есть два вызова new BX.Iblock.SmartFilter - первый = цены, второй = остальные ползунки
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы