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


Добавить Кнопки Выбора Модификаций В Карточке Товара


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

#1 Ильяc

Ильяc

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

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

Отправлено 27 Январь 2016 - 11:37

Здравствуйте! SL-251638
Нужно в каждой карточке товара добавить кнопки с мдификациями, то что реализовано по умолчанию не подходит совсем! Я до сих пор не понял как с этими вкладками работать.

Хочу реализовать как на картинке, к каждой модификации можно добавить ссылку на другой товар и при нажатии страница просто обновляется и человек попадает к такому же товару но уже с другими хар-ками. Например: Я захожу на карточку товара, где продается телефон Nexus 5X 16 gb черный, затем нажимаю на кнопку 32Gb, страница обновляется и попадает на другую страницу, где уже находится Nexus 5X 32 gb. Примерно так) И нужно в мобильной версии сайта чтобы отображалочь корректно. Возможно такое сделать? Очень нужно!
доп кнопки.png

#2 Юля123

Юля123

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

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

Отправлено 27 Январь 2016 - 18:44

Просмотр сообщенияИльяc (27 Январь 2016 - 11:37) писал:

Здравствуйте! SL-251638
Нужно в каждой карточке товара добавить кнопки с мдификациями, то что реализовано по умолчанию не подходит совсем! Я до сих пор не понял как с этими вкладками работать.

Хочу реализовать как на картинке, к каждой модификации можно добавить ссылку на другой товар и при нажатии страница просто обновляется и человек попадает к такому же товару но уже с другими хар-ками. Например: Я захожу на карточку товара, где продается телефон Nexus 5X 16 gb черный, затем нажимаю на кнопку 32Gb, страница обновляется и попадает на другую страницу, где уже находится Nexus 5X 32 gb. Примерно так) И нужно в мобильной версии сайта чтобы отображалось корректно. Возможно такое сделать? Очень нужно!
Прикрепленный файл доп кнопки.png


Здравствуйте, что-то подобное можно реализовать. Например, можно добавлять эти ссылки в описании товара. Или переделать блок сопутствующие товары (если он Вам не нужен): переименовать его в "другие модификации товара" и настроить отображение этого блока так, как нужно Вам.

#3 Ильяc

Ильяc

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

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

Отправлено 27 Январь 2016 - 23:32

Просмотр сообщенияЮля123 (27 Январь 2016 - 18:44) писал:

Здравствуйте, что-то подобное можно реализовать. Например, можно добавлять эти ссылки в описании товара. Или переделать блок сопутствующие товары (если он Вам не нужен): переименовать его в "другие модификации товара" и настроить отображение этого блока так, как нужно Вам.
Как я на картинке показал не получиться сделать? Человек сразу увидит все варианты и выберет, что ему нужно. Блок сопутствующие товары тоже нужен, и еще он находится внизу, опять неудобно получается

#4 Vaccina

Vaccina

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

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

Отправлено 28 Январь 2016 - 03:29

Вам необходимо изменить тип выбора модификации, чтобы он был не выпадающим списком, а как у вас на примере, инструкция по реализации:
http://forum.storela...240#entry214519

#5 Ильяc

Ильяc

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

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

Отправлено 28 Январь 2016 - 09:46

Пожалуйста если не трудно, подскажите как на моем сайте это сделать? подробнее. У меня не получилось

#6 Юля123

Юля123

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

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

Отправлено 28 Январь 2016 - 10:02

Просмотр сообщенияИльяc (28 Январь 2016 - 09:46) писал:

Пожалуйста если не трудно, подскажите как на моем сайте это сделать? подробнее. У меня не получилось


Попробуйте в шаблоне Товар найти код:

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


#7 Ильяc

Ильяc

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

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

Отправлено 28 Январь 2016 - 11:06

Просмотр сообщенияЮля123 (28 Январь 2016 - 10:02) писал:

Попробуйте в шаблоне Товар найти код:

		 {% FOR goods_modifications_properties %}
		 <div class="goodsDataMainModificationsBlockProperty">
			 <!-- Выдаем списки со свойствами для модификаций, чтобы определить какую модификацию товара хочет пользователь -->
			 {% FOR values %}
			 <!-- Если это первый элемент в списке -->
			 {% IF goods_modifications_properties.values.first %}
				 <strong>{goods_modifications_properties.NAME}:</strong>
				 <select name="form[properties][]" class="selectBox product-custom-option selectBox-dropdown">
			 {% 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 %}
В этом товаре http://mobilefanat.r...6p-32-gb-silver я поставил черный телефон в наличии, но при выбору цвет "черный" кнопка "предзаказ" не меняется на "В корзину" как исправить? Можно сделать так чтобы при выборе цвета, страница попадала на другой товар с этими хар-ками?

Сообщение отредактировал Ильяc: 28 Январь 2016 - 11:08


#8 Ирина345

Ирина345

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

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

Отправлено 28 Январь 2016 - 14:46

Просмотр сообщенияИльяc (28 Январь 2016 - 11:06) писал:

В этом товаре http://mobilefanat.r...6p-32-gb-silver я поставил черный телефон в наличии, но при выбору цвет "черный" кнопка "предзаказ" не меняется на "В корзину" как исправить? Можно сделать так чтобы при выборе цвета, страница попадала на другой товар с этими хар-ками?
Здравствуйте, найдите в файле main.js
// Функция собирает свойства в строку, для определения модификации товара
  function getSlugFromGoodsDataFormModificationsProperties(obj) {
	var properties = new Array();
	$(obj).each(function(i){
	  properties[i] = parseInt($(this).val());
	});
	return properties.sort(function(a,B){return a - b}).join('_');
  }
  
  var
	// Запоминаем поля выбора свойств, для ускорения работы со значениями свойств
	goodsDataProperties = $('form.goodsDataForm select[name="form[properties][]"]'),
   
	// Запоминаем блоки с информацией по модификациям, для ускорения работы
	goodsDataModifications = $('div.goodsDataMainModificationsList');
 
  // Обновляет возможность выбора свойств модификации, для отключения возможности выбора по характеристикам модификации которой не существует.
  function updateVisibility (y) {
	// Проверяем в каждом соседнем поле выбора модификаций, возможно ли подобрать модификацию для указанных свойств
	goodsDataProperties.each(function(j){
	  // Если мы сравниваем значения свойства не с самим собой, а с другим списком значений свойств
	  if( j != y ) {
		// Проходим по всем значениям текущего свойства модификации товара
		$(this).find('option').each(function(){
		  // Записываем временный массив свойств, которые будем использовать для проверки существования модификации
		  var checkProperties = new Array();
		  $(goodsDataProperties).each(function(i){
			checkProperties[i] = parseInt($(this).val());
		  });
		  // Пытаемся найти модификацию соответствующую выбранным значениям свойств
		  checkProperties[j] = parseInt($(this).attr('value'));
		  // Собираем хэш определяющий модификацию по свойствам
		  slug = checkProperties.sort(function(a,B){return a - b}).join('_');
		  // Ищем модификацию по всем выбранным значениям свойств товара. Если модификации нет в возможном выборе, отмечаем потенциальное значение выбора как не доступное для выбора, т.к. такой модификации нет.
		  if(!goodsDataModifications.filter('[rel="'+slug+'"]').length) {
		   $(this).attr('disabled', true);
		  // Если выбрав данное значение свойства товара можно подобрать модификацию, то выделяем вариант выбора как доступный.
		  } else {
			$(this).attr('disabled', false);
		  }
		});
	  }
	});
  }
  // Обновляем возможность выбора модификации товара по свойствам. Для тех свойств, выбор по которым не возможен, отключаем такую возможность.
  // Проверяем возможность выбора на всех полях кроме первого, чтобы отключить во всех остальных варианты, которые не возможно выбрать
  updateVisibility (0);
  // Проверяем возможность выбора на всех полях кроме второго, чтобы в первом поле так же отключилась возможность выбора не существующих модификаций
  updateVisibility (1);
 
  //var goodsDataProperties = $('.goodsDataForm [name="form[properties][]"]');
 
  // Изменение цены товара при изменении у товара свойства для модификации
  goodsDataProperties.each(function(){
	$(this).change(function(){
	  var slug = getSlugFromGoodsDataFormModificationsProperties(goodsDataProperties),
		  modificationBlock			 = $('.goodsDataMainModificationsList[rel="'+slug+'"]'),
		  modificationId				= parseInt(modificationBlock.find('[name="id"]').val()),
		  modificationArtNumber		 = modificationBlock.find('[name="art_number"]').val(),
		  modificationPriceNow		  = 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'),
		  goodsArtNumberBlock		   = $('.goodsDataMainModificationArtNumber'),
		  goodsArtNumber				= goodsArtNumberBlock.find('span');
		  goodsCompareAddButton		 = $('.goodsDataCompareButton.add');
		  goodsCompareDeleteButton	  = $('.goodsDataCompareButton.delete');
		  goodsModDescriptionBlock	  = $('.goodsDataMainModificationsDescriptionBlock');
	  
	   // Изменяем данные товара для выбранных параметров. Если нашлась выбранная модификация
	   if(modificationBlock.length) {
		 // Цена товара
		 goodsPriceNow.html('<span class="price">' + modificationPriceNow + '</span>');
		 
		 // Старая цена товара
		 if(modificationPriceOld>modificationPriceNow) {
		  goodsPriceOld.html('<span class="price">' + modificationPriceOld + '</span>');
		 } else {
		   goodsPriceOld.html('');
		 }
		
		 // Есть ли товар есть в наличии
								 if(modificationRestValue>0) {
								 goodsAvailableTrue.show();
								 goodsAvailableFalse.hide();
								 $('#button-cart').html('В корзину');
								 // Если товара нет в наличии
								 } else {
								 goodsAvailableTrue.hide();
								 goodsAvailableFalse.show();
								 $('#button-cart').html('Уведомить меня');
								 }
		 // Если товар есть в списке сравнения
		 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,B){return a - B}).join('_');
  }

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

  // Обновляет возможность выбора свойств модификации, для отключения возможности выбора по характеристикам модификации которой не существует.
  function updateVisibility (y) {
								// Проверяем в каждом соседнем поле выбора модификаций, возможно ли подобрать модификацию для указанных свойств
								goodsDataProperties.each(function(j){
								  // Если мы сравниваем значения свойства не с самим собой, а с другим списком значений свойств
								  if( j != y ) {
																// Проходим по всем значениям текущего свойства модификации товара
																$(this).find('input[name="form[properties][]"]').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			 = $('.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'),
		goodsAvailableQty			 = $('.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();
		// Если товара нет в наличии
		} else {
		  goodsAvailableTrue.hide();
		  goodsAvailableFalse.show();
		  goodsAvailableAddCart.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);
																 window.location.hash = '?modification='+modificationId;
								   } else {
																 // Отправим запись об ошибке на сервер
																 sendError('no modification by slug '+slug);
																 alert('К сожалению сейчас не получается подобрать модификацию соответствующую выбранным параметрам.');
								   }
								
								   // Обновляем возможность выбора другой модификации для текущих значений свойств модификации товара.
								   updateVisibility(y);
								});
  });


#9 Ильяc

Ильяc

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

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

Отправлено 28 Январь 2016 - 17:19

Просмотр сообщенияИрина345 (28 Январь 2016 - 14:46) писал:

Здравствуйте, найдите в файле main.js
// Функция собирает свойства в строку, для определения модификации товара
function getSlugFromGoodsDataFormModificationsProperties(obj) {
var properties = new Array();
$(obj).each(function(i){
	 properties[i] = parseInt($(this).val());
});
return properties.sort(function(a,B){return a - b}).join('_');
}

var
// Запоминаем поля выбора свойств, для ускорения работы со значениями свойств
goodsDataProperties = $('form.goodsDataForm select[name="form[properties][]"]'),

// Запоминаем блоки с информацией по модификациям, для ускорения работы
goodsDataModifications = $('div.goodsDataMainModificationsList');

// Обновляет возможность выбора свойств модификации, для отключения возможности выбора по характеристикам модификации которой не существует.
function updateVisibility (y) {
// Проверяем в каждом соседнем поле выбора модификаций, возможно ли подобрать модификацию для указанных свойств
goodsDataProperties.each(function(j){
	 // Если мы сравниваем значения свойства не с самим собой, а с другим списком значений свойств
	 if( j != y ) {
	 // Проходим по всем значениям текущего свойства модификации товара
	 $(this).find('option').each(function(){
		 // Записываем временный массив свойств, которые будем использовать для проверки существования модификации
		 var checkProperties = new Array();
		 $(goodsDataProperties).each(function(i){
		 checkProperties[i] = parseInt($(this).val());
		 });
		 // Пытаемся найти модификацию соответствующую выбранным значениям свойств
		 checkProperties[j] = parseInt($(this).attr('value'));
		 // Собираем хэш определяющий модификацию по свойствам
		 slug = checkProperties.sort(function(a,B){return a - b}).join('_');
		 // Ищем модификацию по всем выбранным значениям свойств товара. Если модификации нет в возможном выборе, отмечаем потенциальное значение выбора как не доступное для выбора, т.к. такой модификации нет.
		 if(!goodsDataModifications.filter('[rel="'+slug+'"]').length) {
		 $(this).attr('disabled', true);
		 // Если выбрав данное значение свойства товара можно подобрать модификацию, то выделяем вариант выбора как доступный.
		 } else {
		 $(this).attr('disabled', false);
		 }
	 });
	 }
});
}
// Обновляем возможность выбора модификации товара по свойствам. Для тех свойств, выбор по которым не возможен, отключаем такую возможность.
// Проверяем возможность выбора на всех полях кроме первого, чтобы отключить во всех остальных варианты, которые не возможно выбрать
updateVisibility (0);
// Проверяем возможность выбора на всех полях кроме второго, чтобы в первом поле так же отключилась возможность выбора не существующих модификаций
updateVisibility (1);

//var goodsDataProperties = $('.goodsDataForm [name="form[properties][]"]');

// Изменение цены товара при изменении у товара свойства для модификации
goodsDataProperties.each(function(){
$(this).change(function(){
	 var slug = getSlugFromGoodsDataFormModificationsProperties(goodsDataProperties),
		 modificationBlock			 = $('.goodsDataMainModificationsList[rel="'+slug+'"]'),
		 modificationId			 = parseInt(modificationBlock.find('[name="id"]').val()),
		 modificationArtNumber		 = modificationBlock.find('[name="art_number"]').val(),
		 modificationPriceNow		 = 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'),
		 goodsArtNumberBlock		 = $('.goodsDataMainModificationArtNumber'),
		 goodsArtNumber			 = goodsArtNumberBlock.find('span');
		 goodsCompareAddButton		 = $('.goodsDataCompareButton.add');
		 goodsCompareDeleteButton	 = $('.goodsDataCompareButton.delete');
		 goodsModDescriptionBlock	 = $('.goodsDataMainModificationsDescriptionBlock');
	
	 // Изменяем данные товара для выбранных параметров. Если нашлась выбранная модификация
	 if(modificationBlock.length) {
		 // Цена товара
		 goodsPriceNow.html('<span class="price">' + modificationPriceNow + '</span>');
		
		 // Старая цена товара
		 if(modificationPriceOld>modificationPriceNow) {
		 goodsPriceOld.html('<span class="price">' + modificationPriceOld + '</span>');
		 } else {
		 goodsPriceOld.html('');
		 }
		
		 // Есть ли товар есть в наличии
								 if(modificationRestValue>0) {
								 goodsAvailableTrue.show();
								 goodsAvailableFalse.hide();
								 $('#button-cart').html('В корзину');
								 // Если товара нет в наличии
								 } else {
								 goodsAvailableTrue.hide();
								 goodsAvailableFalse.show();
								 $('#button-cart').html('Уведомить меня');
								 }
		 // Если товар есть в списке сравнения
		 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,B){return a - B}).join('_');
}

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

// Обновляет возможность выбора свойств модификации, для отключения возможности выбора по характеристикам модификации которой не существует.
function updateVisibility (y) {
							 // Проверяем в каждом соседнем поле выбора модификаций, возможно ли подобрать модификацию для указанных свойств
							 goodsDataProperties.each(function(j){
								 // Если мы сравниваем значения свойства не с самим собой, а с другим списком значений свойств
								 if( j != y ) {
															 // Проходим по всем значениям текущего свойства модификации товара
															 $(this).find('input[name="form[properties][]"]').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			 = $('.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'),
	 goodsAvailableQty			 = $('.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();
	 // Если товара нет в наличии
	 } else {
		 goodsAvailableTrue.hide();
		 goodsAvailableFalse.show();
		 goodsAvailableAddCart.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);
																 window.location.hash = '?modification='+modificationId;
								 } else {
																 // Отправим запись об ошибке на сервер
																 sendError('no modification by slug '+slug);
																 alert('К сожалению сейчас не получается подобрать модификацию соответствующую выбранным параметрам.');
								 }
								
								 // Обновляем возможность выбора другой модификации для текущих значений свойств модификации товара.
								 updateVisibility(y);
							 });
});
Вот что происходит
2 кнопки.png

#10 Ильяc

Ильяc

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

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

Отправлено 28 Январь 2016 - 19:34

Подскажите как можно стрелки в хлебных крошках чуть поднять, что бы по середине были?
Screenshot_20160128-191012.png

#11 Dars

Dars

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

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

Отправлено 28 Январь 2016 - 19:41

Просмотр сообщенияИльяc (28 Январь 2016 - 19:34) писал:

Подскажите как можно стрелки в хлебных крошках чуть поднять, что бы по середине были?
Прикрепленный файл Screenshot_20160128-191012.png
Здравствуйте!
В main.css найдите код:

.breadcrumbs li {display: inline-block;padding: 0 1px 3px 11px;background: url("{ASSETS_IMAGES_PATH}arrow-bread.png") no-repeat left center;color: #999999;font-size: 12px;}

и замените его на:

.breadcrumbs li {display: inline-block;padding: 0 1px 3px 11px;background: url("{ASSETS_IMAGES_PATH}arrow-bread.png") no-repeat left 8px;color: #999999;font-size: 12px;}


#12 Ильяc

Ильяc

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

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

Отправлено 03 Февраль 2016 - 15:39

Здравствуйте! Можно исправить данный пункт на который все время жалуется PageSpeed, возможно это сделать и если да то как?:
"Используйте кеш браузера"
PageSpeed Insights.png

#13 Юля123

Юля123

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

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

Отправлено 03 Февраль 2016 - 16:57

Здравствуйте, это не является ошибкой и не ухудшает работу Вашего сайта. Как правило, браузеры постоянно используют кэш. В частности, там хранятся картинки, скрипты и стили css. Дата добавляется для того, чтобы через какой-то определенный период времени из кеша эти данные удалялись. Соответственно по истечении этого  срока сайт эти файлы будет загружать заново (т.е. дольше). Проверяйте, пожалуйста, свой сайт в более популярных источниках.

#14 Ильяc

Ильяc

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

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

Отправлено 13 Февраль 2016 - 19:58

Подскажите как сделать чтобы вкладка отзывы открывалась в новой вкладке?
Магазин Mobilefanat.ru   продаем электронику  сотовые телефоны  умные гаджеты и много новой техники. Низкие цены и доставка по всей России. Гарантия..png

#15 MikDark

MikDark

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

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

Отправлено 13 Февраль 2016 - 20:12

Просмотр сообщенияИльяc (13 Февраль 2016 - 19:58) писал:


Здравствуйте. В шаблоне HTML найдите код:
{% FOR menu %}
						{% FOR header %}
						  {% FOR links %}
							<li><a href="{menu.header.links.URL}" {% IF menu.header.links.SELECTED %}class="selected"{%ENDIF%} {% IF menu.header.links.TITLE %}title="{menu.header.links.TITLE}"{% ENDIF %}>{menu.header.links.NAME}</a></li>
						  {% ENDFOR %}
						{% ENDFOR %}
					  {% ENDFOR %}

и замените его на:
{% FOR menu %}
						{% FOR header %}
						  {% FOR links %}
							<li><a href="{menu.header.links.URL}" {% IF menu.header.links.SELECTED %}class="selected"{%ENDIF%} {% IF menu.header.links.TITLE %}title="{menu.header.links.TITLE}"{% ENDIF %} {% IF menu.header.links.NAME = Отзывы%}target="_blank"{%ENDIF%}>{menu.header.links.NAME}</a></li>
						  {% ENDFOR %}
						{% ENDFOR %}
					  {% ENDFOR %}


#16 Ильяc

Ильяc

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

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

Отправлено 14 Февраль 2016 - 13:32

Привет. Скажите как сделать как на картинке 2 полосы сверху и снизу меню? Чтобы блок меню не сливался с общим белым фоном, когда я его на белый цвет поменяю
2221.png 2221.png

#17 MikDark

MikDark

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

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

Отправлено 14 Февраль 2016 - 13:38

Просмотр сообщенияИльяc (14 Февраль 2016 - 13:32) писал:

Привет. Скажите как сделать как на картинке 2 полосы сверху и снизу меню? Чтобы блок меню не сливался с общим белым фоном, когда я его на белый цвет поменяю
Прикрепленный файл 2221.pngПрикрепленный файл 2221.png

В шаблоне main.css найдите код:
#menu {
	position: relative;
	margin: 0 0;
	max-height: 80px;
}

замените его на:

#menu {
	position: relative;
	margin: 0 0;
	max-height: 80px;
	border-top: 3px solid #F10A0A;
	border-bottom: 3px solid #F10A0A;
}


#18 Ильяc

Ильяc

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

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

Отправлено 14 Февраль 2016 - 14:36

Просмотр сообщенияMikDark (14 Февраль 2016 - 13:38) писал:

В шаблоне main.css найдите код:
#menu {
position: relative;
margin: 0 0;
max-height: 80px;
}

замените его на:

#menu {
position: relative;
margin: 0 0;
max-height: 80px;
border-top: 3px solid #F10A0A;
border-bottom: 3px solid #F10A0A;
}

Только верхняя полоса видна, нижнюю не видно
333.png

#19 MikDark

MikDark

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

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

Отправлено 14 Февраль 2016 - 14:50

Просмотр сообщенияИльяc (14 Февраль 2016 - 14:36) писал:

Только верхняя полоса видна, нижнюю не видно
Прикрепленный файл 333.png

В main.css замените код:
#menu {
	position: relative;
	margin: 0 0;
	max-height: 80px;
	border-top: 1px solid #ebebeb;
	border-bottom: 1px solid #ebebeb;
}

на
#menu {
	position: relative;
	margin: 0 0;
	max-height: 82px;
	border-top: 1px solid #ebebeb;
	border-bottom: 1px solid #ebebeb;
}


#20 Ильяc

Ильяc

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

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

Отправлено 14 Февраль 2016 - 15:04

Просмотр сообщенияMikDark (14 Февраль 2016 - 14:50) писал:

В main.css замените код:
#menu {
position: relative;
margin: 0 0;
max-height: 80px;
border-top: 1px solid #ebebeb;
border-bottom: 1px solid #ebebeb;
}

на
#menu {
position: relative;
margin: 0 0;
max-height: 82px;
border-top: 1px solid #ebebeb;
border-bottom: 1px solid #ebebeb;
}

Спасибо! пока все по плану)
Теперь подскажите еще как иконки корзина и сравнение темными сделать? Пытался картинку другую поставить но пока не получилось
корзина и сравнение.png




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

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