Настраиваемые поля virtuemart 3: Мультивариант/Дочерние товары (часть 6)

Опубликовано: 29 Октябрь, 2016
Обновлено: 2 Ноябрь, 2016
Категория: Настройка VirtueMart
Комментариев: 36

Мультивариант (Multi Variant) - специальный тип настраиваемого поля virtuemart, который позволяет не просто добавлять к товару опции, которые влияют на стоимость, но и создавать сложные зависимости между ними и вести учет остатков товаров с разными наборами опций.

Простой пример. В магазине продается смартфон 3 цветов: белый, черный и розовый.  Для белого и черного есть варианты с 32Gb и 64Gb памяти, а вот розовый доступен только в комплектации с 64Gb.

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

Используя стандартное настраиваемое поле с типом Строка мы не сможем настроить зависимость между цветом товара и объемом памяти. Кроме настройки зависимостей было бы неплохо вести учет остатков, чтобы автоматически добавлять/убирать разные варианты товара.

Все эти задачи в virtuemart решаются с помощью дочерних товаров и настраиваемого поля Мультивариант.

Дочерние товары - это вариации основного товара, которые чем-то от него отличаются. Например, размером, цветом, шириной и т.д.

На примере со смартфоном разберем, как создаются дочерние товары и зависимости между различными опциями.

Создание дочерних товаров

Дочерние товары можно создать разными путями.

1 вариант

В списке всех товаров выбираем нужный товар и нажимаем кнопку Дочерний товар.

add-child-product

2 вариант

Внутри товара во вкладке Информация через кнопку Добавить дочерний товар.

add-child-product2

3 вариант

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

add-child-product3

Но при этом способе создания возникают некоторые проблемы. В частности, если дочерних товаров не создано совсем, то при создании первого может появиться "фантомный" товар scalar.

scalar

C чем связана эта ошибка пока неясно. Возможно, в следующих версиях vm ее устранят, но в vm 3.0.18 такая проблема есть, поэтому лучше предварительно создать хотя бы один дочерний товар 1-м или 2-м способом и только после этого использовать 3-й способ.

При создании дочерних товаров не нужно дублировать всю информацию (описание, изображение и т.д.) из родительского товара. Достаточно указать артикул, остаток и изменить название (если нужно). Цену можно будет задать позднее при добавлении настраиваемого поля Мультивариант.

Для нашей задачи создадим 5 дочерних товаров с одинаковым названием (при желании в название каждого товара можно добавить информацию о цвете и объеме памяти).

После создания дочерних товаров в карточке родительского появится новая вкладка Дочерние товары.

child-product-list

Настраиваемое поле Мультивариант

В менеджере настраиваемых полей создадим новое настраиваемое поле с настройками, как на скриншоте.

2

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

В блоке Дополнительные параметры полезно активировать опцию  Use canonical link of the parent, чтобы в дочерних товарах в качестве канонической ссылки использовался адрес родительского товара. Опция Show labels отвечает за показ ярлыков (названий параметров).

Далее перейдем в карточку товара и во вкладке Настраиваемые поля добавим поле Цвет и объем памяти.

Загрузится на первый взгляд непонятная конструкция из дочерних товаров и каких-то дополнительных полей.

add-custom-field

Но все не так сложно, как кажется на первый взгляд

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

1field

Далее создадим второй параметр Объем памяти. Снова выбираем использовать произвольный ярлык, задаем название и нажимаем кнопку Новое.

2field

В появившемся поле также перечисляем список возможных вариантов и сохраняем товар.

new-field-parametr-2

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

new-option-product

Телефоны черного и белого цветов имеют варианты с 32Gb и 64Gb, а розовый может комплектоваться только 64Gb.

На сайте это будет выглядеть следующим образом.

product-option1

Товар нельзя купить пока не будет выбран хотя бы один вариант. Так происходит, потому что у родительского товара в настройках не выбраны параметры цвета и объема памяти. Если эти параметры задать, то в родительском товаре также будет доступна кнопка Купить.

Для выбора доступен только Цвет, потому что Объем памяти привязан к нему. Выбираем, например, Белый.

product-option2

После этого можно выбрать 2 варианта памяти.

Если выберем Розовый, то вариант будет только один.

product-option3

Все работает так, как и задумывалось.

Отмечу еще некоторые детали. В рассмотренном примере все варианты имели одинаковую стоимость. Задать стоимость в зависимости от набора параметров можно в отдельной колонке Цена. Величина стоимости задается в абсолютном значении, а не в относительном, как для других настраиваемых полей.

new-field-parametr-3

Чтобы созданные дочерние товары не выводились в модулях и поиске в Virtuemart > Настройки > Внешний вид нужно отключить опцию Показывать дочерние товары без категорий в результатах поиска и модулях.

Дочерние товары и работа с ними, пожалуй, самое трудное для понимания в virtuemart. Надеюсь, что  статья поможет быстро со всем разобраться и использовать на своем сайте.

36 комментариев

    Tobi

    Просто огромнейшее спасибо за эту статью. Как я ее долго ждал 🙂
    Спасибо, все отлично заработало и теперь можно смело подвязывать остатки к внешней базе с автоматическим обновлением через cron.
    Подскажите такой нюанс, при выборе объема, перегружается страница сайта на новый урл, можно сделать как-то без перезагрузки страницы?
    Спасибо!

      admin

      admin

      Рад,что статья оказалась полезной.
      При использовании дочерних товаров они выводятся с уникальным url.
      Можно настроить аякс обновление содержимого (Virtuemart > Настройки > Шаблоны опция Use ajax for product content), но в этом случае могут неправильно работать сторонние плагины, например, zoom изображений.

        Руслан

        А как побороть конфликт с zoom изображений при включенной опции Use ajax for product content подскажите пожалуйста? Для меня это стало камнем преткновения!

          admin

          admin

          К сожалению, пока нет решения.

    Konstantin99

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

      admin

      admin

      Трудно сказать, возможно, в будущем добавят.

    Назар

    Добрый день! Подскажите пожалуйста, можно ли вывести выбор цвета не списком , а изображениями, чтобы все также работало, но был не выпадающий список , а изображения (как тут http://iphonepiter.ru/shop/apple_iphone_7_128gb_rose_gold )

      admin

      admin

      Здравствуйте!

      Посмотрите в этой статье.

    Роман

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

      admin

      admin

      Здравствуйте!
      Скорее всего, дело в используемом шаблоне.
      Попробуйте для теста сменить на другой шаблон, если заработает, значит нужно будет искать проблему в шаблоне.

        Роман

        Странно, шаблон 2016 года, сразу с интегрированным virtuemart 3. Самое интересное что доп.поля, когда идет формула + к цене работает.

          admin

          admin

          Вы пробовали сменить на стандартный шаблон. В нем проблема сохраняется?

            Роман

            Поменял, все заработало :((((((( Надо искать спеца... который сможет исправить...

    Роман

    в стандартном шаблоне ссылка меняется на
    computer/handbags/плита-днища-2-detail.html
    в моем
    /computer/handbags/150

    может даже и не в шаблоне дело, может что то с настройками шаблона.

      admin

      admin

      Если шаблон платный, то попробуйте обратиться к разработчику.

    Алексей

    После перехода на vm 3.0.18 появились и фантомные товары и такая же проблема как и у Романа. До этого пол года все работало.

      admin

      admin

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

    7Hogik

    Спасибо все работает. Правда выбор характерестик добавился в "Недавно проссмотренные". Как их убрать оттуда?. Шаблон "Airshop"

    Яна

    У меня почему-то не работает кнопка + новое
    Пробовала в разных браузерах, нажимаю на нее, ничего не происходит.

      admin

      admin

      Пришлите ссылку на страницу с проблемой.

        Яна

        Так это в админке же.

          admin

          admin

          В статье описано 3 варианта создания дочерних товаров, ни один из вариантов не работает?

    Яна

    Не работает добавление "Новое нежелательное последствие". Кнопка "добавить" не реагирует.

      admin

      admin

      В Система > Общие настройки > Сервер для опции Сообщения об ошибках выберите Максимум
      Возможно, это поможет понять в чем проблема.
      Если не поможет, то нужно обновлять joomla и virtuemart до последних версий.

    Денис

    Добрый вечер.
    Подскажите пожалуйста, как можно правильно реализовать выбор товара.
    Joomla! 3.4.8
    VirtueMart 3.0.12
    Стоит задача в заказе сделать "онлайн калькулятор" (заказчик при выборе определенных опций в результате получает продукт с выбранными им в процессе заказа свойствами). Для примера как это выглядит https://zakaz.wolf.ua/ru/calc/vizitki/
    В начале выбирается "Продукт", потом "Количество сторон" печати, потом "Материал" на котором будет производится печать, "Покрытие" которым будет покрываться готовое изделие, "Срок изготовления" и только после этого ему остается сделать последний выбор - "Количество" (и сразу наглядно показана цена).
    Конечно при помощи правки мультиварианта и настраиваемых полей это можно постараться сделать, но в таком случае мы получим 4*2*6*5*3*8=5760 дочерних товаров (чуть меньше, так как некоторых вариантов комбинаций параметров не предусмотрено). Но даже и половины от этого будет слишком много (у меня при добавлении 43 дочерних товаров с 3 параметрами просто данные не сохраняются - сбрасываться все что было заполнено ранее). Да и самих товаров должно быть не менее сотни в магазине, что умноженное на дочерние товары создаст большой объем.
    Собственно вопрос - есть вариант как то упростить это? Возможен вариант продажи фиксированного количество готового изделия? Установить что товар может продаваться только по 500шт, 1000шт, 2000шт,......
    Спасибо!!

      admin

      admin

      Здравствуйте!
      Из готового посмотрите эти расширения
      https://breakdesigns.net/extensions/vm-product-builder
      http://sm-planet.net/index.php?option=com_content&view=article&id=2:catproduct&catid=8&Itemid=110

    Денис

    Большое спасибо!!!
    Но немного не то. Все эти расширения в корзину кладут несколько товаров, а мне необходимо что бы товар был один, но с несколькими опциями. Опции должны быть настраиваемыми как в мультиварианте ("В магазине продается смартфон 3 цветов: белый, черный и розовый. Для белого и черного есть варианты с 32Gb и 64Gb памяти, а вот розовый доступен только в комплектации с 64Gb"), но без дочерних товаров (или с ними, но маленьким количеством).

      admin

      admin

      Нужно заказывать расширение на фриланс, что-то готовое вряд ли есть.

    Наталья

    Здравствуйте, можно ли вывести дочерние товары в виде таблицы

      admin

      admin

      Здравствуйте!
      Из готовых решений встречал только catproduct.

    Алексей

    Помогите пожалуйста.
    Делал все как описано в статье мультивариант/ Дочерние товары. Но при выборе опции товара например белый телефон ничего не происходит. Пробывала на разных шаблонах на всех вылетает ошибка _____ Uncaught TypeError: ((n.event.special[g.origType] || (intermediate value)).handle || g.handler).apply is not a function _______.
    Подскажите как это исправить, что бы все работало как описано в статье.

      admin

      admin

      Пришлите ссылку на товар, в котором возникает эта проблема.
      Так же в Система > Общие настройки > Сервер для опции Сообщения об ошибках выберите Максимум, возможно это поможет понять где ошибка.

        Алексей

        Вот ссылка http://11.vh81513.eurodir.ru/ru/sredstva-zashchity-rastenij/gerbitsidy.html
        "Система > Общие настройки > Сервер для опции Сообщения об ошибках выберите Максимум" ставил ошибки не вылетают.
        самое интересное что товар работает как-то через раз. В браузере вылетает ошибка на jquery.min.js:3 . Содержание ошибки ----- Uncaught TypeError: ((n.event.special[g.origType] || (intermediate value)).handle || g.handler).apply is not a function. Уже по новому ставил Joomla. со стандартными шаблонами, не каких дополнений не устанавливал кроме Vertumart. Что бы не делал всегда остается эта ошибка.
        Подскажите как исправить и в чем проблема??

          admin

          admin

          Эта тема обсуждалась на оф.форуме и конкретного решения пока нет. Думаю, что в новых версиях эту проблему решат, а пока можно в Virtuemart > Настройки > Шаблоны отключить опцию Использовать ajax для отображения товаров

        lexa8619

        Нашел ошибку
        Notice: Undefined property: vmrouterHelper::$itemId in /var/www/vh81513/data/www/11.vh81513.eurodir.ru/components/com_virtuemart/router.php on line 116
        Подскажите как от нее избавиться.

          admin

          admin

          Попробуйте обновить vm до последней версии.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*
Для вставки кода заключите его в теги [php] [/php]
*