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


Модификации


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

#1 bartjohn

bartjohn

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

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

Отправлено 25 Ноябрь 2019 - 21:45

Просьба помочь переделать модификацию:

http://prntscr.com/q1xayk

На обычное меню, не выплывающее.

ЧТобы было:
* модификация 1
* модификация 2

А то клиенты слепые достали :)
Спасибо!

И второй вопрос, нужно уменьшить фото на мобильной версии сайта.
Т.к ггул к ней предвзято относится говорит 60% скорость загрузки всего
Для версий на ПК 94, тут все ок :)

А лучше на всем сайте, сразу сжать как это сделать не перезаливая все?

Третья проблема. С хлебными крошками вроде разобрался. завтра точно посмотрю
Недопустимое перечислимое значение в поле "availability"
http://prntscr.com/q1xnsk

На форуме нашел, но не понял где и как поменять чтобы убрать ошибку с гугла.

#2 Vaccina

Vaccina

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

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

Отправлено 12 Февраль 2020 - 06:50

Здравствуйте.

Зайдите в раздел Сайт - Редактор шаблонов - Товар - найдите:
	 {% FOR goods_modifications_properties %}
		 <div class="goodsDataMainModificationsBlockProperty">
		 <!-- Выдаем списки со свойствами для модификаций, чтобы определить какую модификацию товара хочет пользователь -->
		 {% FOR values %}
			 <!-- Если это первый элемент в списке -->
			 {% IF goods_modifications_properties.values.first %}
			 <span>{goods_modifications_properties.NAME}:</span>
			 <select name="form[properties][]" class="selectBox">
			 {% 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","","")}
	 {% 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][{goods_modifications_properties.ID}]" 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);

// Изменение цены товара при изменении у товара свойства для модификации
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		 = parseInt(modificationBlock.find('[name="price_now"]').val()),
	 modificationPriceNowFormated = modificationBlock.find('.price_now_formated').html(),
	 modificationPriceOld		 = parseInt(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'),
	 goodsAvailableAddCart		 = $('.add-to-form .add-to-cart'),
	 goodsAvailableQty			 = $('.add-to-form .wrap-qty'),
	 goodsArtNumberBlock		 = $('.goodsDataMainModificationArtNumber'),
	 goodsArtNumber			 = goodsArtNumberBlock.find('span');
	 goodsCompareAddButton		 = $('.goodsDataCompareButton.add');
	 goodsCompareDeleteButton	 = $('.goodsDataCompareButton.delete');
	 goodsModDescriptionBlock	 = $('.goodsDataMainModificationsDescriptionBlock');
	
	 // Изменяем данные товара для выбранных параметров. Если нашлась выбранная модификация
	 if(modificationBlock.length) {
	 // Цена товара
	 goodsPriceNow.html('<span class="price">' + modificationPriceNowFormated + '</span>');
	 // Старая цена товара
	 if(modificationPriceOld>modificationPriceNow) {
		 goodsPriceOld.html('<span class="price">' + modificationPriceOldFormated + '</span>');
	 } else {
		 goodsPriceOld.html('');
	 }
	 // Есть ли товар есть в наличии
	 if(modificationRestValue>0) {
		 goodsAvailableTrue.show();
		 goodsAvailableFalse.hide();
		 goodsAvailableAddCart.show();
		 goodsAvailableQty.show();
	 // Если товара нет в наличии
	 } else {
		 goodsAvailableTrue.hide();
		 goodsAvailableFalse.show();
		 goodsAvailableAddCart.hide();
		 goodsAvailableQty.hide();
	 }
	 // Если товар есть в списке сравнения
	 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).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,с){return a - с}).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),
																 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);
																 window.location.hash = '?modification='+modificationId;
								 } else {
																 // Отправим запись об ошибке на сервер
																 sendError('no modification by slug '+slug);
																 alert('К сожалению сейчас не получается подобрать модификацию соответствующую выбранным параметрам.');
								 }
								
								 // Обновляем возможность выбора другой модификации для текущих значений свойств модификации товара.
								 updateVisibility(y);
							 });
});


#3 bartjohn

bartjohn

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

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

Отправлено 26 Февраль 2020 - 13:35

Перестала меняться цена в зависимости от модификации. А так все ок поменял. Где поменять? СПасибо!




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

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