Перейти к содержимому


Фотография
- - - - -

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


Лучший Ответ e-cigareta , 24 April 2017 - 20:21

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

 

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

 

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

Перейти к сообщению


Сообщений в теме: 3

#1 e-cigareta

e-cigareta

Отправлено 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

Отправлено 16 April 2017 - 09:40

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

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


  • 1

#3 Станислав

Станислав

Отправлено 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>


Сообщение отредактировал Станислав: 17 April 2017 - 08:34

  • 2

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

 


#4 e-cigareta

e-cigareta

Отправлено 24 April 2017 - 20:21   Лучший Ответ

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

 

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

 

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






Click to return to top of page in style!