Сегодня мы затронем одну из самых сложных и интересных возможностей Virtuemart 2 – составные товары. Что это такое? Простейшим примером может быть кухонный гарнитур или футболка, имеющая разные размеры и цвета. Такие товары состоят из нескольких позиций, причем важно контролировать остатки каждой их них. В этой статье я расскажу о том, как добавить товару дополнительные опции, которые имеют дополнительную стоимость и контролируемые остатки. Для большего понимания опишу два вида представления товаров, которые могут использоваться в Virtuemart 2.

Задача: продавать футболку одного типа, но разных размеров и цветов. Разные размеры и цвета имеют разную стоимость. При этом остатки на складе всех видов футболки должны контролироваться.

Решение 1: Создать несколько товаров. Например: футболка зеленая M, футболка зеленая L, футболка зеленая XL, футболка красная M, футболка красная L, футболка красная XL, и т.д.

Решение 2: Создать один товар, в котором добавить опции, позволяющие выбирать размер и цвет.

Очевидно, решение 2 удобнее как для продавца, так и для покупателей. Реализация также вполне понятна: создаем два дополнительных поля «Размер» и «Цвет», являющихся атрибутами корзины и добавляем их для товара. Этот способ отлично работает, но только в том случае, когда не требуется контроль остатков. Если же он все-таки нужен, то этот метод не подходит.

Очевидно, чтобы контролировать остатки по каждой позиции, необходимо завести  соответствующие товары в магазине. Т.е. приходим к решению 1. Правда есть возможность упростить восприятие товара для покупателей. Т.е., хотя товаров и много, покупатель будет видеть всего одну футболку, но с выбором подходящих опций. Здесь мы приходим к термину «Дочерние товары».  Родительским товаром в нашем примере будет футболка. А дочерними – «зеленая M», «зеленая L», «зеленая XL», «красная M», «красная L», «красная XL», и т.д. Для дочерних товаров можно установить собственные цены и остатки. Остается главный вопрос: как настроить все это в Virtuemart 2? Для подобных ситуаций предназначено дополнительное поле типа «Stockable Variants Plugin».

Stockable Variants Plugin. Использование.

Прежде всего, необходимо создать дополнительное поле нужного типа.  Переходим в дополнительные поля Virtuemart 2 и добавляем новое поле.  В типе поля выбираем «Плагины». В появившимся списке плагинов выбираем «Stockable Variants». Для примера создадим опцию «Size» и добавим три варианта размеров: Small, Medium и Large. Каждый размер указываем с новой строки, как на рисунке:

virtuemart 2 stockable variants

Дополнительно установим опцию, «Атрибут корзины» в «Да». Сохраняем.

Всё. Поле создано.

Stockable Variants Plugin. Дочерние товары.

Теперь пришло время создать дочерние товары под данные опции. Для этого перейдем в список товаров Virtuemart, отметим галочкой нашу футболку (предполагается, что обычный товар «футболка» уже создан) и нажмем кнопку «Дочерний товар». После нажатия кнопки откроется форма добавления дочернего товара. Большинство из доступных полей можно не заполнять, но следует задать название товара «Футболка размера Small», артикул и остаток на складе. Цену можно не указывать, т.к. такая возможность еще будет доступна позднее. После этого сохраняем наш дочерний товар.

Вернувшись к списку товаров Virtuemart 2, вы можете увидеть 1 дочерний товар в колонке «Дочерние товары». Теперь вы можете кликнуть по нему и увидеть список дочерних товаров.

По аналогичному принципу добавляем к нашей футболке еще два дочерних товара – размеры Medium и Large.

Stockable Variants Plugin. Добавление дочерних товаров к родительскому через дополнительное поле.

После того, как три дочерних товара созданы, пришло время вернуться к родительскому товару. Открываем его снова и переходим к вкладке дополнительных полей. Добавляем созданное нами поле и видим список всех дочерних товаров.

virtuemart 2 stockable variants

Остается только задать для них опции размера и цену каждой из опций. Обратите внимание, что указанная здесь цена не будет окончательной ценой данного товара, она добавится к основной цене родительского товара. Т.е. к примеру, если родительский товар стоит 100 руб. и для дочерних вы указываете 10, 20 и 30 руб. соответственно, то при выборе покупателем опций он получит цену в 110, 120 и 130 руб.

Под основным блоком с дочерними товарами вы можете увидеть форму добавления дочерних товаров. Использовать ее не рекомендуется, т.к. до ума она все еще не доведена.

Сделав шаги, описанные выше, вы получите товар «Футболка» с возможностью выбора размера и контролем остатков футболок каждого размера на складе.

Stockable Variants Plugin. Мультиопции.

А теперь немного усложним. Что если у нас есть зависимые опции? Скажем, пять размеров и три цвета футболки. Всего получается 15 разных видов футболки. Показывать покупателю выпадающий список из 15 различных позиций нехорошо, согласитесь. Совсем другое дело, если будет показано два списка «Размер» и «Цвет». В первом будет 5 размеров, во втором 3 цвета.  Это гораздо удобнее. Как этого добиться?

При создании нашего поля мы добавили только одну опцию из возможных трех. Теперь отредактируем поле и добавим еще одну – цвет. Получится, как показано на рисунке:

virtuemart 2 stockable variants

Теперь необходимо создать дочерний товар на каждую комбинацию опций. Т.е. всего получится 15 дочерних товаров.

После того, как дочерние товары созданы, переходим в родительский и видим, что теперь есть возможность выбрать комбинацию опций для каждого дочернего товара:

virtuemart 2 stockable variants

Для пользователей же все это безобразие будет представлено в виде двух удобных выпадающих списков.

Прелесть такого подхода в том, что выпадающие списки обладают зависимостью друг от друга. Например, если кончились красные футболки размера XL, то после выбора красного цвета из выпадающего списка размеров XL исчезнет, не позволяя заказать покупателю футболку, которой нет.

Вот так работает плагин Stockable Variants. Функционал хоть и сложный, но достаточно интересный. Правда, несмотря на все достоинства данного плагина, должен заметить, что в некоторых случаях более оправданным будет применение варианта 1.