Интерактивное Изменение Свойств Товара
#1
Отправлено 17 Май 2012 - 00:55
И попутный вопрос - каждый товар будет иметь по несколько цветов (более 20) и скорей всего типов. Можно ли как-то скопом добавлять все цвета и типы к группе товаров, чтобы не писать к каждому одно и то же?
#2
Отправлено 17 Май 2012 - 11:58
kingoff (17 Май 2012 - 00:55) писал:
kingoff (17 Май 2012 - 00:55) писал:
#3
Отправлено 30 Май 2012 - 21:48
Для начала в файле "товар" пробую изменить среднее изображение. Вместо этого:
<img class="cornerAll withBorder" src="{GOODS_IMAGE_MEDIUM}" alt="{GOODS_NAME}" />вставляю это:
{GOODS_MOD_DESCRIPTION}изменить основной рисунок получается, на тот что верхний в списке свойств, но при смене свойства рисунок не меняется.
Что отвечает за смену изображения? Я пробовал вставлять класс "goodsDataMainModificationsDescriptionBlock" в описание свойства, может в нем зарыто - не выходит.
Подскажите куда копнуть.
Если нужно вот ссылка
#4
Отправлено 31 Май 2012 - 23:39
// Функция собирает свойства в строку, для определения модификации товара 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); // Изменение цены товара при изменении у товара свойства для модификации 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); window.location.hash = '?modification='+modificationId; } else { // Отправим запись об ошибке на сервер sendError('no modification by slug '+slug); alert('К сожалению сейчас не получается подобрать модификацию соответствующую выбранным параметрам.'); } // Обновляем возможность выбора другой модификации для текущих значений свойств модификации товара. updateVisibility(y); }); });
а за смену изображения
// Изменение главного изображения товара при нажатии на миниатюру $('.goodsDataMainImagesIcon a').click(function(){ // Путь к среднему изображению var MediumImageUrl = $(this).find('img').attr('rel'), // Главное изображение, в которое будем вставлять новое изображение MainImage = $('.goodsDataMainImage img'), // В этом объекте хранится идентификатор картинки главного изображения для коректной работы галереи изображений MainImageIdObject = $('.goodsDataMainImage input'), // Получаем идентификатор этого изображения из соседнего input поля GoodsImageIconId = $(this).parent().find('input').attr("rel"); // Изменяем главное изображение MainImage.attr('src',MediumImageUrl); // Изменяем идентификатор главного изображения MainImageIdObject.attr("rel",GoodsImageIconId); return false; });
#5
Отправлено 05 Июнь 2013 - 19:20
И второй вопрос: как сделать так чтобы надпись "базовая модификация:" не писалась, при случае когда действительно базовая комплектация? Например вот здесь http://cosmetikova.ru/goods/Malina-199
#6
Отправлено 06 Июнь 2013 - 10:44
Панель администратора, "Сайт"->"Редактор тем".
В файле "Товар".
Найти код:
<!-- Артикул, если указан --> <div {% IFNOT GOODS_MOD_ART_NUMBER %}style="display:none;"{% ENDIF %}> Артикул: <span>{GOODS_MOD_ART_NUMBER}</span> </div> </div> </tr> <!-- END Блок описания товара. Показываем его есть описание товара --> <tr> <td class="goodsDataMainModificationDataBlock"> <!-- По этому значению производится заказ товара --> <input type="hidden" name="form[goods_mod_id]" value="{GOODS_MOD_ID}" class="goodsDataMainModificationId" /> <!-- Цена сейчас --> <div style="padding-bottom: 0px;"> <span class="price" style="padding-bottom: 5px;" title="Текущая цена за «{GOODS_NAME}»"> <snap style="font-size: 14px; font-family: Verdana, san-serif; font-weight: bold; color:#000;">{GOODS_MOD_PRICE_NOW | money_format}</snap> </span> <!-- Старая цена --> <!-- Если на товар действует скидка --> {% IF GOODS_MOD_PRICE_NOW_WITHOUT_DISCOUNT>GOODS_MOD_PRICE_NOW %} <span class="old-price" style="padding-left:5px;"> <span class="price" title="Мы снизили цену на «{GOODS_NAME}». Старая цена - {GOODS_MOD_PRICE_NOW_WITHOUT_DISCOUNT} руб."> <snap style="font-size: 14px; font-family: Verdana, san-serif; font-weight: bold; color:#000;">{GOODS_MOD_PRICE_NOW_WITHOUT_DISCOUNT | money_format}</snap> </span>Заменить:
<!-- Артикул, если указан --> <div {% IFNOT GOODS_MOD_ART_NUMBER %}style="display:none;"{% ENDIF %} class="goodsDataMainModificationArtNumber"> Артикул: <span>{GOODS_MOD_ART_NUMBER}</span> </div> </div> </tr> <!-- END Блок описания товара. Показываем его есть описание товара --> <tr> <td class="goodsDataMainModificationDataBlock"> <!-- По этому значению производится заказ товара --> <input type="hidden" name="form[goods_mod_id]" value="{GOODS_MOD_ID}" class="goodsDataMainModificationId" /> <!-- Цена сейчас --> <div style="padding-bottom: 0px;"> <span class="price goodsDataMainModificationPriceNow" style="padding-bottom: 5px;" title="Текущая цена за «{GOODS_NAME}»"> <snap style="font-size: 14px; font-family: Verdana, san-serif; font-weight: bold; color:#000;">{GOODS_MOD_PRICE_NOW | money_format}</snap> </span> <!-- Старая цена --> <!-- Если на товар действует скидка --> {% IF GOODS_MOD_PRICE_NOW_WITHOUT_DISCOUNT>GOODS_MOD_PRICE_NOW %} <span class="old-price" style="padding-left:5px;"> <span class="price goodsDataMainModificationPriceOld" title="Мы снизили цену на «{GOODS_NAME}». Старая цена - {GOODS_MOD_PRICE_NOW_WITHOUT_DISCOUNT} руб."> <snap style="font-size: 14px; font-family: Verdana, san-serif; font-weight: bold; color:#000;">{GOODS_MOD_PRICE_NOW_WITHOUT_DISCOUNT | money_format}</snap> </span>
#7
Отправлено 06 Июнь 2013 - 12:58
Koderhan (06 Июнь 2013 - 10:44) писал:
Панель администратора, "Сайт"->"Редактор тем".
В файле "Товар".
Найти код:
<!-- Артикул, если указан --> <div {% IFNOT GOODS_MOD_ART_NUMBER %}style="display:none;"{% ENDIF %}> Артикул: <span>{GOODS_MOD_ART_NUMBER}</span> </div> </div> </tr> <!-- END Блок описания товара. Показываем его есть описание товара --> <tr> <td class="goodsDataMainModificationDataBlock"> <!-- По этому значению производится заказ товара --> <input type="hidden" name="form[goods_mod_id]" value="{GOODS_MOD_ID}" class="goodsDataMainModificationId" /> <!-- Цена сейчас --> <div style="padding-bottom: 0px;"> <span class="price" style="padding-bottom: 5px;" title="Текущая цена за «{GOODS_NAME}»"> <snap style="font-size: 14px; font-family: Verdana, san-serif; font-weight: bold; color:#000;">{GOODS_MOD_PRICE_NOW | money_format}</snap> </span> <!-- Старая цена --> <!-- Если на товар действует скидка --> {% IF GOODS_MOD_PRICE_NOW_WITHOUT_DISCOUNT>GOODS_MOD_PRICE_NOW %} <span class="old-price" style="padding-left:5px;"> <span class="price" title="Мы снизили цену на «{GOODS_NAME}». Старая цена - {GOODS_MOD_PRICE_NOW_WITHOUT_DISCOUNT} руб."> <snap style="font-size: 14px; font-family: Verdana, san-serif; font-weight: bold; color:#000;">{GOODS_MOD_PRICE_NOW_WITHOUT_DISCOUNT | money_format}</snap> </span>Заменить:
<!-- Артикул, если указан --> <div {% IFNOT GOODS_MOD_ART_NUMBER %}style="display:none;"{% ENDIF %} class="goodsDataMainModificationArtNumber"> Артикул: <span>{GOODS_MOD_ART_NUMBER}</span> </div> </div> </tr> <!-- END Блок описания товара. Показываем его есть описание товара --> <tr> <td class="goodsDataMainModificationDataBlock"> <!-- По этому значению производится заказ товара --> <input type="hidden" name="form[goods_mod_id]" value="{GOODS_MOD_ID}" class="goodsDataMainModificationId" /> <!-- Цена сейчас --> <div style="padding-bottom: 0px;"> <span class="price goodsDataMainModificationPriceNow" style="padding-bottom: 5px;" title="Текущая цена за «{GOODS_NAME}»"> <snap style="font-size: 14px; font-family: Verdana, san-serif; font-weight: bold; color:#000;">{GOODS_MOD_PRICE_NOW | money_format}</snap> </span> <!-- Старая цена --> <!-- Если на товар действует скидка --> {% IF GOODS_MOD_PRICE_NOW_WITHOUT_DISCOUNT>GOODS_MOD_PRICE_NOW %} <span class="old-price" style="padding-left:5px;"> <span class="price goodsDataMainModificationPriceOld" title="Мы снизили цену на «{GOODS_NAME}». Старая цена - {GOODS_MOD_PRICE_NOW_WITHOUT_DISCOUNT} руб."> <snap style="font-size: 14px; font-family: Verdana, san-serif; font-weight: bold; color:#000;">{GOODS_MOD_PRICE_NOW_WITHOUT_DISCOUNT | money_format}</snap> </span>
Спасибо сработало со сменой цены и артикуля, а вот как быть с тем что бы убирать со страницы товара надпись "базовая модификация:" (в том случае что это дествительная базовая модификация) и это плое свойств не нужно?
#8
Отправлено 06 Июнь 2013 - 16:33
bg999 (06 Июнь 2013 - 12:58) писал:
Попробуйте снять галочку напротив пункта "В свойствах товарной модификации выдавать все свойства, даже если они одинаковы для всего товара" в основных настройках.
#10
Отправлено 08 Апрель 2014 - 21:26
У меня такая ситуация: У меня есть позиции, которые иимеют большой выбор цветов и размеров.
Например: http://1-cena.ru/goo...mente?from=MmZh
Как видите расцветок водолазок много, но и 4 размера. Приходиться у каждого цвета прописывать размер, что занимает уйму времени и ошибок)
Как бы сделать так, чтобы работали и размеры и цвета?
С уважением,Наталья.
#11
Отправлено 09 Апрель 2014 - 00:38
if(!goodsDataModifications.filter('[rel="'+slug+'"]').length) { $(this).attr('disabled', true);
и заменить его на
var modification = goodsDataModifications.filter('[rel="'+slug+'"]'); if(!modification.length || !parseInt(modification.find('input[name="rest_value"]').val())) { $(this).attr('disabled', true);
а в файл стилей добавить код (заблокированные модификации будут выделяться ярче)
select option:disabled { color: #FF0000; }
#12
Отправлено 09 Апрель 2014 - 11:59
Так я и делала, но у 20 цветов прописать по 4,5 размеров, это значит нужно прописать около 100 разных свойств в одной товарной единицы((( Это очень долго и нудно(( Жаль,что выхода пока нет.
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных