Автор Тема: Связанные атрибуты  (Прочитано 186 раз)

22 Декабря 2015, 16:03:22
  • Пользователь
  • **
  • Сообщений: 70
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Привет!
Подскажите, как убрать недоступные связанные атрибуты в карточке товара? Не в категории, там все норм!
Например чайники, два связанных атрибута: 1-объем; 2-мощность;
0,5 л. > 500Вт
0,5 л. > 600Вт
1,5 л. > 700Вт
1,5 л. > 800Вт
Как сделать так, что когда пользователь выбирает объем 0,5 то доступная мощность для выбора оставалась только 500 и 600Вт, и, наоборот.
Сейчас доступны все комбинации не зависимо от того есть они или нет, просто всплывает сообщение что "данная конфигурация отсутствует, выберете другую", ну вы в курсе) а это лишнее.
Версия 1.6.
Заранее, спасибо!
22 Декабря 2015, 16:14:46
Ответ #1
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86180
  • Репутация: +25412/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Установите модуль Attribute Wizard Pro или ищите на форуме тему как сдеалать связанные поля у аттрибутов.
22 Декабря 2015, 17:16:58
Ответ #2
  • Пользователь
  • **
  • Сообщений: 70
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Установите модуль Attribute Wizard Pro или ищите на форуме тему как сдеалать связанные поля у аттрибутов.
Спасибо!
Почитал, Attribute Wizard Pro пишут что это не решает.
24 Декабря 2015, 13:34:35
Ответ #3
  • Пользователь
  • **
  • Сообщений: 70
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Очень полезная штука!
Теперь пользователь не будет угадывать доступные атрибуты товара) После выбора одного из доступных атрибутов, следующие возможные будут предлагался только те, которые касаются предыдущего выбранного. И юзеру не будет всплывать дурацкое сообщение "Комбинация не доступна. Выберите другую." Задачу решил, без покупки модуля Attribute Wizard Pro за 150$ (хотя и он вроде это не решает), этим кодом:
$(function(){

  var groupIds=new Array();
  $('select[id^="group_"]').each(function(){
    groupIds.push(this.id);
  });
  var allCombinations=new Array();
  $.each(combinations,function(key,combination){
    allCombinations.push(combination['idsAttributes']);
  });

  $('select[id^="group_"]').change(function(){checkCombination()});
  $('a[id^="color_"][class="color_pick"]').click(function(){checkCombination()});
  checkCombination();

  function checkCombination()
  {
    $('select[id^="group_"] option').removeAttr('disabled');
    $.each(groupIds,function(key,groupId){
  var this_select=$('select[id='+groupId+']');
  this_select.children('option').each(function(){
    if(this_select.val()!=this.value){
  var combination=new Array();
  combination[key]=this.value;
  $.each(groupIds,function(key2,groupId2){
    if(key!=key2){
  combination[key2]=$('select[id='+groupId2+']').val();
    }
  });
  var position=-1;
  $.each(allCombinations,function(key1,theCombination){
    if(position==-1){
  position=key1;
  $.each(theCombination,function(key2,value){
    if(combination[key2]!=value)position=-1;
  });
    }
  });
  if(position<0)
  {
    this_select.children('option[value='+this.value+']').attr('disabled','disabled');
  }
    }
  });
    });
  }

});
24 Декабря 2015, 14:01:09
Ответ #4
  • Пользователь
  • **
  • Сообщений: 70
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Может кто-то подскажет, как решить задачу с фильтрами многоуровневой навигации в категориях.
Если мы фильтруем в категории по параметру, например - мощность, товары и цены показываются которые привязаны по умолчанию а не по конкретной выборке в фильтре, и пользователь переходит на товар по умолчанию.
Как можно реализовать, чтоб пользователю, согласно выбранного фильтра в категории, подставлялись конкретные товары а не по умолчанию?
Заранее, спасибо!
09 Ноября 2016, 19:41:35
Ответ #5
  • Новичок
  • *
  • Сообщений: 33
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Очень полезная штука!
Теперь пользователь не будет угадывать доступные атрибуты товара) После выбора одного из доступных атрибутов, следующие возможные будут предлагался только те, которые касаются предыдущего выбранного. И юзеру не будет всплывать дурацкое сообщение "Комбинация не доступна. Выберите другую." Задачу решил, без покупки модуля Attribute Wizard Pro за 150$ (хотя и он вроде это не решает), этим кодом:
$(function(){

  var groupIds=new Array();
  $('select[id^="group_"]').each(function(){
    groupIds.push(this.id);
  });
  var allCombinations=new Array();
  $.each(combinations,function(key,combination){
    allCombinations.push(combination['idsAttributes']);
  });

  $('select[id^="group_"]').change(function(){checkCombination()});
  $('a[id^="color_"][class="color_pick"]').click(function(){checkCombination()});
  checkCombination();

  function checkCombination()
  {
    $('select[id^="group_"] option').removeAttr('disabled');
    $.each(groupIds,function(key,groupId){
  var this_select=$('select[id='+groupId+']');
  this_select.children('option').each(function(){
    if(this_select.val()!=this.value){
  var combination=new Array();
  combination[key]=this.value;
  $.each(groupIds,function(key2,groupId2){
    if(key!=key2){
  combination[key2]=$('select[id='+groupId2+']').val();
    }
  });
  var position=-1;
  $.each(allCombinations,function(key1,theCombination){
    if(position==-1){
  position=key1;
  $.each(theCombination,function(key2,value){
    if(combination[key2]!=value)position=-1;
  });
    }
  });
  if(position<0)
  {
    this_select.children('option[value='+this.value+']').attr('disabled','disabled');
  }
    }
  });
    });
  }

});

а куда этот код вставлять?
09 Ноября 2016, 20:53:45
Ответ #6
  • Пользователь
  • **
  • Сообщений: 70
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Очень полезная штука!
Теперь пользователь не будет угадывать доступные атрибуты товара) После выбора одного из доступных атрибутов, следующие возможные будут предлагался только те, которые касаются предыдущего выбранного. И юзеру не будет всплывать дурацкое сообщение "Комбинация не доступна. Выберите другую." Задачу решил, без покупки модуля Attribute Wizard Pro за 150$ (хотя и он вроде это не решает), этим кодом:
$(function(){

  var groupIds=new Array();
  $('select[id^="group_"]').each(function(){
    groupIds.push(this.id);
  });
  var allCombinations=new Array();
  $.each(combinations,function(key,combination){
    allCombinations.push(combination['idsAttributes']);
  });

  $('select[id^="group_"]').change(function(){checkCombination()});
  $('a[id^="color_"][class="color_pick"]').click(function(){checkCombination()});
  checkCombination();

  function checkCombination()
  {
    $('select[id^="group_"] option').removeAttr('disabled');
    $.each(groupIds,function(key,groupId){
  var this_select=$('select[id='+groupId+']');
  this_select.children('option').each(function(){
    if(this_select.val()!=this.value){
  var combination=new Array();
  combination[key]=this.value;
  $.each(groupIds,function(key2,groupId2){
    if(key!=key2){
  combination[key2]=$('select[id='+groupId2+']').val();
    }
  });
  var position=-1;
  $.each(allCombinations,function(key1,theCombination){
    if(position==-1){
  position=key1;
  $.each(theCombination,function(key2,value){
    if(combination[key2]!=value)position=-1;
  });
    }
  });
  if(position<0)
  {
    this_select.children('option[value='+this.value+']').attr('disabled','disabled');
  }
    }
  });
    });
  }

});

а куда этот код вставлять?
В heder.tpl в пределах <head> между:
<script type="text/javascript">
....
</script>
но я вроде ставил внизу в product.tpl и было все ok, не помню, пробуйте.