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 и несуществующие комбинации


Best Answer e-cigareta , 24 April 2017 - 20:21

Разобрался сам, решил следующим образом:

 

Добавил поле "Остаток" в настройках комерции "Элемент цены -> Параметры"

 

По умолчанию для товара ставим остаток "Нет в наличии". Далее добавляем нужные нам комбинацию параметов, и ставим им остаток "Бесконечно" (ну или сколько нужно). Теперь при попытке купить комбинацию которую Вы не указали для товара пользователь получает сообщение "Товара нет на складе", но если выберет одну из комбинаций которые есть - она добавляется в корзину.

Go to the full post


3 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: 86.1
  • posts: 757
  • topics: 43

Posted 16 April 2017 - 09:40

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

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


  • 1

#3 Станислав

Станислав
  • JBZoo User (rus)
  • User rate: 17.2
  • 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.

  • 2

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

 


#4 e-cigareta

e-cigareta
  • Topic Starter
  • Members
  • User rate: ~
  • posts: 2
  • topics: 1

Posted 24 April 2017 - 20:21   Best Answer

Разобрался сам, решил следующим образом:

 

Добавил поле "Остаток" в настройках комерции "Элемент цены -> Параметры"

 

По умолчанию для товара ставим остаток "Нет в наличии". Далее добавляем нужные нам комбинацию параметов, и ставим им остаток "Бесконечно" (ну или сколько нужно). Теперь при попытке купить комбинацию которую Вы не указали для товара пользователь получает сообщение "Товара нет на складе", но если выберет одну из комбинаций которые есть - она добавляется в корзину.






Click to return to top of page in style!