В Теме Новогодняя Изменить Вывод Модификаций В Товаре
#1
Отправлено 02 Июнь 2017 - 15:57
#2
Отправлено 03 Июнь 2017 - 07:33
Инструкция по реализации:
http://forum.storela...post__p__214519
Добавьте пожалуйста номер аккаунта с указанной в вопросе дизайн темы в профиль форума.
#3
Отправлено 04 Июнь 2017 - 19:02
Vaccina (03 Июнь 2017 - 07:33) писал:
Инструкция по реализации:
http://forum.storela...post__p__214519
Добавьте пожалуйста номер аккаунта с указанной в вопросе дизайн темы в профиль форума.
#4
Отправлено 06 Июнь 2017 - 11:21
ogonek7777 (04 Июнь 2017 - 19:02) писал:
Инструкция из сообщения выше подойдёт для шаблона Новогодний.
Чтобы немного поправить оформление, после инструкции нужно будет заменить в main.js строку
// Цена товара goodsPriceNow.html(modificationPriceNowFormated)
на
// Цена товара goodsPriceNow.html(modificationPriceNowFormated).addClass('price');
#5
Отправлено 07 Июнь 2017 - 18:25
Mr.Nito (06 Июнь 2017 - 11:21) писал:
Инструкция из сообщения выше подойдёт для шаблона Новогодний.
Чтобы немного поправить оформление, после инструкции нужно будет заменить в main.js строку
// Цена товара goodsPriceNow.html(modificationPriceNowFormated)
на
// Цена товара goodsPriceNow.html(modificationPriceNowFormated).addClass('price');
#6
Отправлено 09 Июнь 2017 - 10:24
ogonek7777 (07 Июнь 2017 - 18:25) писал:
Перед
<!-- Данные по модификациям для текущей товарной позиции -->добавьте
<div class="priceBlock"> {% FOR goods_modifications %} <div>- {goods_modifications.PRICE_NOW}р.</div> {% ENDFOR %} </div>
В main.css в самом конце добавьте:
/*Цена модификации*/ .goodsDataMainModificationsBlockProperty {margin-right:0!important;} .priceBlock {float:left;padding-top:15px} .priceBlock div { margin: 5px 0; font-weight:bold;}
#7
Отправлено 16 Июнь 2017 - 15:53
Vaccina (03 Июнь 2017 - 07:33) писал:
Инструкция по реализации:
http://forum.storela...post__p__214519
Добавьте пожалуйста номер аккаунта с указанной в вопросе дизайн темы в профиль форума.
#8
Отправлено 17 Июнь 2017 - 08:54
В случае шаблона Новогодний необходимо в main.js найти:
// Функция собирает свойства в строку, для определения модификации товара function getSlugFromGoodsDataFormModificationsProperties(obj) { var properties = new Array(); $(obj).each(function(i){ properties[i] = parseInt($(this).val()); }); return properties.sort(function(a,B){return a - b}).join('_'); } var // Запоминаем поля выбора свойств, для ускорения работы со значениями свойств goodsDataProperties = $('form.goodsDataForm select[name="form[properties][]"]'), // Запоминаем блоки с информацией по модификациям, для ускорения работы goodsDataModifications = $('div.goodsDataMainModificationsList'); // Обновляет возможность выбора свойств модификации, для отключения возможности выбора по характеристикам модификации которой не существует. function updateVisibility (y) { // Проверяем в каждом соседнем поле выбора модификаций, возможно ли подобрать модификацию для указанных свойств goodsDataProperties.each(function(j){ // Если мы сравниваем значения свойства не с самим собой, а с другим списком значений свойств if( j != y ) { // Проходим по всем значениям текущего свойства модификации товара $(this).find('option').each(function(){ // Записываем временный массив свойств, которые будем использовать для проверки существования модификации var checkProperties = new Array(); $(goodsDataProperties).each(function(i){ checkProperties[i] = parseInt($(this).val()); }); // Пытаемся найти модификацию соответствующую выбранным значениям свойств checkProperties[j] = parseInt($(this).attr('value')); // Собираем хэш определяющий модификацию по свойствам slug = checkProperties.sort(function(a,B){return a - b}).join('_'); // Ищем модификацию по всем выбранным значениям свойств товара. Если модификации нет в возможном выборе, отмечаем потенциальное значение выбора как не доступное для выбора, т.к. такой модификации нет. if(!goodsDataModifications.filter('[rel="'+slug+'"]').length) { $(this).attr('disabled', true); // Если выбрав данное значение свойства товара можно подобрать модификацию, то выделяем вариант выбора как доступный. } else { $(this).attr('disabled', false); } }); } }); } // Обновляем возможность выбора модификации товара по свойствам. Для тех свойств, выбор по которым не возможен, отключаем такую возможность. // Проверяем возможность выбора на всех полях кроме первого, чтобы отключить во всех остальных варианты, которые не возможно выбрать updateVisibility (0); // Проверяем возможность выбора на всех полях кроме второго, чтобы в первом поле так же отключилась возможность выбора не существующих модификаций updateVisibility (1); // Изменение цены товара при изменении у товара свойства для модификации goodsDataProperties.each(function(){ $(this).change(function(){ var slug = getSlugFromGoodsDataFormModificationsProperties(goodsDataProperties), modificationBlock = $('.goodsDataMainModificationsList[rel="'+slug+'"]'), modificationId = parseInt(modificationBlock.find('[name="id"]').val()), modificationArtNumber = modificationBlock.find('[name="art_number"]').val(), modificationPriceNow = parseInt(modificationBlock.find('[name="price_now"]').val()), modificationPriceNowFormated = modificationBlock.find('.price_now_formated').html(), modificationPriceOld = parseInt(modificationBlock.find('[name="price_old"]').val()), modificationPriceOldFormated = modificationBlock.find('.price_old_formated').html(), modificationRestValue = parseFloat(modificationBlock.find('[name="rest_value"]').val()), modificationDescription = modificationBlock.find('.description').html(), modificationMeasureId = parseInt(modificationBlock.find('[name="measure_id"]').val()), modificationMeasureName = modificationBlock.find('[name="measure_name"]').val(), modificationMeasureDesc = modificationBlock.find('[name="measure_desc"]').val(), modificationMeasurePrecision = modificationBlock.find('[name="measure_precision"]').val(), modificationIsHasInCompareList= modificationBlock.find('[name="is_has_in_compare_list"]').val(), goodsModificationId = $('.goodsDataMainModificationId'), goodsPriceNow = $('.goodsDataMainModificationPriceNow'), goodsPriceOld = $('.goodsDataMainModificationPriceOld'), goodsAvailable = $('.goodsDataMainModificationAvailable'), goodsAvailableTrue = goodsAvailable.find('.available-true'), goodsAvailableFalse = goodsAvailable.find('.available-false'), goodsAvailableAddCart = $('.add-to-form .add-to-cart'), goodsAvailableQty = $('.add-to-form .wrap-qty'), goodsArtNumberBlock = $('.goodsDataMainModificationArtNumber'), goodsArtNumber = goodsArtNumberBlock.find('span'); goodsCompareAddButton = $('.goodsDataCompareButton.add'); goodsCompareDeleteButton = $('.goodsDataCompareButton.delete'); goodsModDescriptionBlock = $('.goodsDataMainModificationsDescriptionBlock'); // Изменяем данные товара для выбранных параметров. Если нашлась выбранная модификация if(modificationBlock.length) { // Цена товара goodsPriceNow.html('<span class="price">' + modificationPriceNowFormated + '</span>'); // Старая цена товара if(modificationPriceOld>modificationPriceNow) { goodsPriceOld.html('<span class="price">' + modificationPriceOldFormated + '</span>'); } else { goodsPriceOld.html(''); } // Есть ли товар есть в наличии if(modificationRestValue>0) { goodsAvailableTrue.show(); goodsAvailableFalse.hide(); goodsAvailableAddCart.show(); goodsAvailableQty.show(); // Если товара нет в наличии } else { goodsAvailableTrue.hide(); goodsAvailableFalse.show(); goodsAvailableAddCart.hide(); goodsAvailableQty.hide(); } // Если товар есть в списке сравнения if(modificationIsHasInCompareList>0) { goodsCompareAddButton.hide(); goodsCompareDeleteButton.show(); // Если товара нет в списке сравнения } else { goodsCompareAddButton.show(); goodsCompareDeleteButton.hide(); } // Покажем артикул модификации товара, если он указан if(modificationArtNumber.length>0) { goodsArtNumberBlock.show(); goodsArtNumber.html(modificationArtNumber); // Скроем артикул модификации товара, если он не указан } else { goodsArtNumberBlock.hide(); goodsArtNumber.html(''); } // Описание модификации товара. Покажем если оно есть, спрячем если его у модификации нет if(modificationDescription.length > 0) { goodsModDescriptionBlock.show().html('<div>' + modificationDescription + '</div>'); } else { goodsModDescriptionBlock.hide().html(); } // Идентификатор товарной модификации goodsModificationId.val(modificationId); } else { // Отправим запись об ошибке на сервер sendError('no modification by slug '+slug); alert('К сожалению сейчас не получается подобрать модификацию соответствующую выбранным параметрам.'); } }); });
заменить на:
// Функция собирает свойства в строку, для определения модификации товара function getSlugFromGoodsDataFormModificationsProperties(obj) { var properties = new Array(); var reset_arr = new Array(); $(obj).find('input[type="radio"]').each(function(i){ if($(this).is(':checked')){ properties[i] = parseInt($(this).val());} }); for(var i in properties) { if(properties[i]) { reset_arr.push(properties[i]); } } return reset_arr.sort(function(a,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[type="radio"]').each(function(){ // Записываем временный массив свойств, которые будем использовать для проверки существования модификации //var checkProperties = new Array(); /*$(goodsDataProperties).each(function(i){ if($(this).is(':checked')) checkProperties[i] = parseInt($(this).val()); });*/ // Пытаемся найти модификацию соответствующую выбранным значениям свойств //checkProperties[j] = parseInt($(this).attr('value')); // Собираем хэш определяющий модификацию по свойствам //slug = checkProperties.sort(function(a,B){return a - b}).join('_'); slug = getSlugFromGoodsDataFormModificationsProperties(goodsDataProperties); // Ищем модификацию по всем выбранным значениям свойств товара. Если модификации нет в возможном выборе, отмечаем потенциальное значение выбора как не доступное для выбора, т.к. такой модификации нет. if(!goodsDataModifications.filter('[rel="'+slug+'"]').length) { $(this).attr('disabled', 'disabled'); // Если выбрав данное значение свойства товара можно подобрать модификацию, то выделяем вариант выбора как доступный. } else { $(this).removeAttr('disabled'); } }); } }); } // Обновляем возможность выбора модификации товара по свойствам. Для тех свойств, выбор по которым не возможен, отключаем такую возможность. updateVisibility (0); // Изменение цены товара при изменении у товара свойства для модификации goodsDataProperties.each(function(y){ $(this).find('input[type="radio"]').click(function(){ var slug = getSlugFromGoodsDataFormModificationsProperties(goodsDataProperties), modificationBlock = goodsDataModifications.filter('[rel="'+slug+'"]'), modificationId = parseInt(modificationBlock.find('[name="id"]').val()), modificationArtNumber = modificationBlock.find('[name="art_number"]').val(), modificationPriceNow = parseFloat(modificationBlock.find('[name="price_now"]').val()), modificationPriceNowFormated = modificationBlock.find('.price_now_formated').html(), modificationPriceOld = parseFloat(modificationBlock.find('[name="price_old"]').val()), modificationPriceOldFormated = modificationBlock.find('.price_old_formated').html(), modificationRestValue = parseFloat(modificationBlock.find('[name="rest_value"]').val()), modificationDescription = modificationBlock.find('.description').html(), modificationMeasureId = parseInt(modificationBlock.find('[name="measure_id"]').val()), modificationMeasureName = modificationBlock.find('[name="measure_name"]').val(), modificationMeasureDesc = modificationBlock.find('[name="measure_desc"]').val(), modificationMeasurePrecision = modificationBlock.find('[name="measure_precision"]').val(), modificationIsHasInCompareList= modificationBlock.find('[name="is_has_in_compare_list"]').val(), goodsModificationId = $('.goodsDataMainModificationId'), goodsPriceNow = $('.goodsDataMainModificationPriceNow'), goodsPriceOld = $('.goodsDataMainModificationPriceOld'), goodsAvailable = $('.goodsDataMainModificationAvailable'), goodsAvailableTrue = goodsAvailable.find('.available-true'), goodsAvailableFalse = goodsAvailable.find('.available-false'), goodsArtNumberBlock = $('.goodsDataMainModificationArtNumber'), goodsArtNumber = goodsArtNumberBlock.find('span'); goodsCompareAddButton = $('.goodsDataCompareButton.add'); goodsCompareDeleteButton = $('.goodsDataCompareButton.delete'); goodsModDescriptionBlock = $('.goodsDataMainModificationsDescriptionBlock'); // Изменяем данные товара для выбранных параметров. Если нашлась выбранная модификация if(modificationBlock.length) { // Цена товара goodsPriceNow.html(modificationPriceNowFormated); // Старая цена товара if(modificationPriceOld>modificationPriceNow) { goodsPriceOld.html(modificationPriceOldFormated); } else { goodsPriceOld.html(''); } // Есть ли товар есть в наличии if(modificationRestValue>0) { goodsAvailableTrue.show(); goodsAvailableFalse.hide(); // Если товара нет в наличии } else { goodsAvailableTrue.hide(); goodsAvailableFalse.show(); } // Если товар есть в списке сравнения if(modificationIsHasInCompareList>0) { goodsCompareAddButton.hide(); goodsCompareDeleteButton.show(); // Если товара нет в списке сравнения } else { goodsCompareAddButton.show(); goodsCompareDeleteButton.hide(); } // Покажем артикул модификации товара, если он указан if(modificationArtNumber.length>0) { goodsArtNumberBlock.show(); goodsArtNumber.html(modificationArtNumber); // Скроем артикул модификации товара, если он не указан } else { goodsArtNumberBlock.hide(); goodsArtNumber.html(''); } // Описание модификации товара. Покажем если оно есть, спрячем если его у модификации нет if(modificationDescription.length > 0) { goodsModDescriptionBlock.show().html('<div>' + modificationDescription + '</div>'); } else { goodsModDescriptionBlock.hide().html(); } // Идентификатор товарной модификации goodsModificationId.val(modificationId); window.location.hash = '?modification='+modificationId; } else { // Отправим запись об ошибке на сервер sendError('no modification by slug '+slug); alert('К сожалению сейчас не получается подобрать модификацию соответствующую выбранным параметрам.'); } // Обновляем возможность выбора другой модификации для текущих значений свойств модификации товара. updateVisibility(y); }); });
Выше вам уже дополнили инструкцию и указали желаемый вами результат в итоге изменений.
#9
Отправлено 18 Июнь 2017 - 18:24
Mr.Nito (09 Июнь 2017 - 10:24) писал:
Перед
<!-- Данные по модификациям для текущей товарной позиции -->добавьте
<div class="priceBlock"> {% FOR goods_modifications %} <div>- {goods_modifications.PRICE_NOW}р.</div> {% ENDFOR %} </div>
В main.css в самом конце добавьте:
/*Цена модификации*/ .goodsDataMainModificationsBlockProperty {margin-right:0!important;} .priceBlock {float:left;padding-top:15px} .priceBlock div { margin: 5px 0; font-weight:bold;}
При этом цены в столбце расположены в хаотичном порядке.
2. Также обнаружила проблему. Когда нажимаешь галочки радио-кнопок, то в старой цене перестают учитываться стили.
3. Не уверенна, что связано ли с этими изменениями, но теперь мне выдает JS.ошибку
Также я убрала часть платежей, может быть эта ошибка связана с ними.
<!-- Платежные системы --> <div id="payment_services"> <a href="#" title="Перейти на страницу описания оплаты"> <span class="icon_1" title="Мы принимаем к оплате Яндекс.Деньги"> </span> <span class="icon_2" title="Мы принимаем оплату через кредитные карты Maestro"> </span> <span class="icon_3" title="Мы принимаем к оплате кредитные карты MasterCard"> </span> <span class="icon_7" title="Мы принимаем к оплате квитанции сбербанка"> </span> <span class="icon_9" title="Мы принимаем к оплате кредитные карты VISA"> </span> </a> </div> </div> </div>
#10
Отправлено 20 Июнь 2017 - 08:42
1. Зайдите в раздел Сайт - Редактор шаблонов - main.css - найдите:
.priceBlock {float:left;padding-top:15px}
перед ним вставьте:
.goodsDataMainModificationsRadio { float: left; }
2. Зайдите в раздел Сайт - Редактор шаблонов - main.js - найдите:
goodsPriceOld = $('.goodsDataMainModificationPriceOld'),
замените на:
goodsPriceOld = $('.goodsDataMainModificationPriceOld .price'),
3. Вместо:
<!-- Платежные системы --> <div id="payment_services"> <a href="#" title="Перейти на страницу описания оплаты"> <span class="icon_1" title="Мы принимаем к оплате Яндекс.Деньги"> </span> <span class="icon_2" title="Мы принимаем оплату через кредитные карты Maestro"> </span> <span class="icon_3" title="Мы принимаем к оплате кредитные карты MasterCard"> </span> <span class="icon_7" title="Мы принимаем к оплате квитанции сбербанка"> </span> <span class="icon_9" title="Мы принимаем к оплате кредитные карты VISA"> </span> </a> </div> </div> </div>
необходимо удалить:
<!-- Платежные системы --> <div id="payment_services"> <a href="#" title="Перейти на страницу описания оплаты"> <span class="icon_1" title="Мы принимаем к оплате Яндекс.Деньги"> </span> <span class="icon_2" title="Мы принимаем оплату через кредитные карты Maestro"> </span> <span class="icon_3" title="Мы принимаем к оплате кредитные карты MasterCard"> </span> <span class="icon_7" title="Мы принимаем к оплате квитанции сбербанка"> </span> <span class="icon_9" title="Мы принимаем к оплате кредитные карты VISA"> </span> </a> </div>
Чтобы не нарушить синтаксис.
#11
Отправлено 21 Июнь 2017 - 13:14
1. Цены встали слева, но они все также не соответствую модификациям, как и раньше. Почему-то средний размер может быть по самой дорогой цене, к примеру.
2. Пока изменений не вижу, но чистка кэша в данной теме не срабатывает.
3. Я правильно поняла, что необходимо дописать два <div>?
#12
Отправлено 12 Июль 2017 - 08:08
Простите за ожидание.
1. Ответила вам на данный вопрос тут:
http://forum.storela...ям/#entry264618
2. На данный момент при переключении стилистика сохраняется, уточните пожалуйста вопрос актуален?
3. Все верно, достаточно заметить блоки по инструкции выше.
#13
Отправлено 15 Июль 2017 - 18:51
Нужно при выборе модификации в данном случае Аромат - менялся цвет и цена и характеристика разумеется. При выборе скажем цвета как же менялся аромат этому цвету сумма и т п.
Помогите сделать, и помогите рамку сделать шириной до конца линии что я на фото выделил красным.
Заранее спасибо
#14
Отправлено 16 Июль 2017 - 12:11
#15
Отправлено 17 Июль 2017 - 10:53
bscgroup (15 Июль 2017 - 18:51) писал:
Нужно при выборе модификации в данном случае Аромат - менялся цвет и цена и характеристика разумеется. При выборе скажем цвета как же менялся аромат этому цвету сумма и т п.
Помогите сделать, и помогите рамку сделать шириной до конца линии что я на фото выделил красным.
Заранее спасибо
Здравствуйте. Вам необходимо добавить все возможный варианты модификаций.
Допустим у Вас есть размеры 42, 44, 46 и цвета Черный и Белый.
В этом случае Вам надо создать 6 модификаций
1) Размер - 42, Цвет - Белый
2) Размер - 42, Цвет - Черный
3) Размер - 44, Цвет - Белый
4) Размер - 44, Цвет - Черный
5) Размер - 46, Цвет - Белый
6) Размер - 46, Цвет - Черный
Чтобы привязать фото к модификации Вам нужно в описание модификации добавить код:
<img src="#">
где вместо знака # подставьте ссылку на картинку, которая соответствует данной модификации. Дальше пришлите нам название товара, где Вы произвели изменения, мы Вам настроим на его примере
#16
Отправлено 17 Июль 2017 - 11:59
#17
Отправлено 17 Июль 2017 - 12:07
MikDark (17 Июль 2017 - 10:53) писал:
Допустим у Вас есть размеры 42, 44, 46 и цвета Черный и Белый.
В этом случае Вам надо создать 6 модификаций
1) Размер - 42, Цвет - Белый
2) Размер - 42, Цвет - Черный
3) Размер - 44, Цвет - Белый
4) Размер - 44, Цвет - Черный
5) Размер - 46, Цвет - Белый
6) Размер - 46, Цвет - Черный
Чтобы привязать фото к модификации Вам нужно в описание модификации добавить код:
<img src="#">
где вместо знака # подставьте ссылку на картинку, которая соответствует данной модификации. Дальше пришлите нам название товара, где Вы произвели изменения, мы Вам настроим на его примере
И помогите рамку сделать ширеной меньше, а когда список раскрывался то мо ширине текста. Как на фото 1 как нужно ширину сделать, на фото 2 как рамка раскрывалась.(по ширине текста)
#18
Отправлено 19 Июль 2017 - 08:40
Зайдите в раздел Сайт - Редактор шаблонов - main.css - найдите:
.product-view .product-shop .goodsDataMainModificationsBlock .goodsDataMainModificationsBlockProperty select {display: block;padding: 5px;border: 1px solid #eacd8e;}
замените на:
.product-view .product-shop .goodsDataMainModificationsBlock .goodsDataMainModificationsBlockProperty select {display: block;padding: 5px;border: 1px solid #eacd8e;width: 100%;overflow: hidden;}
#19
Отправлено 19 Июль 2017 - 09:10
Vaccina (19 Июль 2017 - 08:40) писал:
Зайдите в раздел Сайт - Редактор шаблонов - main.css - найдите:
.product-view .product-shop .goodsDataMainModificationsBlock .goodsDataMainModificationsBlockProperty select {display: block;padding: 5px;border: 1px solid #eacd8e;}
замените на:
.product-view .product-shop .goodsDataMainModificationsBlock .goodsDataMainModificationsBlockProperty select {display: block;padding: 5px;border: 1px solid #eacd8e;width: 100%;overflow: hidden;}
#20
Отправлено 21 Июль 2017 - 09:20
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных