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


Модификации


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

#1 bartjohn

bartjohn

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

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

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

Добрый день! Нужно сделать чтобы в поле "модификации" отображалась не минимальная цена товара, а "Базовая". Сейчас наоборот отображается самая минимальная цена установленного товара по другой модификации. Спасибо!

И можно ли сделать, чтобы было не выпадающее меню. А просто квадратики с галочкой. Спасибо!

#2 Юля123

Юля123

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

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

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

Просмотр сообщенияbartjohn (29 Январь 2016 - 10:06) писал:

Добрый день! Нужно сделать чтобы в поле "модификации" отображалась не минимальная цена товара, а "Базовая". Сейчас наоборот отображается самая минимальная цена установленного товара по другой модификации. Спасибо!

И можно ли сделать, чтобы было не выпадающее меню. А просто квадратики с галочкой. Спасибо!

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


1) К сожалению, так сделать нельзя.


2) Воспользуйтесь вот этой инструкцией

#3 bartjohn

bartjohn

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

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

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

Ладно, фиг сними с "галками", тогда с ценой вопрос. у меня шаблон не стандартный, прошу написать код если не сложно)
Просто реально времени нет, куча заказов, сам бы разобрался. Спасибо!

#4 Юля123

Юля123

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

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

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

Просмотр сообщенияbartjohn (29 Январь 2016 - 17:08) писал:

Ладно, фиг сними с "галками", тогда с ценой вопрос. у меня шаблон не стандартный, прошу написать код если не сложно)
Просто реально времени нет, куча заказов, сам бы разобрался. Спасибо!

К сожалению, тут наоборот, с ценой так сделать не получится. А вот с "галками", в шаблоне Товар найдите код:

							{% FOR goods_modifications_properties %}
							  <td class="goodsDataMainModificationsBlockProperty">
								<!-- Выдаем списки со свойствами для модификаций, чтобы определить какую модификацию товара хочет пользователь -->
								{% FOR values %}
									<!-- Если это первый элемент в списке -->
									{% IF goods_modifications_properties.values.first %}
									  <strong style="font-size:14px;">{goods_modifications_properties.NAME}:</strong><br />
									  <select name="form[properties][]" style=" border-radius:3px;
-webkit-border-radius:3px;
-moz-border-radius:3px;
-khtml-border-radius:3px;">
									{% 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 %}
							  </td>
							  {goods_modifications_properties.index | is_divided("2","</tr><tr>","")}
							{% 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 %}


#5 bartjohn

bartjohn

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

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

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

Не помогает :)

Изображение

#6 Юля123

Юля123

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

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

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

Просмотр сообщенияbartjohn (29 Январь 2016 - 17:33) писал:

Не помогает :)

Изображение


У Вас немного неточно Выполнена инструкция. Попробуйте повторить ее еще раз. Забыли удалить вот эти строки:

														  </td>
														  {goods_modifications_properties.index | is_divided("2","</tr><tr>","")}
														{% ENDFOR %}


#7 bartjohn

bartjohn

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

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

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

Ага, получилось, только цена не меняется, при нажатии на "точку" <_<

#8 Dars

Dars

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

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

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

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

Ага, получилось, только цена не меняется, при нажатии на "точку" <_<
Здравствуйте!
Инструкция для вашего шаблона будет выглядеть так - в шаблоне "Товар" код:

{% FOR goods_modifications_properties %}
														  <td class="goodsDataMainModificationsBlockProperty">
																<!-- Выдаем списки со свойствами для модификаций, чтобы определить какую модификацию товара хочет пользователь -->
																{% FOR values %}
																		<!-- Если это первый элемент в списке -->
																		{% IF goods_modifications_properties.values.first %}
																		  <strong style="font-size:14px;">{goods_modifications_properties.NAME}:</strong><br />
																		  <select name="form[properties][]" style=" border-radius:3px;
-webkit-border-radius:3px;
-moz-border-radius:3px;
-khtml-border-radius:3px;">
																		{% 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 %}
														  </td>
														  {goods_modifications_properties.index | is_divided("2","</tr><tr>","")}
														{% ENDFOR %}

замените на код:

{% FOR goods_modifications_properties %}
												<td class="goodsDataMainModificationsBlockProperty">
																<!-- Выдаем списки со свойствами для модификаций, чтобы определить какую модификацию товара хочет пользователь -->
												{% FOR values %}
												  <!-- Если это первый элемент в списке -->
																 {% IF goods_modifications_properties.values.first %}
																				   <span class="goodsDataMainModificationsRadio">
																					 <strong>{goods_modifications_properties.NAME}:</strong><br />
																 {% ENDIF %}
																					  <input type="radio" name="form[properties][]" value="{goods_modifications_properties.values.ID}" {% IF goods_modifications_properties.values.SELECTED %}checked="checked"{% ENDIF %} />   {goods_modifications_properties.values.NAME} <br />

																 {% IF goods_modifications_properties.values.last %}
																								</span>
																 {% ENDIF %}
																  {% ENDFOR %}
												 </td>
				{goods_modifications_properties.index | is_divided("2","</tr><tr>","")}
{% ENDFOR %}

Далее в main.js код:

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


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

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


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

  // Изменение цены товара при изменении у товара свойства для модификации
  goodsDataProperties.each(function(y){
	$(this).change(function(){
	  var slug = getSlugFromGoodsDataFormModificationsProperties(goodsDataProperties),
		  modificationBlock			 = goodsDataModifications.filter('[rel="'+slug+'"]'),
		  modificationId				= parseInt(modificationBlock.find('[name="id"]').val()),
		  modificationArtNumber		 = modificationBlock.find('[name="art_number"]').val(),
		  modificationPriceNow		  = parseFloat(modificationBlock.find('[name="price_now"]').val()),
		  modificationPriceNowFormated  = modificationBlock.find('.price_now_formated').html(),
		  modificationPriceOld		  = parseFloat(modificationBlock.find('[name="price_old"]').val()),
		  modificationPriceOldFormated  = modificationBlock.find('.price_old_formated').html(),
		  modificationRestValue		 = parseFloat(modificationBlock.find('[name="rest_value"]').val()),
		  modificationDescription	   = modificationBlock.find('.description').html(),
		  modificationMeasureId		 = parseInt(modificationBlock.find('[name="measure_id"]').val()),
		  modificationMeasureName	   = modificationBlock.find('[name="measure_name"]').val(),
		  modificationMeasureDesc	   = modificationBlock.find('[name="measure_desc"]').val(),
		  modificationMeasurePrecision  = modificationBlock.find('[name="measure_precision"]').val(),
		  modificationIsHasInCompareList= modificationBlock.find('[name="is_has_in_compare_list"]').val(),
		  goodsModificationId		   = $('.goodsDataMainModificationId'),
		  goodsPriceNow				 = $('.goodsDataMainModificationPriceNow'),
		  goodsPriceOld				 = $('.goodsDataMainModificationPriceOld'),
		  goodsAvailable				= $('.goodsDataMainModificationAvailable'),
		  goodsAvailableTrue			= goodsAvailable.find('.available-true'),
		  goodsAvailableFalse		   = goodsAvailable.find('.available-false'),
		  goodsArtNumberBlock		   = $('.goodsDataMainModificationArtNumber'),
		  goodsArtNumber				= goodsArtNumberBlock.find('span');
		  goodsCompareAddButton		 = $('.goodsDataCompareButton.add');
		  goodsCompareDeleteButton	  = $('.goodsDataCompareButton.delete');
		  goodsModDescriptionBlock	  = $('.goodsDataMainModificationsDescriptionBlock');


	   // Изменяем данные товара для выбранных параметров. Если нашлась выбранная модификация
	   if(modificationBlock.length) {
		 // Цена товара
		 goodsPriceNow.html(modificationPriceNowFormated);

		 // Старая цена товара
		 if(modificationPriceOld>modificationPriceNow) {
		  goodsPriceOld.html(modificationPriceOldFormated);
		 } else {
		   goodsPriceOld.html('');
		 }

		 // Есть ли товар есть в наличии
		 if(modificationRestValue>0) {
		   goodsAvailableTrue.show();
		   goodsAvailableFalse.hide();
		 // Если товара нет в наличии
		 } else {
		   goodsAvailableTrue.hide();
		   goodsAvailableFalse.show();
		 }
		 // Если товар есть в списке сравнения
		 if(modificationIsHasInCompareList>0) {
		   goodsCompareAddButton.hide();
		   goodsCompareDeleteButton.show();
		 // Если товара нет в списке сравнения
		 } else {
		   goodsCompareAddButton.show();
		   goodsCompareDeleteButton.hide();
		 }

		 // Покажем артикул модификации товара, если он указан
		 if(modificationArtNumber.length>0) {
		   goodsArtNumberBlock.show();
		   goodsArtNumber.html(modificationArtNumber);
		 // Скроем артикул модификации товара, если он не указан
		 } else {
		   goodsArtNumberBlock.hide();
		   goodsArtNumber.html('');
		 }
		 // Описание модификации товара. Покажем если оно есть, спрячем если его у модификации нет
		 if(modificationDescription.length > 0) {
		   goodsModDescriptionBlock.show().html('<div>' + modificationDescription + '</div>');
		 } else {
		   goodsModDescriptionBlock.hide().html();
		 }


		 // Идентификатор товарной модификации
		 goodsModificationId.val(modificationId);
	   } else {
		 // Отправим запись об ошибке на сервер
		 sendError('no modification by slug '+slug);
		 alert('К сожалению сейчас не получается подобрать модификацию соответствующую выбранным параметрам.');
	   }

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

замените на код:


// Функция собирает свойства в строку, для определения модификации товара
  function getSlugFromGoodsDataFormModificationsProperties(obj) {
				var properties = new Array();
				var reset_arr = new Array();
				$(obj).each(function(i){
				  if($(this).is(':checked')){
								properties[i] = parseInt($(this).val());}
				});
				for(var i in properties) {
				 if(properties[i]) {
				  reset_arr.push(properties[i]);
				 }
				}
				return reset_arr.sort(function(a,j){return a - j}).join('_');
  }


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

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


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

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

  // Изменение цены товара при изменении у товара свойства для модификации
  goodsDataProperties.each(function(){
		$(this).click(function(){
	  var slug = getSlugFromGoodsDataFormModificationsProperties(goodsDataProperties),
		  modificationBlock			 = goodsDataModifications.filter('[rel="'+slug+'"]'),
		  modificationId				= parseInt(modificationBlock.find('[name="id"]').val()),
		  modificationArtNumber		 = modificationBlock.find('[name="art_number"]').val(),
		  modificationPriceNow		  = parseFloat(modificationBlock.find('[name="price_now"]').val()),
		  modificationPriceNowFormated  = modificationBlock.find('.price_now_formated').html(),
		  modificationPriceOld		  = parseFloat(modificationBlock.find('[name="price_old"]').val()),
		  modificationPriceOldFormated  = modificationBlock.find('.price_old_formated').html(),
		  modificationRestValue		 = parseFloat(modificationBlock.find('[name="rest_value"]').val()),
		  modificationDescription	   = modificationBlock.find('.description').html(),
		  modificationMeasureId		 = parseInt(modificationBlock.find('[name="measure_id"]').val()),
		  modificationMeasureName	   = modificationBlock.find('[name="measure_name"]').val(),
		  modificationMeasureDesc	   = modificationBlock.find('[name="measure_desc"]').val(),
		  modificationMeasurePrecision  = modificationBlock.find('[name="measure_precision"]').val(),
		  modificationIsHasInCompareList= modificationBlock.find('[name="is_has_in_compare_list"]').val(),
		  goodsModificationId		   = $('.goodsDataMainModificationId'),
		  goodsPriceNow				 = $('.goodsDataMainModificationPriceNow'),
		  goodsPriceOld				 = $('.goodsDataMainModificationPriceOld'),
		  goodsAvailable				= $('.goodsDataMainModificationAvailable'),
		  goodsAvailableTrue			= goodsAvailable.find('.available-true'),
		  goodsAvailableFalse		   = goodsAvailable.find('.available-false'),
		  goodsArtNumberBlock		   = $('.goodsDataMainModificationArtNumber'),
		  goodsArtNumber				= goodsArtNumberBlock.find('span');
		  goodsCompareAddButton		 = $('.goodsDataCompareButton.add');
		  goodsCompareDeleteButton	  = $('.goodsDataCompareButton.delete');
		  goodsModDescriptionBlock	  = $('.goodsDataMainModificationsDescriptionBlock');


	   // Изменяем данные товара для выбранных параметров. Если нашлась выбранная модификация
	   if(modificationBlock.length) {
		 // Цена товара
		 goodsPriceNow.html(modificationPriceNowFormated);

		 // Старая цена товара
		 if(modificationPriceOld>modificationPriceNow) {
		  goodsPriceOld.html(modificationPriceOldFormated);
		 } else {
		   goodsPriceOld.html('');
		 }

		 // Есть ли товар есть в наличии
		 if(modificationRestValue>0) {
		   goodsAvailableTrue.show();
		   goodsAvailableFalse.hide();
		 // Если товара нет в наличии
		 } else {
		   goodsAvailableTrue.hide();
		   goodsAvailableFalse.show();
		 }
		 // Если товар есть в списке сравнения
		 if(modificationIsHasInCompareList>0) {
		   goodsCompareAddButton.hide();
		   goodsCompareDeleteButton.show();
		 // Если товара нет в списке сравнения
		 } else {
		   goodsCompareAddButton.show();
		   goodsCompareDeleteButton.hide();
		 }

		 // Покажем артикул модификации товара, если он указан
		 if(modificationArtNumber.length>0) {
		   goodsArtNumberBlock.show();
		   goodsArtNumber.html(modificationArtNumber);
		 // Скроем артикул модификации товара, если он не указан
		 } else {
		   goodsArtNumberBlock.hide();
		   goodsArtNumber.html('');
		 }
		 // Описание модификации товара. Покажем если оно есть, спрячем если его у модификации нет
		 if(modificationDescription.length > 0) {
		   goodsModDescriptionBlock.show().html('<div>' + modificationDescription + '</div>');
		 } else {
		   goodsModDescriptionBlock.hide().html();
		 }


		 // Идентификатор товарной модификации
		 goodsModificationId.val(modificationId);
	   } else {
		 // Отправим запись об ошибке на сервер
		 sendError('no modification by slug '+slug);
		 alert('К сожалению сейчас не получается подобрать модификацию соответствующую выбранным параметрам.');
	   }
	});
  });





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

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