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


Изменение Типа Выбора Модификации


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

#341 Mr.Nito

Mr.Nito

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

  • Модераторы
  • 1 364 сообщений

Отправлено 16 Декабрь 2016 - 19:43

 57P (16 Декабрь 2016 - 16:33) писал:

цвет должен зависеть от цвета указанного в модификации
http://******.ru/goo...od_id=111027439


и еще сделайте пожалуйста так, чтобы было видно, что нажали кнопку, а то цена поменялась, а какую модификацию выбрали не понятно
Вариант с цветом реализовать не получится.
Для активной кнопки добавил стили
В файле main.css можно  изменить цвет
/*Модификации товаров*/
.product-view .product-shop .mod-input:checked + .mod-label {background: #dcdcdc;}


#342 57P

57P

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

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

Отправлено 16 Декабрь 2016 - 23:32

жаль, но все равно спасибо)

#343 sail12

sail12

    Пользователь

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

Отправлено 30 Октябрь 2017 - 23:24

Посмотрите пожалуйста где в коде ошибка. Почему то я не как не могу вставить изображение в блок Модификаций.

//Адаптивное меню
$(document).ready(function(){
	var mainMenu = $('.menu_main .menu_main');
	$("body").addClass("js");  
	mainMenu.find("li:has(ul)").addClass("menu_parent");  

	mainMenu.find("li").unbind('mouseout', mouseOut);
	mainMenu.find("li").unbind('mouseover', mouseOver);


	if ( $(window).width() > 767) {  

		if (mainMenu.find('li').hasClass('open')){
		mainMenu.find('li.open > ul').addClass("desctop_open");}
		mainMenu.find("li").bind('mouseover', mouseOver);
		mainMenu.find("li").bind('mouseout', mouseOut);
	}
	if ( $(window).width() <= 767) {

	  if ($('li').hasClass('open')){
		$('.menu_main .menu_main:first').find("> ul").addClass("mobile_open");
		$('.menu_main .menu_main:first').find("a.link_nav").addClass("menu_parent_exp");

	   mainMenu.find("li.open > ul").addClass("mobile_open");
		mainMenu.find("li.open > span").addClass("menu_parent_exp");	  
   $('.menu_main  ul:first').addClass("mobile_open");
		$('.menu_main:first').find("a.link_nav:first").addClass("menu_parent_exp");
	  }

   $(".link_nav").click(
	 function(){
   var parent = $(this).parent().find(" > ul");
   if(parent.is(":visible")) {
   parent.removeClass("mobile_open");
   } else {
   parent.addClass("mobile_open");
   }
		$(this).toggleClass("menu_parent_exp");
		  return false;
	 }
   );  
   $(".menu_parent > span").click(
	   function(){
   var parent = $(this).parent().find(" > ul");
   if(parent.hasClass("mobile_open")) {
   parent.removeClass("mobile_open");
		  $(this).removeClass("menu_parent_exp");
   } else {
   parent.addClass("mobile_open");
		  $(this).addClass("menu_parent_exp");
   }
	 }
   );
	}
  });
var resizeTimer;
  $(window).resize(function() {
	  clearTimeout(resizeTimer);
	  resizeTimer = setTimeout(window_resize, 100);
  });  

  function mouseOut() {
	if (!$(this).hasClass('open')){
		$(this).find("> ul").css({'display': '',  'position':''});
	}
  }
  function mouseOver() {
	if (!$(this).hasClass('open')){
	  $(this).find("> ul").css({'display': 'block',  'position':'absolute', 'top': '-1px','left':'228px', 'width': '228px',  'z-index': '10000'});
	}
  }

  function window_resize() {
	var mainMenu = $('.menu_main .menu_main');
	$("body").addClass("js");  
	mainMenu.find("li:has(ul)").addClass("menu_parent");  

	mainMenu.find("li").unbind('mouseout', mouseOut);
	mainMenu.find("li").unbind('mouseover', mouseOver);
	$(".link_nav").unbind("click");
	$(".link_nav > ul").unbind("click");
	$(".menu_parent > span").unbind("click");

	if ( $(window).width() > 767) {  

		if (mainMenu.find('li').hasClass('open')){
		mainMenu.find('li.open > ul').addClass("desctop_open");}
		mainMenu.find("li").bind('mouseover', mouseOver);
		mainMenu.find("li").bind('mouseout', mouseOut);
	}
   if ( $(window).width() <= 767) {

		mainMenu.find("li").unbind('mouseout', mouseOut);
		mainMenu.find("li").unbind('mouseover', mouseOver);

	   if ($('li').hasClass('open')){
		$('.menu_main .menu_main:first').find("> ul").addClass("mobile_open");
		 $('.menu_main .menu_main:first').find("a.link_nav").addClass("menu_parent_exp");
	   mainMenu.find("li.open > ul").addClass("mobile_open");
		mainMenu.find("li.open > span").addClass("menu_parent_exp");	  
   $('.menu_main  ul:first').addClass("mobile_open");
		$('.menu_main:first').find("a.link_nav:first").addClass("menu_parent_exp");
	  }


   $(".link_nav").click(
	   function(){
   var parent = $(this).parent().find(" > ul");
   if(parent.is(":visible")) {
   parent.removeClass("mobile_open");
   } else {
   parent.addClass("mobile_open");
   }
		$(this).toggleClass("menu_parent_exp");
		  return false;
	 }
   );  
   $(".menu_parent > span").click(
		function(){
   var parent = $(this).parent().find(" > ul");
   if(parent.hasClass("mobile_open")) {
   parent.removeClass("mobile_open");
		  $(this).removeClass("menu_parent_exp");
   } else {
   parent.addClass("mobile_open");
		  $(this).addClass("menu_parent_exp");
   }
	 }
   );
	}
  }

// Отправляет ошибку на сервер, для того чтобы служба тех поддержки могла разобраться в проблеме как можно быстрее.
function sendError (desc, page, line) {
  var img=document.createElement('img');
  img.src = '[url="https://storeland.ru/error/js?desc=%27+encodeURIComponent(desc"]https://storeland.ru...IComponent(desc[/url])+'&page='+encodeURIComponent(window.location)+'&line=0';
  img.style.position = 'absolute';
  img.style.top = '-9999px';

  try { document.getElementsByTagName('head').appendChild(img) } catch (e){}
  return false;
}

// Форматирует цену
function number_format(number,decimals,dec_point,thousands_sep){var n=number,prec=decimals;var toFixedFix=function(n,prec){var k=Math.pow(10,prec);return(Math.round(n*k)/k).toString();};n=!isFinite(+n)?0:+n;prec=!isFinite(+prec)?0:Math.abs(prec);var sep=(typeof thousands_sep==='undefined')?',':thousands_sep;var dec=(typeof dec_point==='undefined')?'.':dec_point;var s=(prec>0)?toFixedFix(n,prec):toFixedFix(Math.round(n),prec);var abs=toFixedFix(Math.abs(n),prec);var _,i;if(abs>=1000){_=abs.split(/\D/);i=_[0].length%3||3;_[0]=s.slice(0,i+(n<0))+
_[0].slice(i).replace(/(\d{3})/g,sep+'$1');s=_.join(dec);}else{s=s.replace('.',dec);}
var decPos=s.indexOf(dec);if(prec>=1&&decPos!==-1&&(s.length-decPos-1)<prec){s+=new Array(prec-(s.length-decPos-1)).join(0)+'0';}
else if(prec>=1&&decPos===-1){s+=dec+new Array(prec).join(0)+'0';}
return s;}

// Превращает поле пароля в текстовое поле и обратно
// @LinkObject - ссылка по которой кликнули
// @InputObject - объект у которого нужно изменить тип поля
function ChangePasswordFieldType (LinkObject, InputObject) {
  var
	// Ссылка по которой кликнули
	LObject = $(LinkObject),
	// Объект у которого изменяем тип с password на text
	IObject = $(InputObject),
	// Старый текст ссылки
	txtOld = LObject.text(),
	// Новый текст ссылки
	txtNew = LObject.attr('rel');

  // Если объекты не получены, завершим работу функции
  if( LObject.length==0 || IObject.length==0 ) {
	return false;
  }

  // Изменяем у ссылки текст со старого на новый
  LObject.html(txtNew);
  // Старый текст ссылки сохраняем в атрибуте rel
  LObject.attr('rel', txtOld);

  // Изменяем тип input поля
  if(IObject[0].type == 'text') {
	IObject[0].type = 'password';
  } else {
	IObject[0].type = 'text';
  }
}

// Крутит изображение при обновлении картинки защиты от роботов
function RefreshImageAction(img,num,cnt) {
  if(cnt>13) {
	return false;
  }

  $(img).attr('src', $(img).attr('rel') + 'icon/refresh/' + num + '.gif');
  num = (num==6)?0:num;
  setTimeout(function(){RefreshImageAction(img, num+1, cnt+1);}, 50);
}

$(document).ready(function(){
  // Кнопки на сайте если подгружен модуль Jquery.UI
  if(typeof($('input:submit, input.button').button) == "function" ) {
	$('input:submit, input.button').button();
  }

// Отправка формы по Ctrl+Enter
  $('form').bind('keypress', function(e){
	if((e.ctrlKey) && ((e.which==10)||(e.which==13))) {$(this).submit();}
  // Отправка данных формы по нажатию на Enter в случае если курсор находится в input полях (В некоторых браузерах при нажатии по enter срабатывает клик по первому submit полю, которое является кнопкой назад. Для этого написан этот фикс)
  }).find('input').bind('keypress', function(e){
	if(((e.which==10)||(e.which==13))) { try{$(this.form).submit();} catch(e){} return false; }
  });
  // Валидация формы на странице оформления заказа, а так же формы на страницы связи с администрацией
  $('.order form, .feedbackForm, .clientForm, .goodsDataOpinionAddForm').submit(function(){
	if($(this).valid()) {
	  // Кнопка отправки формы
	  SubmitButton = $(this).find('input:submit, button:submit');
	  // Если кнопку уже нажали, видимо отправка формы производилась по нажатию на кнопку enter, не допускаем этого.
	  if($(SubmitButton.get(0)).attr('disabled')) {
		return false;
	  }
	  // Устанавливаем на кнопку отправки формы блокировку повторной оптравки
	  SubmitButton.attr('disabled', true);
	  // Через 10 секунд блокировка отправки формы снимается.
	  setTimeout('SubmitButton.attr("disabled", false);', 10000);
	}
  }).validate();

  // В форме оформления заказа при клике на кнопку назад просто переходим на предыдущую страницу
  $('.order form input:submit[name="toprev"]').click(function(){
	var act = this.form.action;
	this.form.action = act + ( act.indexOf( '\?' ) > -1 ? '&' : '?' ) + 'toprev=1';
	this.form.submit();
	return false;
  });

  // Настройки галереи изображений
  $.nyroModalSettings({
	// из всех элементов с атрибут rel="gallery" будем создавать галерею
	gallery: 'gallery',
	// Включаем прокрутку с последнего изображения на первое
	galleryLoop: true
  });

  // Увеличение изображение при клике на него и открытие галереи изображений
  $('.goodsDataMainImage a, .goodsDataMainImageZoom a').click(function(){

		// Идентификатор главной картинки
	var goodsImageId = $('.goodsDataMainImage input').val(),

		// Маленькое изображение, по которому на самом деле будем кликать
		goodsImageIconElement = $('.goodsDataMainImages input[value="'+goodsImageId+'"]').parent().find('a');

	// Для иконки изображения запустим галерею  
	goodsImageIconElement.nyroModalManual();
	return false;
  });

  // Добавление товара в корзину через ajax
  $('.goodsListItemCatalogueAddToCartButton, .goodsToCartFromCompareForm').submit(function(){
	// Если нужно быстро положить в корзину
	if($(this).attr('rel') == 'quick') {
	  return true;

	// Если нужно просто добавить в корзину и продолжить покупки
	} else {
	  $(this).nyroModalManual({
		formIndicator: 'ajax_q',  // Value added when a form is sent
		minWidth: 420, // Minimum width
		minHeight: 150, // Minimum height
		gallery: null // Gallery name if provided
	  });
	  return false;
	 }
  });

  // Клик по ячейке с изображением означает клик по картинке
  $('table.product-image td').click(function(){document.location = $(this).find('a:first').attr('href');return false;});

  // Главное товарное изображение
  $('.goodsDataMainImages a')
	// При наведении на маленькое изображение изменяем среднее
	.mouseover(function(){
	  var
		// Путь к среднему изображению
		MediumImageUrl = $(this).find('img').attr('rel')

		// Объект в котором расположено среднее изображение товара
		,MainImageObj = $('div.goodsDataMainImage')

		// Главное изображение, в которое будем вставлять новое изображение
		,MainImageImg = MainImageObj.find('img')

		// Вариант главного изображения отображаемого через свойство background
		,MainImageBlockWithBg = MainImageObj.find('a div')

		// В этом объекте хранится идентификатор картинки главного изображения для коректной работы галереи изображений
		,MainImageIdObject = MainImageObj.find('input')

		// Получаем идентификатор этого изображения из соседнего input поля
		,GoodsImageIconId = $(this).parent().find('input').val()
	  ;

	  // Изменяем главное изображение
	  if(0 < MainImageImg.length) {
		MainImageImg.attr('src', MediumImageUrl);
	  } else {
		MainImageBlockWithBg.css({'background': 'url("' + MediumImageUrl + '") no-repeat center center', 'background-size' : 'contain'});
	  }

	  // Изменяем идентификатор главного изображения
	  MainImageIdObject.val(GoodsImageIconId);
	})
	// Изменение главного изображения товара при нажатии на миниатюру
	.click(function(){
	  // Для иконки изображения запустим галерею
	  $(this).nyroModalManual();
	  return false;
	});

  // Функция собирает свойства в строку, для определения модификации товара
  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, B){return a - b}).join('_');
  }


  var
		// Запоминаем поля выбора свойств, для ускорения работы со значениями свойств
		goodsDataProperties = $('.goodsDataMainModificationsBlock'),

		// Запоминаем блоки с информацией по модификациям, для ускорения работы
		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);
	  } else {
		// Отправим запись об ошибке на сервер
		sendError('no modification by slug '+slug);
		alert('К сожалению сейчас не получается подобрать модификацию соответствующую выбранным параметрам.');
	  }

	  // Обновляем возможность выбора другой модификации для текущих значений свойств модификации товара.
	  updateVisibility(y);
	});
  });

  // Кнопка добавления товара на сравнение сравнения товаров
  $('.goodsDataCompareButton').click(function(){
	window.location.href = $(this).attr('rel') +
	($(this).attr('rel').indexOf( '\?' ) > -1 ? '&' : '?') +
	'id='+
	$('.goodsDataMainModificationId').val()+
	'&from='+
	$('input[name="form[goods_from]"]').val();
	return false;
  });

  // Сравнение товаров. Увеличение изображение при клике на ссылку увеличения и открытие галереии с изображениями этого товара
  $('.CompareGoodsImageZoom').click(function(){

	// Галлерея фотографий для данной модификации товаров
	var galleryBlock = $('.galleryBlock' +  $(this).attr('rel')),

	// Главное изображение товара, которое сейчас стоит у товара
	galleryMainImage = $('.CompareGoodsImageMain' +  $(this).attr('rel')),

	// Изображение по которому нужно кликнуть в галлерее изображений
	ImageIngallery = galleryBlock.find('.CompareGoodsImageGallery'+galleryMainImage.attr('rel'));

	// Запускаем галлерею изображений от изображения товара, чтобы если например кликнули по гайке, то и открылись гайка, а не еще какой-либо изображение этого товара
	ImageIngallery.nyroModalManual({
	  gallery: 'gallery' +  $(this).attr('rel')
	});

	return false;
  });

  // Сравнение товаров. Инвертирование свойств для сравнения товара
  $('.CompareCheckbox.invert').click(function(){
	var checked = true,
		checkboxes = $('.CompareCheckbox:not(.invert)');

	checkboxes.each(function(){
	  if($(this).attr('checked')) {
		checked = false;
		return false;
	  }
	});

	checkboxes.each(function(){
	  $(this).attr('checked', checked);
	});

	$(this).attr('checked', checked);
  });

  // Сравнение товаров. Скрытие характеристик товара, которые выделил пользователь
  $('.CompareGoodsHideSelected').click(function(){

	$('.CompareGoodsTableTbodyComparisonLine').each(function(){
	  var CheckedCheckbox = $(this).find('.CompareCheckbox:checked:not(.invert)');
	  if(CheckedCheckbox.length>0) {
		$(this).hide();
	  }
	});

	// отменяем выделение характеристик товаров
	$('.CompareCheckbox').attr('checked',false);

	return false;
  });

  // Сравнение товаров. Отображение скрытых характеристик товара
  $('.CompareGoodsShowAll').click(function(){
	$('.CompareGoodsTableTbodyComparisonLine:hidden').show();
	return false;
  });

  // Сравнение товаров. Верхняя навигация изменение фильтра на отображение всех характеристик товаров
  $('.CompareGoodsTableFilterShowAll').click(function(){
	$('.CompareGoodsTableFilterSelected').removeClass('CompareGoodsTableFilterSelected');
	$('.CompareGoodsTableTbodyComparisonLine:hidden').show();

	$(this).addClass('CompareGoodsTableFilterSelected');
	return false;
  });

  // Сравнение товаров. Фильтр в верхней навигации. Отображение только различающихся характеристик товара
  $('.CompareGoodsTableFilterShowOnlyDifferent').click(function(){
	$('.CompareGoodsTableFilterSelected').removeClass('CompareGoodsTableFilterSelected');
	$('.CompareGoodsTableTbodyComparisonLine:not(.same)').show();
	$('.CompareGoodsTableTbodyComparisonLine.same').hide();

	$(this).addClass('CompareGoodsTableFilterSelected');
	return false;
  });

  // Сравнение товаров. При наведении на строку сравнения, она выделяется цветом
  $('.CompareGoodsTableTbodyComparisonLine').hover(
	function () { $(this).addClass('hover'); },
	function () { $(this).removeClass('hover'); }
  );

  // При клике по строке выделяем свойство
  $('.CompareGoodsTableTbodyComparisonLine td:not(.ceil1)').click(function(){
	var CompareCheckbox = $(this).parent().find('.CompareCheckbox');

	if(CompareCheckbox.attr('checked')) {
	  CompareCheckbox.attr('checked', false);
	} else {
	  CompareCheckbox.attr('checked', true);
	}
  });

  // Прокрутка списка сравнения вправо
  $('.CompareGoodsTablePrev').click(function(){

	return false;
  });

  function compareGetVars () {
	return new Array(
	  $('.CompareGoodsTableTbody tr:first td').length - 1,
	  parseInt($('.CompareGoodsTableTbody tr:first td:visible:not(.ceil1)').attr('class').replace(new RegExp('noBorderBottom compare\-td compare\-td\-'), '')),
	  parseInt($('.CompareGoodsTableTbody tr:first td:visible:last').attr('class').replace(new RegExp('noBorderBottom compare\-td compare\-td\-'), ''))
	);
  }
  // Прокрутка списка сравнения вправо
  $('.CompareGoodsTableNext').click(function(){

	// Определяем используемые поля
	var data = compareGetVars();

	// Изменяем их если это возможно.
	if(data[0] > data[2]) {
	  $('.compare-td-' + data[1]).hide();
	  $('.compare-td-' + (data[2] + 1)).show();
	  if((data[2] + 1) >= data[0]) {
		$(this).find('a').addClass('disable');
	  }
	  if(data[1] + 1 != 1) {
		$('.CompareGoodsTablePrev a').removeClass('disable');
	  }
	}

	return false;
  });

  // Прокрутка списка сравнения вправо
  $('.CompareGoodsTablePrev').click(function(){

	// Определяем используемые поля
	var data = compareGetVars();

	// Изменяем их если это возможно.
	if(1 < data[1]) {
	  $('.compare-td-' + (data[1] - 1)).show();
	  $('.compare-td-' + data[2]).hide();
	  if((data[1] - 1) <= 1) {
		$(this).find('a').addClass('disable');
	  }
	  if(data[2] - 1 != data[0]) {
		$('.CompareGoodsTableNext a').removeClass('disable');
	  }
	}

	return false;
  });


  // Форма регистрации нового пользователя, действие ссылки "показать пароль"
  $('.clientForm .showPass').click(function(){
	ChangePasswordFieldType(this, $('#sites_client_pass'));
	return false;
  });

  // Форма регистрации нового пользователя, при оформлении заказа
  $('.OrderShowPass').click(function(){
	ChangePasswordFieldType(this, $('#contactPassWord'));
	return false;
  });

  // При вводе пароля с caps lockом, покажет блок с сообщением для пользователя
  $('#sites_client_pass, #contactPassWord').capslock({
	caps_lock_on:function(){$("#caps_lock").show();},
	caps_lock_off:function(){$("#caps_lock").hide();}
  });

  // При оформлении заказа дадим возможность зарегистрироваться пользователю
  $('#contactWantRegister').click(function(){
	if($(this).attr("checked")) {
	  $('.contactRegisterNeedElement').show();
	  $('#contactEmail, #contactPassWord').addClass('required');
	} else {
	  $('.contactRegisterNeedElement').hide();
	  $('#contactEmail, #contactPassWord').removeClass('required');
	}
  });

  // Добавление отзыва о товаре. Рейтинг
  if(typeof($('.goodsDataOpinionTableRating').stars) == "function" ) {
	$('.goodsDataOpinionTableRating').stars({
	  inputType: "input",
	  split: 2,
	  captionEl: $(".goodsDataOpinionMsg"),
	  cancelShow: false
	});
  }

  // Иконки оплаты, чтобы яша не думал что тут сидят говносайто дельцы, размещающие по 30 бесполезных ссылок с главной сделаем ссылку яваскриптной
  $('.payment-sistems a').click(function(){
	document.location = '/order/stage/contacts';
	return false;
  });


  // Список отзывов о товаре. Ссылка на отображение формы для добавление отзыва о товаре
  $('.goodsDataOpinionShowAddForm').click(function(){
	if(0 == $('#goodsDataOpinionAddBlock:visible').length) {
	  $('#goodsDataOpinionAddBlock').show('blind');
	} else {
	  $('#goodsDataOpinionAddBlock').hide('blind');
	}
	return false;
  });

  // Добавление отзыва о товаре. кнопка reset скрывающая форму добавления отзыва о товаре
  $('.goodsDataOpinionFormReset').click(function(){
	$('#goodsDataOpinionAddBlock').hide('blind');
	return false;
  });

  // Иконка для обновления изображение капчи
  $('.goodsDataOpinionCaptchaRefresh').click(function(){
	RefreshImageAction(this,1,1);
	$('.goodsDataOpinionCaptchaImg').attr('src',$('.goodsDataOpinionCaptchaImg').attr('src')+'&rand'+Math.random(0,10000));
	return false;
  });

  // Фильтры по товарам. При нажании на какую либо характеристику или свойство товара происходит фильтрация товаров
  $('.contentTbodySearchFilterBlock input').click(function(){
	$(this)[0].form.submit();
  });

  // Действия при выборе варианта доставки на этапе оформления заказа
  $('.deliveryRadio').click(function(){

	// Если текущая выделенная зона доставки не относится к выбранному варианту доставки, снимаем выделение с зоны доставки
	if($('.deliveryZoneRadio:checked').attr('deliveryid') != $(this).val()) {
	  $('.deliveryZoneRadio:checked').click().attr('checked', false);
	}
  });

  // Действия при выборе зоны внутри варианта доставки на этапе оформления заказа
  $('.deliveryZoneRadio').click(function(){

	var
	  deliveryId = $(this).attr('deliveryid')
	  ,deliveryZonePrice = $(this).parent().find('.deliveryZonePrice')
	  ,deliveryTbody = $('.orderStageDeliveryListTable tbody[rel="' + deliveryId + '"]')
	  ,deliveryBlock = deliveryTbody.find('#deliveryId' + deliveryId)
	  ,deliveryZonePriceBlock = deliveryTbody.find('.orderStageDeliveryZonePrice')
	  ,deliveryDefaultPriceBlock = deliveryTbody.find('.orderStageDeliveryDefaultPrice')
	;

	// Если этот пункт уже выбран, при повторном клике пользователь видимо хочет снять выделение зоны доставки
	if('true' == $(this).attr('rel')) {
	  $(this).attr('checked', false);
	  $(this).attr('rel', 'false');

	  // Показываем цену по умолчанию
	  deliveryDefaultPriceBlock.show();
	  // Скрываем цену образованную от зоны
	  deliveryZonePriceBlock.hide();

	// Отмечаем у всех радио баттонов зон доставки свойство говорящее что они не отмечены
	} else {
	  $('.deliveryZoneRadio').attr('rel', 'false');
	  $(this).attr('rel', 'true');

	  // Показываем цену по умолчанию
	  deliveryDefaultPriceBlock.hide();
	  // Скрываем цену образованную от зоны
	  deliveryZonePriceBlock.show().html(deliveryZonePrice.html());

	  // Выделяем вариант доставки к которому относится зона доставки
	  deliveryBlock.attr('checked', true);
	}

  });

  $("#deliveryConvenientDate").datepicker({
dayNames	 : ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье'],
dayNamesMin   : ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб' ],
closeText	 : 'Готово',
currentText   : 'Сегодня' ,
duration	 : '',
monthNames   : ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
monthNamesShort : ['Янв','Фев','Март','Апр','Май','Июнь','Июль','Авг','Сен','Окт','Ноя','Дек'],
yearRange	 : "-6:+6",
dateFormat   : 'dd.mm.yy',
minDate		 : new Date(),
firstDay	 : 1
});

  var
	// Минимальное значение цены для фильтра
	priceFilterMinAvailable = parseInt($('.goodsFilterPriceRangePointers .min').text())
	// Максимальное значение цены для фильтра
	,priceFilterMaxAvailable = parseInt($('.goodsFilterPriceRangePointers .max').text())
	// Максимальное значение цены для фильтра
	,priceSliderBlock = $('#goods-filter-price-slider')
	// Поле ввода текущего значения цены "От"
	,priceInputMin = $( "#goods-filter-min-price" )
	// Поле ввода текущего значения цены "До"
	,priceInputMax = $( "#goods-filter-max-price" )
	// Блок с кнопкой, которую есть смысл нажимать только тогда, когда изменялся диапазон цен.
	,priceSubmitButtonBlock = $( ".goodsFilterPriceSubmit" )
  ;

  // Изменяет размер ячеек с ценой, т.к. у них нет рамок, есть смысл менять размеры полей ввода, чтобы они выглядили как текст
  function priceInputsChangeWidthByChars() {
	// Если есть блок указания минимальной цены
	if(priceInputMin.length) {
	  priceInputMin.css('width', (priceInputMin.val().length*7 + 3) + 'px');
	  priceInputMax.css('width', (priceInputMax.val().length*7 + 3) + 'px');
	}
  }

  // Слайдер, который используется для удобства выбора цены
  priceSliderBlock.slider({
	range: true,
	min: priceFilterMinAvailable,
	max: priceFilterMaxAvailable,
	values: [
	  parseInt($('#goods-filter-min-price').val())
	  ,parseInt($('#goods-filter-max-price').val())
	],
	slide: function( event, ui ) {
	  priceInputMin.val( ui.values[ 0 ] );
	  priceInputMax.val( ui.values[ 1 ] );
	  priceSubmitButtonBlock.show();
	  priceInputsChangeWidthByChars();
	}
  });

  // При изменении минимального значения цены
  priceInputMin.keyup(function(){
	var newVal = parseInt($(this).val());
	if(newVal < priceFilterMinAvailable) {
	  newVal = priceFilterMinAvailable;
	}
	priceSliderBlock.slider("values", 0, newVal);
	priceSubmitButtonBlock.show();
	priceInputsChangeWidthByChars();
  });

  // При изменении максимального значения цены
  priceInputMax.keyup(function(){
	var newVal = parseInt($(this).val());
	if(newVal > priceFilterMaxAvailable) {
	  newVal = priceFilterMaxAvailable;
	}
	priceSliderBlock.slider("values", 1, newVal);
	priceSubmitButtonBlock.show();
	priceInputsChangeWidthByChars();
  });
  // Обновить размеры полей ввода диапазона цен
  priceInputsChangeWidthByChars();

});


/* Отличия от других шаблонов */

// Прелоадер картинок, чтобы при наведении юзер не ждал пока подгрузятся эти картинки
function preloadImages(imgs){
  var picArr = [];
for (i = 0; i<imgs.length; i++){
picArr[i]= new Image(100,100);
picArr[i].src=imgs[i];
}
}


$(document).ready(function(){

  /* Действие при наведении на товар - появление кнопки быстрой покупки
  $(".products-grid li.item .product-box, .products-list li.item .product-box").hover(
	function () {
	 $(this).find('.quick-shop').show();
	},
	function () {
	  $(this).find('.quick-shop').hide();
	}
  );
  */

  // Действие при наведении на товар на главной
  $(".header .links li a").hover(
	function () {
	  deff_class = $.trim($(this).attr('class'));
	  $(this).attr('class', deff_class.replace(new RegExp("-act"), '') + '-act').addClass('hover');
	},
	function () {
	  $(this).attr('class',deff_class).removeClass('hover');
	}
  );

  // Действие при наведении на меню категорий, для возможности отображения вложенного подменю
  $('ul.nav li').hover(
	function () {
	  $(this).addClass('over');
	},
	function () {
	  $(this).removeClass('over');
	}
  );

  // Действие при наведении на логотипы платёжных систем
  $(".footer .payment-sistems img").hover(
	function () {
	  path = $(this).attr('src');
	  $(this).attr('src', path.replace(new RegExp(".png"), '_act.png'));
	},
	function () {
	  $(this).attr('src', path);
	}
  );

  // Навигация стрелочками по страницам со списками
  document.onkeyup = NavigateThrough;  
  function NavigateThrough (event)
  {
	if (!document.getElementById) return;
	if (window.event) event = window.event;
	if (event.ctrlKey) {
	  var link = null;
	  switch (event.keyCode ? event.keyCode : event.which ? event.which : null) {
		case 0x25:
		  link = $('.previous_page')[0];
		  break;
		case 0x27:
		  link = $('.next_page')[0];
		  break;
	  }
	  if (link && link.href) document.location = link.href;
	}			
  }
});
$(function() {
  var colors = {'Коричневый': 'brown', 'Серый': 'gray', 'Черный': 'black'};
  $('.goodsDataMainModificationsBlockProperty label').each(function() {
		var name = $.trim($(this).text());
		if(name in colors) {
		  $(this).css({
				'backgroundColor': colors[name]
		  });
		}
  });
});

function visibleModificationsColor() {
  var colors = {'Коричневый': 'brown', 'Серый': 'gray', 'Черный': 'black'};
  $('.goodsDataMainModificationsBlockProperty label').each(function() {
				var name = $.trim($(this).text());
				if(name in colors) {
				  $(this).css({
								'backgroundColor': colors[name],
								'text-indent': '-9999px'
				  });
				}
  });
}
visibleModificationsColor();

function visibleModificationsColor() {
  var colors = {'Коричневый': 'brown', 'Серый': 'gray', 'Черный': 'black', 'тик': 'url(currency_marker.gif)'};
  $('.goodsDataMainModificationsBlockProperty label').each(function() {
								var name = $.trim($(this).text());
								if(name in colors) {
								  $(this).css({
																'background': colors[name],
																'text-indent': '-9999px'
								  }).attr('title', name);
								}
  });
}
});

шаб.jpg

#344 Vaccina

Vaccina

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

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

Отправлено 31 Октябрь 2017 - 06:20

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

Зайдите в раздел Сайт - Редактор шаблонов - main.js - найдите:
$(function() {
var colors = {'Коричневый': 'brown', 'Серый': 'gray', 'Черный': 'black'};
$('.goodsDataMainModificationsBlockProperty label').each(function() {
	 var name = $.trim($(this).text());
	 if(name in colors) {
		 $(this).css({
			 'backgroundColor': colors[name]
		 });
	 }
});
});

function visibleModificationsColor() {
var colors = {'Коричневый': 'brown', 'Серый': 'gray', 'Черный': 'black'};
$('.goodsDataMainModificationsBlockProperty label').each(function() {
			 var name = $.trim($(this).text());
			 if(name in colors) {
				 $(this).css({
							 'backgroundColor': colors[name],
							 'text-indent': '-9999px'
				 });
			 }
});
}
visibleModificationsColor();

function visibleModificationsColor() {
var colors = {'Коричневый': 'brown', 'Серый': 'gray', 'Черный': 'black', 'тик': 'url(currency_marker.gif)'};
$('.goodsDataMainModificationsBlockProperty label').each(function() {
							 var name = $.trim($(this).text());
							 if(name in colors) {
								 $(this).css({
															 'background': colors[name],
															 'text-indent': '-9999px'
								 }).attr('title', name);
							 }
});
}
});

замените на:
function visibleModificationsColor() {
var colors = {
'Махагон': '#4C2F26',
'Палисандр': 'url("http://www.ya-magazin.ru/i/massivnaya_doska_magestik_floor_palisandr_2.jpg")',
'Светлый орех': '#B45E11',
'Тик': '#9A663B'
};
$('.goodsDataMainModificationsBlockProperty label').each(function () {
var name = $.trim($(this).text());
if (name in colors) {
	 $(this).css({
	 'background': colors[name],
	 'text-indent': '-9999px'
	 }).attr('title', name);
}
});
}
$(function() {
visibleModificationsColor();
});

В измененном блоке добавляйте код цвета или картинку по аналогии.
Если все сделали правильно, то результат будет следующий:
Подставка для цветов напольная Импэкс.png

#345 sail12

sail12

    Пользователь

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

Отправлено 31 Октябрь 2017 - 12:32

Спасибо все работает. Как поставить картинки в блок модификаций. Я закинул фото в редактор шаблона. Напишите как прописываются  пути к картинкам.

#346 RayLi

RayLi

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

  • Модераторы
  • 2 864 сообщений

Отправлено 02 Ноябрь 2017 - 10:16

 sail12 (31 Октябрь 2017 - 12:32) писал:

Спасибо все работает. Как поставить картинки в блок модификаций. Я закинул фото в редактор шаблона. Напишите как прописываются  пути к картинкам.

Здравствуйте.
Если мы правильно Вас понимаем, то в данном случае Вам необходимо в поле: "Добавить модификации" , что находится в разделе Товары -> Товары, в настройках требуемого товара, прописать код следующего вида:

<img src="ссылка_на_ваше_изображение">

Где заместо: ссылка_на_ваше_изображение, пропишите, пожалуйста, требуемую Вам прямую ссылку на изображение, которое вы загрузили в раздел Файлы, либо раздел Редактор шаблонов вашего интернет-магазина.

#347 sail12

sail12

    Пользователь

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

Отправлено 02 Ноябрь 2017 - 15:23

как прописать

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

  • фото.png


#348 RayLi

RayLi

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

  • Модераторы
  • 2 864 сообщений

Отправлено 02 Ноябрь 2017 - 16:51

 sail12 (02 Ноябрь 2017 - 15:23) писал:

как прописать

Данное изображение необходимо прописать не в коде, а в настройках товара, что находится в разделе Товары -> Товары в открывающийся блок модификации: "Добавить описание".
Проверьте, пожалуйста.

#349 sail12

sail12

    Пользователь

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

Отправлено 03 Ноябрь 2017 - 18:05

Например мне нужно вот это изображение Baner_podarok.jpg. Покажите пожалуйста на скрине куда вписывать.

#350 RayLi

RayLi

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

  • Модераторы
  • 2 864 сообщений

Отправлено 03 Ноябрь 2017 - 18:13

 sail12 (03 Ноябрь 2017 - 18:05) писал:

Например мне нужно вот это изображение Baner_podarok.jpg. Покажите пожалуйста на скрине куда вписывать.

Требуемое изображения Вам необходимо добавить в поле, что обозначено на скриншоте, которое появляется после того как Вы нажмёте в модификации на кнопку: "Добавить описание".
Проверьте, пожалуйста.

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

  • 03-11-2017 18-11-30.png


#351 sail12

sail12

    Пользователь

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

Отправлено 03 Ноябрь 2017 - 20:54

Добавил название картинки в блок который вы мне указали, сохранил. Не чего не появилось. Кэш тоже почистел. Или я что то не то делаю?

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

  • ссф.png


#352 Vaccina

Vaccina

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

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

Отправлено 04 Ноябрь 2017 - 08:10

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

В описании модификации картинка должна прописываться следующим образом:
<img src="https://sail21.storeland.ru/design/Baner_podarok.jpg" alt="" />


#353 DevidINA

DevidINA

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

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

Отправлено 18 Январь 2018 - 00:24

1.Сделал все по инструкции. Возникла проблема. Когда переключаю на другой цвет, сверху цена товара переключается на обычный шрифт, на скрине видно.
2. Можно ли сделать иконки выбора модификаций круглыми
3. Как я не пытался у меня так и не получилось отделить текст от иконок, помогите разобраться с этим, нужно чтобы текста не было только у модификаций где нужно выбрать цвет. У меня в main.js просто отсутствует, поэтому не могу выполнить пост #141


setTimeout(function(){
  var goodsDataProperties = c.find('form.goodsDataForm .goodsDataMainModificationsRadio');
  var goodsDataModifications = c.find('div.goodsDataMainModificationsList');
  updateVisibility (0, goodsDataProperties, goodsDataModifications);
  updateVisibility (1, goodsDataProperties, goodsDataModifications);
  applyGoodsDataProperties(goodsDataProperties, goodsDataModifications);
}, 800)и к

И как привязать к каждой модификации своё изображение?

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

  • .png


#354 Stasya

Stasya

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

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

Отправлено 25 Январь 2018 - 10:56

 DevidINA (18 Январь 2018 - 00:24) писал:

1.Сделал все по инструкции. Возникла проблема. Когда переключаю на другой цвет, сверху цена товара переключается на обычный шрифт, на скрине видно.
2. Можно ли сделать иконки выбора модификаций круглыми
3. Как я не пытался у меня так и не получилось отделить текст от иконок, помогите разобраться с этим, нужно чтобы текста не было только у модификаций где нужно выбрать цвет. У меня в main.js просто отсутствует, поэтому не могу выполнить пост #141


setTimeout(function(){
  var goodsDataProperties = c.find('form.goodsDataForm .goodsDataMainModificationsRadio');
  var goodsDataModifications = c.find('div.goodsDataMainModificationsList');
  updateVisibility (0, goodsDataProperties, goodsDataModifications);
  updateVisibility (1, goodsDataProperties, goodsDataModifications);
  applyGoodsDataProperties(goodsDataProperties, goodsDataModifications);
}, 800)и к

И как привязать к каждой модификации своё изображение?
Здравствуйте. Ваш магазин сейчас заблокирован. Для выполнения изменений нужно пополнить баланс магазина.

#355 status321

status321

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

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

Отправлено 18 Октябрь 2022 - 10:45

Добрый день.Нужна помощь.Не работает выбор модификаций,т.е они есть они но все не активные.Аккаунт SL-529065 Шаблон Техно.

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

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


#356 Vaccina

Vaccina

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

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

Отправлено 19 Октябрь 2022 - 04:14

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

Пришлите пожалуйста ссылку на товар-пример(без указания домена).




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

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