Jump to content



Toggle %s Welcome to JBZoo community !

English: Please, sign in for contact JBZoo techsupport. Accesses in your Email, which came after the purchase.

Russian: Для того чтобы обратиться в русскую техническую поддержку JBZoo — авторизуйтесь с помощью доступов, которые пришли к вам в письме после покупки. Внимание! Доступ туда имеют только тарифы со знаком «плюс». Подписки JBZoo без "+" форум расценивает как забаненные, поэтому для общения в публичном разделе используйте отдельный аккаунт (легко зайти через социальную сеть). Если форум вас не пускает, почистите куки браузера


Photo
- - - - -

JBPrice Plain и несуществующие комбинации


2 replies to this topic

#1 e-cigareta

e-cigareta

Posted 14 April 2017 - 15:12

Здравствуйте. Возникла необходимость следующего функционала:

Допустим есть товар, у которого есть 2 (или более) характеристики. При этом цена зависит от комбинаци характеристик. При том не все единици товара имеют все варианты комбинации (некоторых комбинаций быть не может). 

 

Пример:

Для примера возьмём ноутбук с такими характеристиками (это одна и та же модель с опциональными характеристиками):

ОЗУ: 1Гб, 2Гб.

Жесткий диск (винт): 1Тб, 2Тб.

 

Но мы продаем только варианты: 1Гб + 1Тб, 1Гб + 2Тб, 2Гб+2Тб. А ноутбука 2Гб + 1Тб у нас нету.

 

Задача:

Настроить элемент цены так, чтобы пользователь смогу выбрать только те варианты при заказе, которые мы можем предоставить. А те которых нет - не мог. 

а) в идеале чтобы при выборе ОЗУ 2Гб в выборе жесткого диска пропадал вариант 1Тб.

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

Тоесть по фатку нужен каскадный селект для элемента цены...

 

Дополнение:

Для примера я всё безумно упростил, по факту это будет минимум 3 характеристики с 5 и более значениями для каждого товара.

 

 

Собственно вопрос: Можно ли это сделать на текущей версии с помощью элемента JBZoo Price Plain или JBZoo Price Calc.

 

Я пытался это делать через JBZoo Price Calc, но я могу в нём выбрать комбинацию которая не указана в админке, и товар просто добавляется с базовой ценой. Мне это не подходит, поскольку товара с такой комбинацией у нас нет и никогда не будет...

 

 



#2 DMTR3000S

DMTR3000S
  • JBZoo Partner
  • User rate: 85.2
  • posts: 689
  • topics: 43

Posted 16 April 2017 - 09:40

e-cigareta, насколько я помню (возможно я неправ и меня поправят другие форумчане), такого функционала в JBZoo нет, и реализовать такое можно только весьма серьёзной доработкой элемента цены.

Единственный выход вижу в добавлении вариаций цен - то есть, сразу прописывать конфиг того же ноутбука в одном селекте. Либо, если товаров немного, прикрутить костыль на JS, который запретит добавление опции товара в определённом сочетании с соседними.


  • 1

#3 Станислав

Станислав
  • JBZoo User (rus)
  • User rate: 16.7
  • posts: 198
  • topics: 7

Posted 17 April 2017 - 08:16

Возникала такая же проблема с JBPrice Plain, и решал именно так как написал DMTR3000S: JS-скриптами, которые "эмулируют" каскадный селект. К счастью, у меня изменения затронули всего пару комбинаций, потому скрипт получился небольшой, но в случае конфигурации ноутбуков это будет нечто монструозное :(  Хотя другого выхода навскидку не просматривается.

 

Для вашего примера будет как-то так (чистый JS, можно переписать на JQuery - будет немного компактнее)
 

<script>
// ID "родительского" селекта
var parent_select = document.getElementById("713844fb82711146155938e07a3878f8cc894e2a-704d-4569-9660-8ff5c5c9ee33value");
// ID "дочернего" селекта
var child_select = document.getElementById("713844fb82711146155938e07a3878f88dc321b1-be85-4b07-ba48-1c8a1c5545b0value");

function changeParams()
{
    if (parent_select != null)
    {
        var selectParent = parent_select;
        var selectChild = child_select;
    }

    var options = selectParent.options;
    var selectedIndex = selectChild.options.selectedIndex;
    var selectedOption = selectParent.options[selectParent.selectedIndex].value;
    var i;
    // RAM 1GB
    if (selectedOption == "1GB")
    {
        for(i = selectChild.options.length - 1 ; i >= 0 ; i--)
        {
            selectChild.remove(i);
        }
        var hdd_texts = ["HDD 1TB", "HDD 2TB"]; // Текст в опциях селекта
        var hdd_values = ["1TB", "2TB"]; // Значения в опциях селекта
        for(i = 0 ; i <= 1 ; i++)
        {
            var option = document.createElement("option");
            option.text = hdd_texts[i];
            option.value = hdd_values[i];
            selectChild.add(option);
        }
    }
    else
    // RAM 2GB
    {
        for(i = selectChild.options.length - 1 ; i >= 0 ; i--)
        {
            selectChild.remove(i);
        }
        var hdd_texts = ["HDD 2TB"];
        var hdd_values = ["2TB"];
        for(i = 0 ; i <= 0 ; i++)
        {
            var option = document.createElement("option");
            option.text = hdd_texts[i];
            option.value = hdd_values[i];
            selectChild.add(option);
        }
    }
    selectChild.options.selectedIndex = selectedIndex;
}

if (parent_select != null )
{
    parent_select.addEventListener("change", changeParams);
}
</script>


Edited by Станислав, 17 April 2017 - 08:34.

  • 1

«Ну и зачем все это, лучше бы водки выпили». Из писем Белинского Гоголю.

 





Click to return to top of page in style!