При Выборе Модификации Цена Не Изменяется
#1
Отправлено 14 Май 2013 - 15:43
#2
Отправлено 14 Май 2013 - 16:31
В файле "main.js".
Код:
// Функция собирает свойства в строку, для определения модификации товара function getSlugFromGoodsDataFormModificationsProperties(obj) { var properties = new Array(); var reset_arr = new Array(); $(obj).each(function(i){ if($(this).is(':checked')){ properties[i] = parseInt($(this).val());} }); for(var i in properties) { if(properties[i]) { reset_arr.push(properties[i]); } } return reset_arr.sort(function(a,B){return a - b}).join('_'); } var // Запоминаем поля выбора свойств, для ускорения работы со значениями свойств goodsDataProperties = $('div.goodsDataMainModificationsBlock select[name="form[properties][]"]'), // Запоминаем блоки с информацией по модификациям, для ускорения работы goodsDataModifications = $('div.goodsDataMainModificationsList'); // Обновляет возможность выбора свойств модификации, для отключения возможности выбора по характеристикам модификации которой не существует. function updateVisibility (y) { // Проверяем в каждом соседнем поле выбора модификаций, возможно ли подобрать модификацию для указанных свойств goodsDataProperties.each(function(j){ // Если мы сравниваем значения свойства не с самим собой, а с другим списком значений свойств if( j != y ) { // Проходим по всем значениям текущего свойства модификации товара $(this).find('option').each(function(){ // Записываем временный массив свойств, которые будем использовать для проверки существования модификации var checkProperties = new Array(); $(goodsDataProperties).each(function(i){ checkProperties[i] = parseInt($(this).val()); }); // Пытаемся найти модификацию соответствующую выбранным значениям свойств checkProperties[j] = parseInt($(this).attr('value')); // Собираем хэш определяющий модификацию по свойствам slug = checkProperties.sort(function(a,B){return a - b}).join('_'); // Ищем модификацию по всем выбранным значениям свойств товара. Если модификации нет в возможном выборе, отмечаем потенциальное значение выбора как не доступное для выбора, т.к. такой модификации нет. if(!goodsDataModifications.filter('[rel="'+slug+'"]').length) { $(this).attr('disabled', true); // Если выбрав данное значение свойства товара можно подобрать модификацию, то выделяем вариант выбора как доступный. } else { $(this).attr('disabled', false); } }); } }); } // Обновляем возможность выбора модификации товара по свойствам. Для тех свойств, выбор по которым не возможен, отключаем такую возможность. // Проверяем возможность выбора на всех полях кроме первого, чтобы отключить во всех остальных варианты, которые не возможно выбрать updateVisibility (0); // Проверяем возможность выбора на всех полях кроме второго, чтобы в первом поле так же отключилась возможность выбора не существующих модификаций updateVisibility (1); // Изменение цены товара при изменении у товара свойства для модификации goodsDataProperties.each(function(y){ $(this).change(function(){ var slug = getSlugFromGoodsDataFormModificationsProperties(goodsDataProperties), modificationBlock = goodsDataModifications.filter('[rel="'+slug+'"]'), modificationId = parseInt(modificationBlock.find('[name="id"]').val()), modificationArtNumber = modificationBlock.find('[name="art_number"]').val(), modificationPriceNow = parseFloat(modificationBlock.find('[name="price_now"]').val()), modificationPriceNowFormated = modificationBlock.find('.price_now_formated').html(), modificationPriceOld = parseFloat(modificationBlock.find('[name="price_old"]').val()), modificationPriceOldFormated = modificationBlock.find('.price_old_formated').html(), modificationRestValue = parseFloat(modificationBlock.find('[name="rest_value"]').val()), modificationDescription = modificationBlock.find('.description').html(), modificationMeasureId = parseInt(modificationBlock.find('[name="measure_id"]').val()), modificationMeasureName = modificationBlock.find('[name="measure_name"]').val(), modificationMeasureDesc = modificationBlock.find('[name="measure_desc"]').val(), modificationMeasurePrecision = modificationBlock.find('[name="measure_precision"]').val(), modificationIsHasInCompareList= modificationBlock.find('[name="is_has_in_compare_list"]').val(), goodsModificationId = $('.goodsDataMainModificationId'), goodsPriceNow = $('.goodsDataMainModificationPriceNow'), goodsPriceOld = $('.goodsDataMainModificationPriceOld'), goodsAvailable = $('.goodsDataMainModificationAvailable'), goodsAvailableTrue = goodsAvailable.find('.available-true'), goodsAvailableFalse = goodsAvailable.find('.available-false'), goodsArtNumberBlock = $('.goodsDataMainModificationArtNumber'), goodsArtNumber = goodsArtNumberBlock.find('span'), goodsCompareAddButton = $('.goodsDataCompareButton.add'), goodsCompareDeleteButton = $('.goodsDataCompareButton.delete'), goodsModDescriptionBlock = $('.goodsDataMainModificationsDescriptionBlock'); // Изменяем данные товара для выбранных параметров. Если нашлась выбранная модификация if(modificationBlock.length) { // Цена товара goodsPriceNow.html(modificationPriceNowFormated); // Старая цена товара if(modificationPriceOld>modificationPriceNow) { goodsPriceOld.html(modificationPriceOldFormated); } else { goodsPriceOld.html(''); } // Есть ли товар есть в наличии if(modificationRestValue>0) { goodsAvailableTrue.show(); goodsAvailableFalse.hide(); // Если товара нет в наличии } else { goodsAvailableTrue.hide(); goodsAvailableFalse.show(); } // Если товар есть в списке сравнения if(modificationIsHasInCompareList>0) { goodsCompareAddButton.hide(); goodsCompareDeleteButton.show(); // Если товара нет в списке сравнения } else { goodsCompareAddButton.show(); goodsCompareDeleteButton.hide(); } // Покажем артикул модификации товара, если он указан if(modificationArtNumber.length>0) { goodsArtNumberBlock.show(); goodsArtNumber.html(modificationArtNumber); // Скроем артикул модификации товара, если он не указан } else { goodsArtNumberBlock.hide(); goodsArtNumber.html(''); } // Описание модификации товара. Покажем если оно есть, спрячем если его у модификации нет if(modificationDescription.length > 0) { goodsModDescriptionBlock.show().html('<div>' + modificationDescription + '</div>'); } else { goodsModDescriptionBlock.hide().html(); } // Идентификатор товарной модификации goodsModificationId.val(modificationId); } else { // Отправим запись об ошибке на сервер sendError('no modification by slug '+slug); alert('К сожалению сейчас не получается подобрать модификацию соответствующую выбранным параметрам.'); } // Обновляем возможность выбора другой модификации для текущих значений свойств модификации товара. updateVisibility(y); }); });Заменить:
// Функция собирает свойства в строку, для определения модификации товара function getSlugFromGoodsDataFormModificationsProperties(obj) { var properties = new Array(); $(obj).each(function(i){ properties[i] = parseInt($(this).val()); }); return properties.sort(function(a,B){return a - b}).join('_'); } var // Запоминаем поля выбора свойств, для ускорения работы со значениями свойств goodsDataProperties = $('div.goodsDataMainModificationsBlock select[name="form[properties][]"]'), // Запоминаем блоки с информацией по модификациям, для ускорения работы goodsDataModifications = $('div.goodsDataMainModificationsList'); // Обновляет возможность выбора свойств модификации, для отключения возможности выбора по характеристикам модификации которой не существует. function updateVisibility (y) { // Проверяем в каждом соседнем поле выбора модификаций, возможно ли подобрать модификацию для указанных свойств goodsDataProperties.each(function(j){ // Если мы сравниваем значения свойства не с самим собой, а с другим списком значений свойств if( j != y ) { // Проходим по всем значениям текущего свойства модификации товара $(this).find('option').each(function(){ // Записываем временный массив свойств, которые будем использовать для проверки существования модификации var checkProperties = new Array(); $(goodsDataProperties).each(function(i){ checkProperties[i] = parseInt($(this).val()); }); // Пытаемся найти модификацию соответствующую выбранным значениям свойств checkProperties[j] = parseInt($(this).attr('value')); // Собираем хэш определяющий модификацию по свойствам slug = checkProperties.sort(function(a,B){return a - b}).join('_'); // Ищем модификацию по всем выбранным значениям свойств товара. Если модификации нет в возможном выборе, отмечаем потенциальное значение выбора как не доступное для выбора, т.к. такой модификации нет. if(!goodsDataModifications.filter('[rel="'+slug+'"]').length) { $(this).attr('disabled', true); // Если выбрав данное значение свойства товара можно подобрать модификацию, то выделяем вариант выбора как доступный. } else { $(this).attr('disabled', false); } }); } }); } // Обновляем возможность выбора модификации товара по свойствам. Для тех свойств, выбор по которым не возможен, отключаем такую возможность. // Проверяем возможность выбора на всех полях кроме первого, чтобы отключить во всех остальных варианты, которые не возможно выбрать updateVisibility (0); // Проверяем возможность выбора на всех полях кроме второго, чтобы в первом поле так же отключилась возможность выбора не существующих модификаций updateVisibility (1); // Изменение цены товара при изменении у товара свойства для модификации goodsDataProperties.each(function(y){ $(this).change(function(){ var slug = getSlugFromGoodsDataFormModificationsProperties(goodsDataProperties), modificationBlock = goodsDataModifications.filter('[rel="'+slug+'"]'), modificationId = parseInt(modificationBlock.find('[name="id"]').val()), modificationArtNumber = modificationBlock.find('[name="art_number"]').val(), modificationPriceNow = parseFloat(modificationBlock.find('[name="price_now"]').val()), modificationPriceNowFormated = modificationBlock.find('.price_now_formated').html(), modificationPriceOld = parseFloat(modificationBlock.find('[name="price_old"]').val()), modificationPriceOldFormated = modificationBlock.find('.price_old_formated').html(), modificationRestValue = parseFloat(modificationBlock.find('[name="rest_value"]').val()), modificationDescription = modificationBlock.find('.description').html(), modificationMeasureId = parseInt(modificationBlock.find('[name="measure_id"]').val()), modificationMeasureName = modificationBlock.find('[name="measure_name"]').val(), modificationMeasureDesc = modificationBlock.find('[name="measure_desc"]').val(), modificationMeasurePrecision = modificationBlock.find('[name="measure_precision"]').val(), modificationIsHasInCompareList= modificationBlock.find('[name="is_has_in_compare_list"]').val(), goodsModificationId = $('.goodsDataMainModificationId'), goodsPriceNow = $('.goodsDataMainModificationPriceNow'), goodsPriceOld = $('.goodsDataMainModificationPriceOld'), goodsAvailable = $('.goodsDataMainModificationAvailable'), goodsAvailableTrue = goodsAvailable.find('.available-true'), goodsAvailableFalse = goodsAvailable.find('.available-false'), goodsArtNumberBlock = $('.goodsDataMainModificationArtNumber'), goodsArtNumber = goodsArtNumberBlock.find('span'), goodsCompareAddButton = $('.goodsDataCompareButton.add'), goodsCompareDeleteButton = $('.goodsDataCompareButton.delete'), goodsModDescriptionBlock = $('.goodsDataMainModificationsDescriptionBlock'); // Изменяем данные товара для выбранных параметров. Если нашлась выбранная модификация if(modificationBlock.length) { // Цена товара goodsPriceNow.html(modificationPriceNowFormated); // Старая цена товара if(modificationPriceOld>modificationPriceNow) { goodsPriceOld.html(modificationPriceOldFormated); } else { goodsPriceOld.html(''); } // Есть ли товар есть в наличии if(modificationRestValue>0) { goodsAvailableTrue.show(); goodsAvailableFalse.hide(); // Если товара нет в наличии } else { goodsAvailableTrue.hide(); goodsAvailableFalse.show(); } // Если товар есть в списке сравнения if(modificationIsHasInCompareList>0) { goodsCompareAddButton.hide(); goodsCompareDeleteButton.show(); // Если товара нет в списке сравнения } else { goodsCompareAddButton.show(); goodsCompareDeleteButton.hide(); } // Покажем артикул модификации товара, если он указан if(modificationArtNumber.length>0) { goodsArtNumberBlock.show(); goodsArtNumber.html(modificationArtNumber); // Скроем артикул модификации товара, если он не указан } else { goodsArtNumberBlock.hide(); goodsArtNumber.html(''); } // Описание модификации товара. Покажем если оно есть, спрячем если его у модификации нет if(modificationDescription.length > 0) { goodsModDescriptionBlock.show().html('<div>' + modificationDescription + '</div>'); } else { goodsModDescriptionBlock.hide().html(); } // Идентификатор товарной модификации goodsModificationId.val(modificationId); } else { // Отправим запись об ошибке на сервер sendError('no modification by slug '+slug); alert('К сожалению сейчас не получается подобрать модификацию соответствующую выбранным параметрам.'); } // Обновляем возможность выбора другой модификации для текущих значений свойств модификации товара. updateVisibility(y); }); });
#3
Отправлено 14 Май 2013 - 18:32
Koderhan (14 Май 2013 - 16:31) писал:
В файле "main.js".
Код:
// Функция собирает свойства в строку, для определения модификации товара function getSlugFromGoodsDataFormModificationsProperties(obj) { var properties = new Array(); var reset_arr = new Array(); $(obj).each(function(i){ if($(this).is(':checked')){ properties[i] = parseInt($(this).val());} }); for(var i in properties) { if(properties[i]) { reset_arr.push(properties[i]); } } return reset_arr.sort(function(a,B){return a - b}).join('_'); } var // Запоминаем поля выбора свойств, для ускорения работы со значениями свойств goodsDataProperties = $('div.goodsDataMainModificationsBlock select[name="form[properties][]"]'), // Запоминаем блоки с информацией по модификациям, для ускорения работы goodsDataModifications = $('div.goodsDataMainModificationsList'); // Обновляет возможность выбора свойств модификации, для отключения возможности выбора по характеристикам модификации которой не существует. function updateVisibility (y) { // Проверяем в каждом соседнем поле выбора модификаций, возможно ли подобрать модификацию для указанных свойств goodsDataProperties.each(function(j){ // Если мы сравниваем значения свойства не с самим собой, а с другим списком значений свойств if( j != y ) { // Проходим по всем значениям текущего свойства модификации товара $(this).find('option').each(function(){ // Записываем временный массив свойств, которые будем использовать для проверки существования модификации var checkProperties = new Array(); $(goodsDataProperties).each(function(i){ checkProperties[i] = parseInt($(this).val()); }); // Пытаемся найти модификацию соответствующую выбранным значениям свойств checkProperties[j] = parseInt($(this).attr('value')); // Собираем хэш определяющий модификацию по свойствам slug = checkProperties.sort(function(a,B){return a - b}).join('_'); // Ищем модификацию по всем выбранным значениям свойств товара. Если модификации нет в возможном выборе, отмечаем потенциальное значение выбора как не доступное для выбора, т.к. такой модификации нет. if(!goodsDataModifications.filter('[rel="'+slug+'"]').length) { $(this).attr('disabled', true); // Если выбрав данное значение свойства товара можно подобрать модификацию, то выделяем вариант выбора как доступный. } else { $(this).attr('disabled', false); } }); } }); } // Обновляем возможность выбора модификации товара по свойствам. Для тех свойств, выбор по которым не возможен, отключаем такую возможность. // Проверяем возможность выбора на всех полях кроме первого, чтобы отключить во всех остальных варианты, которые не возможно выбрать updateVisibility (0); // Проверяем возможность выбора на всех полях кроме второго, чтобы в первом поле так же отключилась возможность выбора не существующих модификаций updateVisibility (1); // Изменение цены товара при изменении у товара свойства для модификации goodsDataProperties.each(function(y){ $(this).change(function(){ var slug = getSlugFromGoodsDataFormModificationsProperties(goodsDataProperties), modificationBlock = goodsDataModifications.filter('[rel="'+slug+'"]'), modificationId = parseInt(modificationBlock.find('[name="id"]').val()), modificationArtNumber = modificationBlock.find('[name="art_number"]').val(), modificationPriceNow = parseFloat(modificationBlock.find('[name="price_now"]').val()), modificationPriceNowFormated = modificationBlock.find('.price_now_formated').html(), modificationPriceOld = parseFloat(modificationBlock.find('[name="price_old"]').val()), modificationPriceOldFormated = modificationBlock.find('.price_old_formated').html(), modificationRestValue = parseFloat(modificationBlock.find('[name="rest_value"]').val()), modificationDescription = modificationBlock.find('.description').html(), modificationMeasureId = parseInt(modificationBlock.find('[name="measure_id"]').val()), modificationMeasureName = modificationBlock.find('[name="measure_name"]').val(), modificationMeasureDesc = modificationBlock.find('[name="measure_desc"]').val(), modificationMeasurePrecision = modificationBlock.find('[name="measure_precision"]').val(), modificationIsHasInCompareList= modificationBlock.find('[name="is_has_in_compare_list"]').val(), goodsModificationId = $('.goodsDataMainModificationId'), goodsPriceNow = $('.goodsDataMainModificationPriceNow'), goodsPriceOld = $('.goodsDataMainModificationPriceOld'), goodsAvailable = $('.goodsDataMainModificationAvailable'), goodsAvailableTrue = goodsAvailable.find('.available-true'), goodsAvailableFalse = goodsAvailable.find('.available-false'), goodsArtNumberBlock = $('.goodsDataMainModificationArtNumber'), goodsArtNumber = goodsArtNumberBlock.find('span'), goodsCompareAddButton = $('.goodsDataCompareButton.add'), goodsCompareDeleteButton = $('.goodsDataCompareButton.delete'), goodsModDescriptionBlock = $('.goodsDataMainModificationsDescriptionBlock'); // Изменяем данные товара для выбранных параметров. Если нашлась выбранная модификация if(modificationBlock.length) { // Цена товара goodsPriceNow.html(modificationPriceNowFormated); // Старая цена товара if(modificationPriceOld>modificationPriceNow) { goodsPriceOld.html(modificationPriceOldFormated); } else { goodsPriceOld.html(''); } // Есть ли товар есть в наличии if(modificationRestValue>0) { goodsAvailableTrue.show(); goodsAvailableFalse.hide(); // Если товара нет в наличии } else { goodsAvailableTrue.hide(); goodsAvailableFalse.show(); } // Если товар есть в списке сравнения if(modificationIsHasInCompareList>0) { goodsCompareAddButton.hide(); goodsCompareDeleteButton.show(); // Если товара нет в списке сравнения } else { goodsCompareAddButton.show(); goodsCompareDeleteButton.hide(); } // Покажем артикул модификации товара, если он указан if(modificationArtNumber.length>0) { goodsArtNumberBlock.show(); goodsArtNumber.html(modificationArtNumber); // Скроем артикул модификации товара, если он не указан } else { goodsArtNumberBlock.hide(); goodsArtNumber.html(''); } // Описание модификации товара. Покажем если оно есть, спрячем если его у модификации нет if(modificationDescription.length > 0) { goodsModDescriptionBlock.show().html('<div>' + modificationDescription + '</div>'); } else { goodsModDescriptionBlock.hide().html(); } // Идентификатор товарной модификации goodsModificationId.val(modificationId); } else { // Отправим запись об ошибке на сервер sendError('no modification by slug '+slug); alert('К сожалению сейчас не получается подобрать модификацию соответствующую выбранным параметрам.'); } // Обновляем возможность выбора другой модификации для текущих значений свойств модификации товара. updateVisibility(y); }); });Заменить:
// Функция собирает свойства в строку, для определения модификации товара function getSlugFromGoodsDataFormModificationsProperties(obj) { var properties = new Array(); $(obj).each(function(i){ properties[i] = parseInt($(this).val()); }); return properties.sort(function(a,B){return a - b}).join('_'); } var // Запоминаем поля выбора свойств, для ускорения работы со значениями свойств goodsDataProperties = $('div.goodsDataMainModificationsBlock select[name="form[properties][]"]'), // Запоминаем блоки с информацией по модификациям, для ускорения работы goodsDataModifications = $('div.goodsDataMainModificationsList'); // Обновляет возможность выбора свойств модификации, для отключения возможности выбора по характеристикам модификации которой не существует. function updateVisibility (y) { // Проверяем в каждом соседнем поле выбора модификаций, возможно ли подобрать модификацию для указанных свойств goodsDataProperties.each(function(j){ // Если мы сравниваем значения свойства не с самим собой, а с другим списком значений свойств if( j != y ) { // Проходим по всем значениям текущего свойства модификации товара $(this).find('option').each(function(){ // Записываем временный массив свойств, которые будем использовать для проверки существования модификации var checkProperties = new Array(); $(goodsDataProperties).each(function(i){ checkProperties[i] = parseInt($(this).val()); }); // Пытаемся найти модификацию соответствующую выбранным значениям свойств checkProperties[j] = parseInt($(this).attr('value')); // Собираем хэш определяющий модификацию по свойствам slug = checkProperties.sort(function(a,B){return a - b}).join('_'); // Ищем модификацию по всем выбранным значениям свойств товара. Если модификации нет в возможном выборе, отмечаем потенциальное значение выбора как не доступное для выбора, т.к. такой модификации нет. if(!goodsDataModifications.filter('[rel="'+slug+'"]').length) { $(this).attr('disabled', true); // Если выбрав данное значение свойства товара можно подобрать модификацию, то выделяем вариант выбора как доступный. } else { $(this).attr('disabled', false); } }); } }); } // Обновляем возможность выбора модификации товара по свойствам. Для тех свойств, выбор по которым не возможен, отключаем такую возможность. // Проверяем возможность выбора на всех полях кроме первого, чтобы отключить во всех остальных варианты, которые не возможно выбрать updateVisibility (0); // Проверяем возможность выбора на всех полях кроме второго, чтобы в первом поле так же отключилась возможность выбора не существующих модификаций updateVisibility (1); // Изменение цены товара при изменении у товара свойства для модификации goodsDataProperties.each(function(y){ $(this).change(function(){ var slug = getSlugFromGoodsDataFormModificationsProperties(goodsDataProperties), modificationBlock = goodsDataModifications.filter('[rel="'+slug+'"]'), modificationId = parseInt(modificationBlock.find('[name="id"]').val()), modificationArtNumber = modificationBlock.find('[name="art_number"]').val(), modificationPriceNow = parseFloat(modificationBlock.find('[name="price_now"]').val()), modificationPriceNowFormated = modificationBlock.find('.price_now_formated').html(), modificationPriceOld = parseFloat(modificationBlock.find('[name="price_old"]').val()), modificationPriceOldFormated = modificationBlock.find('.price_old_formated').html(), modificationRestValue = parseFloat(modificationBlock.find('[name="rest_value"]').val()), modificationDescription = modificationBlock.find('.description').html(), modificationMeasureId = parseInt(modificationBlock.find('[name="measure_id"]').val()), modificationMeasureName = modificationBlock.find('[name="measure_name"]').val(), modificationMeasureDesc = modificationBlock.find('[name="measure_desc"]').val(), modificationMeasurePrecision = modificationBlock.find('[name="measure_precision"]').val(), modificationIsHasInCompareList= modificationBlock.find('[name="is_has_in_compare_list"]').val(), goodsModificationId = $('.goodsDataMainModificationId'), goodsPriceNow = $('.goodsDataMainModificationPriceNow'), goodsPriceOld = $('.goodsDataMainModificationPriceOld'), goodsAvailable = $('.goodsDataMainModificationAvailable'), goodsAvailableTrue = goodsAvailable.find('.available-true'), goodsAvailableFalse = goodsAvailable.find('.available-false'), goodsArtNumberBlock = $('.goodsDataMainModificationArtNumber'), goodsArtNumber = goodsArtNumberBlock.find('span'), goodsCompareAddButton = $('.goodsDataCompareButton.add'), goodsCompareDeleteButton = $('.goodsDataCompareButton.delete'), goodsModDescriptionBlock = $('.goodsDataMainModificationsDescriptionBlock'); // Изменяем данные товара для выбранных параметров. Если нашлась выбранная модификация if(modificationBlock.length) { // Цена товара goodsPriceNow.html(modificationPriceNowFormated); // Старая цена товара if(modificationPriceOld>modificationPriceNow) { goodsPriceOld.html(modificationPriceOldFormated); } else { goodsPriceOld.html(''); } // Есть ли товар есть в наличии if(modificationRestValue>0) { goodsAvailableTrue.show(); goodsAvailableFalse.hide(); // Если товара нет в наличии } else { goodsAvailableTrue.hide(); goodsAvailableFalse.show(); } // Если товар есть в списке сравнения if(modificationIsHasInCompareList>0) { goodsCompareAddButton.hide(); goodsCompareDeleteButton.show(); // Если товара нет в списке сравнения } else { goodsCompareAddButton.show(); goodsCompareDeleteButton.hide(); } // Покажем артикул модификации товара, если он указан if(modificationArtNumber.length>0) { goodsArtNumberBlock.show(); goodsArtNumber.html(modificationArtNumber); // Скроем артикул модификации товара, если он не указан } else { goodsArtNumberBlock.hide(); goodsArtNumber.html(''); } // Описание модификации товара. Покажем если оно есть, спрячем если его у модификации нет if(modificationDescription.length > 0) { goodsModDescriptionBlock.show().html('<div>' + modificationDescription + '</div>'); } else { goodsModDescriptionBlock.hide().html(); } // Идентификатор товарной модификации goodsModificationId.val(modificationId); } else { // Отправим запись об ошибке на сервер sendError('no modification by slug '+slug); alert('К сожалению сейчас не получается подобрать модификацию соответствующую выбранным параметрам.'); } // Обновляем возможность выбора другой модификации для текущих значений свойств модификации товара. updateVisibility(y); }); });
#4
Отправлено 15 Май 2013 - 01:34
и внесите необходимые изменения в файл main.js
#5
Отправлено 15 Май 2013 - 07:28
Сake (15 Май 2013 - 01:34) писал:
и внесите необходимые изменения в файл main.js
#6
Отправлено 15 Май 2013 - 08:28
hamer750 (15 Май 2013 - 07:28) писал:
<!-- Блок выбора модификаций для текущей товарной позиции --> <div class="span12"> <div class="goodsDataMainModificationsBlock product-options" {% IF GOODS_NO_CHOISE_IN_PROPERTIES_FOR_MODIFICATIONS %}style="display:none;"{% ENDIF %}> {% FOR goods_modifications_properties %} <div class="goodsDataMainModificationsBlockProperty"> <!-- Выдаем списки со свойствами для модификаций, чтобы определить какую модификацию товара хочет пользователь --> {% FOR values %} <!-- Если это первый элемент в списке --> {% IF goods_modifications_properties.values.first %} <strong>{goods_modifications_properties.NAME}:</strong><br /> <select name="form[properties][]"> {% ENDIF %} <option value="{goods_modifications_properties.values.ID}" {% IF goods_modifications_properties.values.SELECTED %}selected="selected"{% ENDIF %}>{goods_modifications_properties.values.NAME}</option> <!-- Если это последний элемент в списке --> {% IF goods_modifications_properties.values.last %} </select> {% ENDIF %} {% ENDFOR %} </div> {goods_modifications_properties.index | is_divided("2","</tr><tr>","")} {% ENDFOR %} <!-- Данные по модификациям для текущей товарной позиции --> {% FOR goods_modifications %} <div class="goodsDataMainModificationsList" rel="{goods_modifications.PROPERTIES_SLUG}"> <input type="hidden" name="id" value="{goods_modifications.ID}" /> <input type="hidden" name="art_number" value="{goods_modifications.ART_NUMBER}" /> <input type="hidden" name="price_now" value="{goods_modifications.PRICE_NOW}" /> <div class="price_now_formated" style="display:none">{goods_modifications.PRICE_NOW | money_format}</div> <input type="hidden" name="price_old" value="{% IF goods_modifications.PRICE_NOW_WITHOUT_DISCOUNT>goods_modifications.PRICE_NOW %}{goods_modifications.PRICE_NOW_WITHOUT_DISCOUNT}{% ELSE %}{goods_modifications.PRICE_OLD}{% ENDIF %}" /> <div class="price_old_formated" style="display:none">{% IF goods_modifications.PRICE_NOW_WITHOUT_DISCOUNT>goods_modifications.PRICE_NOW %}{goods_modifications.PRICE_NOW_WITHOUT_DISCOUNT | money_format}{% ELSE %}{goods_modifications.PRICE_OLD | money_format}{% ENDIF %}</div> <input type="hidden" name="rest_value" value="{goods_modifications.REST_VALUE}" /> <input type="hidden" name="measure_id" value="{goods_modifications.MEASURE_ID}" /> <input type="hidden" name="measure_name" value="{goods_modifications.MEASURE_NAME}" /> <input type="hidden" name="measure_desc" value="{goods_modifications.MEASURE_DESC}" /> <input type="hidden" name="measure_precision" value="{goods_modifications.MEASURE_PRECISION}" /> <input type="hidden" name="is_has_in_compare_list" value="{goods_modifications.IS_HAS_IN_COMPARE_LIST}" /> <div class="description" style="display:none">{goods_modifications.DESCRIPTION}</div> </div> {% ENDFOR %} </div> </div> <!-- /Блок выбора модификаций для текущей товарной позиции -->
#7
Отправлено 15 Май 2013 - 09:33
Koderhan (15 Май 2013 - 08:28) писал:
<!-- Блок выбора модификаций для текущей товарной позиции --> <div class="span12"> <div class="goodsDataMainModificationsBlock product-options" {% IF GOODS_NO_CHOISE_IN_PROPERTIES_FOR_MODIFICATIONS %}style="display:none;"{% ENDIF %}> {% FOR goods_modifications_properties %} <div class="goodsDataMainModificationsBlockProperty"> <!-- Выдаем списки со свойствами для модификаций, чтобы определить какую модификацию товара хочет пользователь --> {% FOR values %} <!-- Если это первый элемент в списке --> {% IF goods_modifications_properties.values.first %} <strong>{goods_modifications_properties.NAME}:</strong><br /> <select name="form[properties][]"> {% ENDIF %} <option value="{goods_modifications_properties.values.ID}" {% IF goods_modifications_properties.values.SELECTED %}selected="selected"{% ENDIF %}>{goods_modifications_properties.values.NAME}</option> <!-- Если это последний элемент в списке --> {% IF goods_modifications_properties.values.last %} </select> {% ENDIF %} {% ENDFOR %} </div> {goods_modifications_properties.index | is_divided("2","</tr><tr>","")} {% ENDFOR %} <!-- Данные по модификациям для текущей товарной позиции --> {% FOR goods_modifications %} <div class="goodsDataMainModificationsList" rel="{goods_modifications.PROPERTIES_SLUG}"> <input type="hidden" name="id" value="{goods_modifications.ID}" /> <input type="hidden" name="art_number" value="{goods_modifications.ART_NUMBER}" /> <input type="hidden" name="price_now" value="{goods_modifications.PRICE_NOW}" /> <div class="price_now_formated" style="display:none">{goods_modifications.PRICE_NOW | money_format}</div> <input type="hidden" name="price_old" value="{% IF goods_modifications.PRICE_NOW_WITHOUT_DISCOUNT>goods_modifications.PRICE_NOW %}{goods_modifications.PRICE_NOW_WITHOUT_DISCOUNT}{% ELSE %}{goods_modifications.PRICE_OLD}{% ENDIF %}" /> <div class="price_old_formated" style="display:none">{% IF goods_modifications.PRICE_NOW_WITHOUT_DISCOUNT>goods_modifications.PRICE_NOW %}{goods_modifications.PRICE_NOW_WITHOUT_DISCOUNT | money_format}{% ELSE %}{goods_modifications.PRICE_OLD | money_format}{% ENDIF %}</div> <input type="hidden" name="rest_value" value="{goods_modifications.REST_VALUE}" /> <input type="hidden" name="measure_id" value="{goods_modifications.MEASURE_ID}" /> <input type="hidden" name="measure_name" value="{goods_modifications.MEASURE_NAME}" /> <input type="hidden" name="measure_desc" value="{goods_modifications.MEASURE_DESC}" /> <input type="hidden" name="measure_precision" value="{goods_modifications.MEASURE_PRECISION}" /> <input type="hidden" name="is_has_in_compare_list" value="{goods_modifications.IS_HAS_IN_COMPARE_LIST}" /> <div class="description" style="display:none">{goods_modifications.DESCRIPTION}</div> </div> {% ENDFOR %} </div> </div> <!-- /Блок выбора модификаций для текущей товарной позиции -->
#10
Отправлено 15 Май 2013 - 14:44
hamer750 (15 Май 2013 - 09:50) писал:
Если вы пользовались инструкцией - http://forum.storela...ации/#entry4330
то я у вас не нашла изменений в шаблоне Товар, то есть не нашла кода:
<!-- Если это первый элемент в списке --> {% IF goods_modifications_properties.values.first %} <strong>{goods_modifications_properties.NAME}:</strong><br /> {% ENDIF %} <input type="radio" name="form[properties][]" value="{goods_modifications_properties.values.ID}" {% IF goods_modifications_properties.values.SELECTED %}checked="checked"{% ENDIF %} /> {goods_modifications_properties.values.NAME} <br />
#11
Отправлено 15 Май 2013 - 19:33
miyako (15 Май 2013 - 14:44) писал:
то я у вас не нашла изменений в шаблоне Товар, то есть не нашла кода:
<!-- Если это первый элемент в списке --> {% IF goods_modifications_properties.values.first %} <strong>{goods_modifications_properties.NAME}:</strong><br /> {% ENDIF %} <input type="radio" name="form[properties][]" value="{goods_modifications_properties.values.ID}" {% IF goods_modifications_properties.values.SELECTED %}checked="checked"{% ENDIF %} /> {goods_modifications_properties.values.NAME} <br />
#12
Отправлено 16 Май 2013 - 04:45
goodsDataProperties = $('div.goodsDataMainModificationsBlock select[name="form[properties][]"]'),
т.е через select
Вам необходимо в main.js найти
// Функция собирает свойства в строку, для определения модификации товара function getSlugFromGoodsDataFormModificationsProperties(obj) { var properties = new Array(); var reset_arr = new Array(); $(obj).each(function(i){ if($(this).is(':checked')){ properties[i] = parseInt($(this).val());} }); for(var i in properties) { if(properties[i]) { reset_arr.push(properties[i]); } } return reset_arr.sort(function(a,B){return a - b}).join('_'); } var // Запоминаем поля выбора свойств, для ускорения работы со значениями свойств goodsDataProperties = $('div.goodsDataMainModificationsBlock select[name="form[properties][]"]'), // Запоминаем блоки с информацией по модификациям, для ускорения работы goodsDataModifications = $('div.goodsDataMainModificationsList'); // Обновляет возможность выбора свойств модификации, для отключения возможности выбора по характеристикам модификации которой не существует. function updateVisibility (y) { // Проверяем в каждом соседнем поле выбора модификаций, возможно ли подобрать модификацию для указанных свойств goodsDataProperties.each(function(j){ // Если мы сравниваем значения свойства не с самим собой, а с другим списком значений свойств if( j != y ) { // Проходим по всем значениям текущего свойства модификации товара $(this).find('option').each(function(){ // Записываем временный массив свойств, которые будем использовать для проверки существования модификации var checkProperties = new Array(); $(goodsDataProperties).each(function(i){ checkProperties[i] = parseInt($(this).val()); }); // Пытаемся найти модификацию соответствующую выбранным значениям свойств checkProperties[j] = parseInt($(this).attr('value')); // Собираем хэш определяющий модификацию по свойствам slug = checkProperties.sort(function(a,B){return a - b}).join('_'); // Ищем модификацию по всем выбранным значениям свойств товара. Если модификации нет в возможном выборе, отмечаем потенциальное значение выбора как не доступное для выбора, т.к. такой модификации нет. if(!goodsDataModifications.filter('[rel="'+slug+'"]').length) { $(this).attr('disabled', true); // Если выбрав данное значение свойства товара можно подобрать модификацию, то выделяем вариант выбора как доступный. } else { $(this).attr('disabled', false); } }); } }); } // Обновляем возможность выбора модификации товара по свойствам. Для тех свойств, выбор по которым не возможен, отключаем такую возможность. // Проверяем возможность выбора на всех полях кроме первого, чтобы отключить во всех остальных варианты, которые не возможно выбрать updateVisibility (0); // Проверяем возможность выбора на всех полях кроме второго, чтобы в первом поле так же отключилась возможность выбора не существующих модификаций updateVisibility (1); // Изменение цены товара при изменении у товара свойства для модификации goodsDataProperties.each(function(y){ $(this).change(function(){ var slug = getSlugFromGoodsDataFormModificationsProperties(goodsDataProperties),
и заменить на
// Функция собирает свойства в строку, для определения модификации товара function getSlugFromGoodsDataFormModificationsProperties(obj) { var properties = new Array(); var reset_arr = new Array(); $(obj).find('input[type="radio"]').each(function(i){ if($(this).is(':checked')){ properties[i] = parseInt($(this).val());} }); for(var i in properties) { if(properties[i]) { reset_arr.push(properties[i]); } } return reset_arr.sort(function(a,g){return a - g}).join('_'); } var // Запоминаем поля выбора свойств, для ускорения работы со значениями свойств goodsDataProperties = $('.goodsDataMainModificationsBlock .goodsDataMainModificationsRadio'), // Запоминаем блоки с информацией по модификациям, для ускорения работы goodsDataModifications = $('div.goodsDataMainModificationsList'); // Обновляет возможность выбора свойств модификации, для отключения возможности выбора по характеристикам модификации которой не существует. function updateVisibility (y) { // Проверяем в каждом соседнем поле выбора модификаций, возможно ли подобрать модификацию для указанных свойств goodsDataProperties.each(function(j){ // Если мы сравниваем значения свойства не с самим собой, а с другим списком значений свойств if( j != y ) { // Проходим по всем значениям текущего свойства модификации товара $(this).find('input[type="radio"]').each(function(){ // Записываем временный массив свойств, которые будем использовать для проверки существования модификации //var checkProperties = new Array(); /*$(goodsDataProperties).each(function(i){ if($(this).is(':checked')) checkProperties[i] = parseInt($(this).val()); });*/ // Пытаемся найти модификацию соответствующую выбранным значениям свойств //checkProperties[j] = parseInt($(this).attr('value')); // Собираем хэш определяющий модификацию по свойствам //slug = checkProperties.sort(function(a,B){return a - b}).join('_'); slug = getSlugFromGoodsDataFormModificationsProperties(goodsDataProperties); // Ищем модификацию по всем выбранным значениям свойств товара. Если модификации нет в возможном выборе, отмечаем потенциальное значение выбора как не доступное для выбора, т.к. такой модификации нет. if(!goodsDataModifications.filter('[rel="'+slug+'"]').length) { $(this).attr('disabled', 'disabled'); // Если выбрав данное значение свойства товара можно подобрать модификацию, то выделяем вариант выбора как доступный. } else { $(this).removeAttr('disabled'); } }); } }); } // Обновляем возможность выбора модификации товара по свойствам. Для тех свойств, выбор по которым не возможен, отключаем такую возможность. updateVisibility (0); // Изменение цены товара при изменении у товара свойства для модификации goodsDataProperties.each(function(y){ $(this).find('input[type="radio"]').click(function(){ var slug = getSlugFromGoodsDataFormModificationsProperties(goodsDataProperties),
#14
Отправлено 21 Май 2013 - 05:04
goodsDataProperties = $('.goodsDataMainModificationsBlock .goodsDataMainModificationsRadio'),
и замените на
goodsDataProperties = $('.goodsDataMainModificationsBlock .goodsDataMainModificationsBlockProperty'),
После очистите кэш в вашем браузере.
#15
Отправлено 21 Май 2013 - 06:39
Сake (21 Май 2013 - 05:04) писал:
goodsDataProperties = $('.goodsDataMainModificationsBlock .goodsDataMainModificationsRadio'),
и замените на
goodsDataProperties = $('.goodsDataMainModificationsBlock .goodsDataMainModificationsBlockProperty'),
После очистите кэш в вашем браузере.
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных