На Странице Товара Не Видно Модификации
#1
Отправлено 08 Февраль 2016 - 00:18
#2
Отправлено 08 Февраль 2016 - 10:22
Sgray (08 Февраль 2016 - 00:18) писал:
Здравствуйте, перед изменениями создайте бекап шаблона. Далее в шаблоне Товар найдите код:
{% FOR goods_modifications_properties %} <div class="goodsDataMainModificationsBlockProperty"> <!-- Выдаем списки со свойствами для модификаций, чтобы определить какую модификацию товара хочет пользователь --> {% FOR values %} <!-- Если это первый элемент в списке --> {% IF goods_modifications_properties.values.first %} <strong>{goods_modifications_properties.NAME}:</strong><br /> <span class="select-box"> <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> </span> {% ENDIF %} {% ENDFOR %} </div> <div class="clear"></div> {goods_modifications_properties.index | is_divided("2","","")} {% ENDFOR %}
и замените на код:
{% FOR goods_modifications_properties %} <td class="goodsDataMainModificationsBlockProperty"> <!-- Выдаем списки со свойствами для модификаций, чтобы определить какую модификацию товара хочет пользователь --> {% FOR values %} <!-- Если это первый элемент в списке --> {% IF goods_modifications_properties.values.first %} <span class="goodsDataMainModificationsRadio"> <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 /> {% IF goods_modifications_properties.values.last %} </span> {% ENDIF %} {% ENDFOR %} </td> {goods_modifications_properties.index | is_divided("2","</tr><tr>","")} {% ENDFOR %}
далее в main.js найдите код:
// Функция собирает свойства в строку, для определения модификации товара 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 = $('form.goodsDataForm 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); //var goodsDataProperties = $('.goodsDataForm [name="form[properties][]"]'); // Изменение цены товара при изменении у товара свойства для модификации goodsDataProperties.each(function(){ $(this).change(function(){ var slug = getSlugFromGoodsDataFormModificationsProperties(goodsDataProperties), modificationBlock = $('.goodsDataMainModificationsList[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('К сожалению сейчас не получается подобрать модификацию соответствующую выбранным параметрам.'); } }); });
и замените на код:
// Функция собирает свойства в строку, для определения модификации товара 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,j){return a - j}).join('_'); } var // Запоминаем поля выбора свойств, для ускорения работы со значениями свойств goodsDataProperties = $('form.goodsDataForm [name="form[properties][]"]'), // Запоминаем блоки с информацией по модификациям, для ускорения работы goodsDataModifications = $('div.goodsDataMainModificationsList'); // Обновляет возможность выбора свойств модификации, для отключения возможности выбора по характеристикам модификации которой не существует. function updateVisibility (y) { // Проверяем в каждом соседнем поле выбора модификаций, возможно ли подобрать модификацию для указанных свойств goodsDataProperties.each(function(j){ // Если мы сравниваем значения свойства не с самим собой, а с другим списком значений свойств if( j != y ) { // Проходим по всем значениям текущего свойства модификации товара // Записываем временный массив свойств, которые будем использовать для проверки существования модификации var checkProperties = new Array(); $(goodsDataProperties).each(function(i){ checkProperties[i] = parseInt($(this).val()); }); // Пытаемся найти модификацию соответствующую выбранным значениям свойств checkProperties[j] = parseInt($(this).attr('value')); // Собираем хэш определяющий модификацию по свойствам slug = checkProperties.sort(function(a,j){return a - j}).join('_'); // Ищем модификацию по всем выбранным значениям свойств товара. Если модификации нет в возможном выборе, отмечаем потенциальное значение выбора как не доступное для выбора, т.к. такой модификации нет. if(!goodsDataModifications.filter('[rel="'+slug+'"]').length) { //$(this).attr('disabled', true); // Если выбрав данное значение свойства товара можно подобрать модификацию, то выделяем вариант выбора как доступный. } else { $(this).attr('disabled', false); } } }); } // Обновляем возможность выбора модификации товара по свойствам. Для тех свойств, выбор по которым не возможен, отключаем такую возможность. // Проверяем возможность выбора на всех полях кроме первого, чтобы отключить во всех остальных варианты, которые не возможно выбрать updateVisibility (0); // Проверяем возможность выбора на всех полях кроме второго, чтобы в первом поле так же отключилась возможность выбора не существующих модификаций updateVisibility (1); //var goodsDataProperties = $('.goodsDataForm [name="form[properties][]"]'); // Изменение цены товара при изменении у товара свойства для модификации goodsDataProperties.each(function(){ $(this).click(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('К сожалению сейчас не получается подобрать модификацию соответствующую выбранным параметрам.'); } }); });
#3
Отправлено 08 Февраль 2016 - 20:21
Юля123 (08 Февраль 2016 - 10:22) писал:
{% FOR goods_modifications_properties %} <div class="goodsDataMainModificationsBlockProperty"> <!-- Выдаем списки со свойствами для модификаций, чтобы определить какую модификацию товара хочет пользователь --> {% FOR values %} <!-- Если это первый элемент в списке --> {% IF goods_modifications_properties.values.first %} <strong>{goods_modifications_properties.NAME}:</strong><br /> <span class="select-box"> <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> </span> {% ENDIF %} {% ENDFOR %} </div> <div class="clear"></div> {goods_modifications_properties.index | is_divided("2","","")} {% ENDFOR %}
и замените на код:
{% FOR goods_modifications_properties %} <td class="goodsDataMainModificationsBlockProperty"> <!-- Выдаем списки со свойствами для модификаций, чтобы определить какую модификацию товара хочет пользователь --> {% FOR values %} <!-- Если это первый элемент в списке --> {% IF goods_modifications_properties.values.first %} <span class="goodsDataMainModificationsRadio"> <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 /> {% IF goods_modifications_properties.values.last %} </span> {% ENDIF %} {% ENDFOR %} </td> {goods_modifications_properties.index | is_divided("2","</tr><tr>","")} {% ENDFOR %}
далее в main.js найдите код:
// Функция собирает свойства в строку, для определения модификации товара 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 = $('form.goodsDataForm 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); //var goodsDataProperties = $('.goodsDataForm [name="form[properties][]"]'); // Изменение цены товара при изменении у товара свойства для модификации goodsDataProperties.each(function(){ $(this).change(function(){ var slug = getSlugFromGoodsDataFormModificationsProperties(goodsDataProperties), modificationBlock = $('.goodsDataMainModificationsList[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('К сожалению сейчас не получается подобрать модификацию соответствующую выбранным параметрам.'); } }); });
и замените на код:
// Функция собирает свойства в строку, для определения модификации товара 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,j){return a - j}).join('_'); } var // Запоминаем поля выбора свойств, для ускорения работы со значениями свойств goodsDataProperties = $('form.goodsDataForm [name="form[properties][]"]'), // Запоминаем блоки с информацией по модификациям, для ускорения работы goodsDataModifications = $('div.goodsDataMainModificationsList'); // Обновляет возможность выбора свойств модификации, для отключения возможности выбора по характеристикам модификации которой не существует. function updateVisibility (y) { // Проверяем в каждом соседнем поле выбора модификаций, возможно ли подобрать модификацию для указанных свойств goodsDataProperties.each(function(j){ // Если мы сравниваем значения свойства не с самим собой, а с другим списком значений свойств if( j != y ) { // Проходим по всем значениям текущего свойства модификации товара // Записываем временный массив свойств, которые будем использовать для проверки существования модификации var checkProperties = new Array(); $(goodsDataProperties).each(function(i){ checkProperties[i] = parseInt($(this).val()); }); // Пытаемся найти модификацию соответствующую выбранным значениям свойств checkProperties[j] = parseInt($(this).attr('value')); // Собираем хэш определяющий модификацию по свойствам slug = checkProperties.sort(function(a,j){return a - j}).join('_'); // Ищем модификацию по всем выбранным значениям свойств товара. Если модификации нет в возможном выборе, отмечаем потенциальное значение выбора как не доступное для выбора, т.к. такой модификации нет. if(!goodsDataModifications.filter('[rel="'+slug+'"]').length) { //$(this).attr('disabled', true); // Если выбрав данное значение свойства товара можно подобрать модификацию, то выделяем вариант выбора как доступный. } else { $(this).attr('disabled', false); } } }); } // Обновляем возможность выбора модификации товара по свойствам. Для тех свойств, выбор по которым не возможен, отключаем такую возможность. // Проверяем возможность выбора на всех полях кроме первого, чтобы отключить во всех остальных варианты, которые не возможно выбрать updateVisibility (0); // Проверяем возможность выбора на всех полях кроме второго, чтобы в первом поле так же отключилась возможность выбора не существующих модификаций updateVisibility (1); //var goodsDataProperties = $('.goodsDataForm [name="form[properties][]"]'); // Изменение цены товара при изменении у товара свойства для модификации goodsDataProperties.each(function(){ $(this).click(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('К сожалению сейчас не получается подобрать модификацию соответствующую выбранным параметрам.'); } }); });
Не вышло, только коряво все стало.
#4
Отправлено 09 Февраль 2016 - 09:20
#5
Отправлено 09 Февраль 2016 - 12:54
Юля123 (09 Февраль 2016 - 09:20) писал:
Разместить модификацию(-ии) между артикулом и ценой товара, и чтобы в других разрешениях все не разъехалось.
#6
Отправлено 09 Февраль 2016 - 15:08
Sgray (09 Февраль 2016 - 12:54) писал:
<div class="goodsDataMainModificationsBlock description" {% 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 /> <span class="select-box"> <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> </span> {% ENDIF %} {% ENDFOR %} </div> <div class="clear"></div> {goods_modifications_properties.index | is_divided("2","","")} {% 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 class="clear"></div> <!-- Блок описания модификации --> <div class="goodsDataMainModificationsDescriptionBlock" {% IFNOT GOODS_MOD_DESCRIPTION %}style="display:none;"{% ENDIF %}> {GOODS_MOD_DESCRIPTION} </div> <div class="clear"></div> </div>и переместите после строк
<!-- Блок информации по акции действующей на товар, если таковая есть --> {% IF GOODS_MOD_MAX_DISCOUNT_ID %} <div class="goodsDataMainDiscountBlock description" itemprop="option" content="{GOODS_MOD_MAX_DISCOUNT_EXPIRED_AT | date("Y-m-d")}"> <!-- Акция на товар --> <img src="{ASSETS_IMAGES_PATH}discont.png?design=movement" class="goods-image-icon" /> <strong>Товар участвует в акции «{GOODS_MOD_MAX_DISCOUNT_CAMPAIGN_NAME}».</strong><br /> По {GOODS_MOD_MAX_DISCOUNT_EXPIRED_AT | date} <span style="color: #ff0000;font-weight: bold;">скидка</span> составляет <span style="color: #ff0000;font-weight: bold;">{GOODS_MOD_MAX_DISCOUNT}%</span> </div> {% ENDIF %}
далее найдите
{% IF goods_modifications_properties.values.first %} <strong>{goods_modifications_properties.NAME}:</strong><br />замените на
{% IF goods_modifications_properties.values.first %} <strong>{goods_modifications_properties.NAME}:</strong>
в конец style.css добавьте
.goodsDataMainModificationsBlockProperty strong { margin: 0 16px 0 0; }
#7
Отправлено 09 Февраль 2016 - 21:08
Ирина345 (09 Февраль 2016 - 15:08) писал:
<div class="goodsDataMainModificationsBlock description" {% 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 /> <span class="select-box"> <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> </span> {% ENDIF %} {% ENDFOR %} </div> <div class="clear"></div> {goods_modifications_properties.index | is_divided("2","","")} {% 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 class="clear"></div> <!-- Блок описания модификации --> <div class="goodsDataMainModificationsDescriptionBlock" {% IFNOT GOODS_MOD_DESCRIPTION %}style="display:none;"{% ENDIF %}> {GOODS_MOD_DESCRIPTION} </div> <div class="clear"></div> </div>и переместите после строк
<!-- Блок информации по акции действующей на товар, если таковая есть --> {% IF GOODS_MOD_MAX_DISCOUNT_ID %} <div class="goodsDataMainDiscountBlock description" itemprop="option" content="{GOODS_MOD_MAX_DISCOUNT_EXPIRED_AT | date("Y-m-d")}"> <!-- Акция на товар --> <img src="{ASSETS_IMAGES_PATH}discont.png?design=movement" class="goods-image-icon" /> <strong>Товар участвует в акции «{GOODS_MOD_MAX_DISCOUNT_CAMPAIGN_NAME}».</strong><br /> По {GOODS_MOD_MAX_DISCOUNT_EXPIRED_AT | date} <span style="color: #ff0000;font-weight: bold;">скидка</span> составляет <span style="color: #ff0000;font-weight: bold;">{GOODS_MOD_MAX_DISCOUNT}%</span> </div> {% ENDIF %}
далее найдите
{% IF goods_modifications_properties.values.first %} <strong>{goods_modifications_properties.NAME}:</strong><br />замените на
{% IF goods_modifications_properties.values.first %} <strong>{goods_modifications_properties.NAME}:</strong>
в конец style.css добавьте
.goodsDataMainModificationsBlockProperty strong { margin: 0 16px 0 0; }
Все получилось. Но есть один момент, при выборе на сайте допустим модификацию размер XXL из всех, которого нет в наличии, то не меняется информация по наличию товара (ярлык на фото и кнопка купить на под заказ), а только цена и артикул. Как исправить?
#8
Отправлено 10 Февраль 2016 - 06:59
<span class="goodsDataMainModificationAvailable nal"> <span {% IF GOODS_MOD_REST_VALUE=0 %}style="display:none;"{% ENDIF %}> <strong>В наличии </strong></span> <span {% IF GOODS_MOD_REST_VALUE>0 %}style="display:none;"{% ENDIF %}><strong>Под заказ </strong></span> </span>
замените на:
<span class="goodsDataMainModificationAvailable nal"> <span class="available-true" {% IF GOODS_MOD_REST_VALUE=0 %}style="display:none;"{% ENDIF %}> <strong>В наличии </strong></span> <span class="available-false" {% IF GOODS_MOD_REST_VALUE>0 %}style="display:none;"{% ENDIF %}><strong>Под заказ </strong></span> </span>
#9
Отправлено 10 Февраль 2016 - 12:53
Vaccina (10 Февраль 2016 - 06:59) писал:
<span class="goodsDataMainModificationAvailable nal"> <span {% IF GOODS_MOD_REST_VALUE=0 %}style="display:none;"{% ENDIF %}> <strong>В наличии </strong></span> <span {% IF GOODS_MOD_REST_VALUE>0 %}style="display:none;"{% ENDIF %}><strong>Под заказ </strong></span> </span>
замените на:
<span class="goodsDataMainModificationAvailable nal"> <span class="available-true" {% IF GOODS_MOD_REST_VALUE=0 %}style="display:none;"{% ENDIF %}> <strong>В наличии </strong></span> <span class="available-false" {% IF GOODS_MOD_REST_VALUE>0 %}style="display:none;"{% ENDIF %}><strong>Под заказ </strong></span> </span>
У всех товаров которых нет в наличии на ярлыке у фото нет надписи или цвет текста красный в цвет фона ярлыка, а у товара который в наличии цвет букв в ярлыке стал зеленый вместо белого.
Кроме того не меняется кнопка (с "купить" на "под заказ") если в модификации нет товара.
#10
Отправлено 10 Февраль 2016 - 17:39
Sgray (10 Февраль 2016 - 12:53) писал:
Кроме того не меняется кнопка (с "купить" на "под заказ") если в модификации нет товара.
Здравствуйте, уточните, пожалуйста, остались ли у Вас актуальные вопросы, при тестировании, ни одной из указанных проблем не было выявлено.
#11
Отправлено 10 Февраль 2016 - 17:43
Sgray (10 Февраль 2016 - 12:53) писал:
Кроме того не меняется кнопка (с "купить" на "под заказ") если в модификации нет товара.
<span class="goodsDataMainModificationAvailable nal"> <span {% IF GOODS_MOD_REST_VALUE=0 %}style="display:none;"{% ENDIF %}> <strong>В наличии </strong></span> <span {% IF GOODS_MOD_REST_VALUE>0 %}style="display:none;"{% ENDIF %}><strong>Под заказ </strong></span> </span>замените на
<span class="goodsDataMainModificationAvailable nal"> <span class="available-true1"{% IF GOODS_MOD_REST_VALUE=0 %}style="display:none;"{% ENDIF %}> <strong>В наличии </strong></span> <span class="available-false1" {% IF GOODS_MOD_REST_VALUE>0 %}style="display:none;"{% ENDIF %}><strong>Под заказ </strong></span> </span>далее найдите в файле main.js
goodsAvailableTrue = goodsAvailable.find('.available-true'), goodsAvailableFalse = goodsAvailable.find('.available-false'),замените на
goodsAvailableTrue = goodsAvailable.find('.available-true1'), goodsAvailableFalse = goodsAvailable.find('.available-false1'),
#12
Отправлено 10 Февраль 2016 - 18:42
Ирина345 (10 Февраль 2016 - 17:43) писал:
<span class="goodsDataMainModificationAvailable nal"> <span {% IF GOODS_MOD_REST_VALUE=0 %}style="display:none;"{% ENDIF %}> <strong>В наличии </strong></span> <span {% IF GOODS_MOD_REST_VALUE>0 %}style="display:none;"{% ENDIF %}><strong>Под заказ </strong></span> </span>замените на
<span class="goodsDataMainModificationAvailable nal"> <span class="available-true1"{% IF GOODS_MOD_REST_VALUE=0 %}style="display:none;"{% ENDIF %}> <strong>В наличии </strong></span> <span class="available-false1" {% IF GOODS_MOD_REST_VALUE>0 %}style="display:none;"{% ENDIF %}><strong>Под заказ </strong></span> </span>далее найдите в файле main.js
goodsAvailableTrue = goodsAvailable.find('.available-true'), goodsAvailableFalse = goodsAvailable.find('.available-false'),замените на
goodsAvailableTrue = goodsAvailable.find('.available-true1'), goodsAvailableFalse = goodsAvailable.find('.available-false1'),
Ирина345 (10 Февраль 2016 - 17:43) писал:
<span class="goodsDataMainModificationAvailable nal"> <span {% IF GOODS_MOD_REST_VALUE=0 %}style="display:none;"{% ENDIF %}> <strong>В наличии </strong></span> <span {% IF GOODS_MOD_REST_VALUE>0 %}style="display:none;"{% ENDIF %}><strong>Под заказ </strong></span> </span>замените на
<span class="goodsDataMainModificationAvailable nal"> <span class="available-true1"{% IF GOODS_MOD_REST_VALUE=0 %}style="display:none;"{% ENDIF %}> <strong>В наличии </strong></span> <span class="available-false1" {% IF GOODS_MOD_REST_VALUE>0 %}style="display:none;"{% ENDIF %}><strong>Под заказ </strong></span> </span>далее найдите в файле main.js
goodsAvailableTrue = goodsAvailable.find('.available-true'), goodsAvailableFalse = goodsAvailable.find('.available-false'),замените на
goodsAvailableTrue = goodsAvailable.find('.available-true1'), goodsAvailableFalse = goodsAvailable.find('.available-false1'),
Пока ждал ответа, решил больше ни чего не менять.
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных