Как настроить отображение вариаций в старых и новых шаблонах

Как настроить отображение вариаций в старых и новых шаблонах
Материал добавлен: 08 Октября 2024
Материал обновлен: 08 Октября 2024

Важно! Чтобы вариации заработали на старых сайтах, необходимо восстановить стандартный шаблон или вставить код вызова вариаций в следующие шаблоны: 

  • вид товара
  • страница товара
  • корзина 
  • вид товара в печатной форме заказа 

Для установки кода вам нужно перейти в Панель управления → Дизайн → Управление дизайном (шаблоны) → Интернет-магазин, далее нужно вставить вручную если не хотите восстанавливать стандартный шаблон:

<?if($VARIATIONS$)?>$VARIATIONS$<?endif?>

Дополнительно нужно перейти в настройку шаблонов уведомлений, Главная → Интернет-магазин → Настройка уведомлений → Уведомления администратору → Уведомлять при оформлении нового заказа:

Обновление скрипта в шаблоне Корзина

Важно! Для тех сайтов у которых в модуле Интернет-магазин шаблон "Корзина": 

используется свой кастомный код и переписанные скрипты, важно внести исправления в скрипт так как без правок вариации не будут корректно работать.

Обновленный скрипт с поддержкой для вариаций:

<script>
 function add2Basket(id, pref){
 if(lock_buttons) return false; else lock_buttons = 1;
 var opt = [], err_msg = '', err_msgs = [], radio_options = {}, el_id = {};
 $('#b'+pref+'-'+id+'-basket').attr('disabled','disabled');
 $('#'+pref+'-'+id+'-basket').removeClass('done').removeClass('err').removeClass('add').addClass('wait').attr('title','');
 $('#'+pref+'-'+id+'-options-selectors').find('select, input').each(function(){
 switch (this.type) {
 case 'radio':
 el_id = this.id.split('-');
 ((typeof (radio_options[el_id[3]]) == 'undefined') && (radio_options[el_id[3]] = { 'val': - 1, 'id': this.id }));
 (this.checked && (radio_options[el_id[3]]['val'] = this.value));
 break;
 case 'checkbox':
 if (this.checked && (this.value !== '')) {
 if(this.value !== ''){
 opt.push(this.id.split('-')[3]+'-'+this.value);
 } else {
 err_msgs.push({'id':this.id.split('-')[3], 'msg':'<li>'+$(this).parent().parent().find('span.opt').html().replace(':', '')+'</li>'});
 }
 }
 break;
 default:
 if (this.value !== '') {
 opt.push(this.id.split('-')[3]+'-'+this.value);
 } else {
 err_msgs.push({'id':this.id.split('-')[3], 'msg':'<li>'+$(this).parent().parent().find('span.opt').html().replace(':', '')+'</li>'});
 }
 }
 });
 for(i in radio_options){
 if(radio_options[i]['val'] != -1){
 opt.push(radio_options[i]['id'].split('-')[3]+'-'+radio_options[i]['val']);
 }else{
 err_msgs.push({'id':radio_options[i]['id'].split('-')[3], 'msg':'<li>'+$('#'+radio_options[i]['id']).parent().parent().parent().find('span.opt').html().replace(':', '')+'</li>'});
 }
 }

 err_msgs.sort(function(a, b){ return ((a['id'] > b['id']) ? 1 : -1); });
 for (var i=0; i<err_msgs.length; i++) { err_msg += err_msgs[i]['msg']; }

 // get productVariations
 const variationsStr = getVariationsStr(id, pref);

 if(err_msg == ''){
 _uPostForm('',{type:'POST',url:'/shop/basket',data:{'mode':'add', 'id':id, 'pref':pref, 'opt':opt.join(':'), 'cnt':$('#q'+pref+'-'+id+'-basket').val(),...(variationsStr && {variations:variationsStr}),}});
 ga_event('basket_add');
 }else{
 lock_buttons = 0;
 shop_alert('<div class="MyWinError">Опции<ul>'+err_msg+'</ul>обязательны для выбора</div>','Замечания','warning',350,100,{tm:8000,align:'left',icon:'/.s/img/icon/warning.png', 'onclose': function(){ $('#b'+pref+'-'+id+'-basket').removeAttr('disabled'); $('#'+pref+'-'+id+'-basket').removeClass('wait').addClass('add'); }});
 }
 return false;
 }
 </script>

Если у вас используется стандартный шаблон, то достаточно нажать кнопку «Восстановить стандартный шаблон» в шаблонах. После этого все вариации будут корректно отображаться и работать.

Как настроить отображение вариаций в старых и новых шаблонах