Пользователю предоставлена возможность менять «на ходу» единицы измерения. Как вариант – керамическая (кафельная) плитка, может быть измерена квадратными метрами, штуками и коробками. В карточке товара админка битрикса дает возможность установить в качестве единицы измерения только одну из величин, остальные величины дописали как свойства элемента инфоблока. Привязку сделали по части символьного кода, название свойства служит заголовком для альтернативной единицы измерения, в значении свойства храниться коэффициент. Код JS битрикса не модифицировался, на кнопки «добавить», «уменьшить» дописали свои JS, которые пересчитывают, значения для [spoiler]соответствующих инпутов альтернативных единиц измерения. В целом стандартный функционал битрикса не модифицирован, пользователь получает дополнительную удобную возможность на front-end видеть нужную инфу. Не реализовано здесь – проверка ввода значения в дополнительные инпуты «руками» на соответствие коэффициентам (у битрикса такая проверка работает).
$('.togle_measure_<?=$item[ID]?>').click(function(){
var inpTog = this.id.replace('a','i');
var arrInp = inpTog.split('_')
$(this).siblings('a').removeClass('active');
$(this).addClass('active');
if (arrInp[1]>0){
$('#'+this.id.replace('a','i')).parent('.count').find('input').attr('style','display:none;');
$('#'+this.id.replace('a','i')).removeAttr('style');
}
else{
$(this).parent().parent().parent().find('input').attr('style','display:none;');
$('#'+$(this).parent().parent().parent().find('input')[0].id).removeAttr('style');
}
});
$('#<?=$itemIds['QUANTITY_UP']?>').click(function(){
var arrInput = $(this).parent().parent('.count').find('input');
var curVal = 0;
var incVal = 0;
for (i=1; i<arrInput.length; i++){
curVal = parseFloat(arrInput[i].value);
incVal = parseFloat($('#'+arrInput[i].id.replace('i','a')).attr('data-measure'));
arrInput[i].value=curVal+incVal;
}
});
$('#<?=$itemIds['QUANTITY_DOWN']?>').click(function(){
var arrInput = $(this).parent().parent().find('input');
var curVal = 0;
var incVal = 0;
for (i=1; i<arrInput.length; i++){
curVal = parseFloat(arrInput[i].value);
incVal = parseFloat($('#'+arrInput[i].id.replace('i','a')).attr('data-measure'));
if (curVal-incVal>0) arrInput[i].value=curVal-incVal;
}
});
В связи с большой популярностью этой заметки мы выпустили модуль для БУС, работает только на стандартных механизмах Битрикса (АСПРО, ДЕЛЮКС, СОТБИТ - не работает) Ссылка на модуль