Перейти к содержимому


При Выборе Модификации Цена Не Изменяется


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 14

#1 hamer750

hamer750

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 91 сообщений

Отправлено 14 Май 2013 - 15:43

Приветствую.Почему то при выборе модификации цена не изменяется.подскажите SL-189702

Прикрепленные изображения

  • Безымянный.png


#2 Koderhan

Koderhan

    Активный участник

  • Модератоpы
  • 6 227 сообщений

Отправлено 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 hamer750

hamer750

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 91 сообщений

Отправлено 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);
});
});
нет.всё так же..выбираю а цена не изменяется.Вот здесь попробуйте http://xn--22-jlcq.x...VIcam?from=Mzlk

#4 Сake

Сake

    Активный участник

  • Модератоpы
  • 5 979 сообщений

Отправлено 15 Май 2013 - 01:34

Вы изменили тип выбора модификаций с select на radio, но изменения в main.js не внесли. Пожалуйста, почитайте внимательнее тему форума http://forum.storela...ации/#entry4198

и внесите необходимые изменения в файл main.js

#5 hamer750

hamer750

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 91 сообщений

Отправлено 15 Май 2013 - 07:28

Просмотр сообщенияСake (15 Май 2013 - 01:34) писал:

Вы изменили тип выбора модификаций с select на radio, но изменения в main.js не внесли. Пожалуйста, почитайте внимательнее тему форума http://forum.storela...ации/#entry4198

и внесите необходимые изменения в файл main.js
НЕ работате,по той темпе всё делал.как вернуть на обычный список?

#6 Koderhan

Koderhan

    Активный участник

  • Модератоpы
  • 6 227 сообщений

Отправлено 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 hamer750

hamer750

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 91 сообщений

Отправлено 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>
	 <!-- /Блок выбора модификаций для текущей товарной позиции -->
теперь когда выбираю он выдаёт такое окно

Прикрепленные изображения

  • вопрос.png


#8 Koderhan

Koderhan

    Активный участник

  • Модератоpы
  • 6 227 сообщений

Отправлено 15 Май 2013 - 09:42

Просмотр сообщенияhamer750 (15 Май 2013 - 09:33) писал:

теперь когда выбираю он выдаёт такое окно
На самом деле чтобы вернуть все как было проще будет сделать восстановление из резервной копии. В разделе Сайт-> Редактор тем.

#9 hamer750

hamer750

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 91 сообщений

Отправлено 15 Май 2013 - 09:50

Просмотр сообщенияKoderhan (15 Май 2013 - 09:42) писал:

На самом деле чтобы вернуть все как было проще будет сделать восстановление из резервной копии. В разделе Сайт-> Редактор тем.
у меня тогда всё сотрётся-остальные работы.

#10 miyako

miyako

    Активный участник

  • Модератоpы
  • 5 372 сообщений

Отправлено 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 hamer750

hamer750

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 91 сообщений

Отправлено 15 Май 2013 - 19:33

Просмотр сообщенияmiyako (15 Май 2013 - 14:44) писал:

Если вы пользовались инструкцией - 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 />
								
сделал,не работает.http://xn--22-jlcq.x...VIcam?from=ODlj

#12 Vaccina

Vaccina

    Активный участник

  • Модераторы
  • 24 353 сообщений

Отправлено 16 Май 2013 - 04:45

Вам как сообщалось выше необходимо обновить файл main.js, внеся в него необходимые изменения. Свойства у вас получаются из старого кода

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),


#13 hamer750

hamer750

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 91 сообщений

Отправлено 20 Май 2013 - 17:38

К сожалению,не работает.может я не так заполнил модификации?

Прикрепленные изображения

  • Модификации.png


#14 Сake

Сake

    Активный участник

  • Модератоpы
  • 5 979 сообщений

Отправлено 21 Май 2013 - 05:04

Найдите в вашем файле main.js

goodsDataProperties = $('.goodsDataMainModificationsBlock .goodsDataMainModificationsRadio'),

и замените на

goodsDataProperties = $('.goodsDataMainModificationsBlock .goodsDataMainModificationsBlockProperty'),

После очистите кэш в вашем браузере.

#15 hamer750

hamer750

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 91 сообщений

Отправлено 21 Май 2013 - 06:39

Просмотр сообщенияСake (21 Май 2013 - 05:04) писал:

Найдите в вашем файле main.js

goodsDataProperties = $('.goodsDataMainModificationsBlock .goodsDataMainModificationsRadio'),

и замените на

goodsDataProperties = $('.goodsDataMainModificationsBlock .goodsDataMainModificationsBlockProperty'),

После очистите кэш в вашем браузере.
Заработало всё.Спасибо огромное




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных