msProductKits - удобное управление товарами-комплектами (наборами товаров)
Всем привет!
Сегодня хотел бы представить небольшой компонент под названием msProductKits, назначение которого — обеспечить удобную работу с товарами, представляющими собой комплект (набор) из других товаров. Компонент работает только с товарами miniShop2.
Пара сценариев, чтобы было понятно, для чего можно использовать:
1. Магазин шин и дисков.
В магазине продаются шины, колесные диски, их можно купить по одной штуке.
А еще мы хотим продавать промо-набор, куда входят: шины 4 шт, диски 4 шт, пакеты для хранения шин 4 шт и сертификат на шиномонтаж. При этом пакеты и сертификат отдельно купить нельзя, таких товаров на сайте нет.
2. Магазин производителя акустики.
Производитель выпускает несколько видов колонок, которые вполне себе можно купить по отдельности.
Но еще есть готовый набор, куда входят: 4 двухполосные акустические системы, центральный канал, сабвуфер и усилитель мощности. Этот набор можно купить целиком, на сайте он представлен отдельным товаром, причем его цена ниже, чем если покупать все отдельно. При этом усилитель отдельно не продается, это вообще сторонний усилитель, не этого производителя, он предлагается по партнерской программе.
Наша задача в обоих случаях — это у товара, представляющего собой «Комплект», сделать связи с другими товарами, указать сколько их штук входит в этот комплект, да еще как-то указать, что в этот комплект входят некие другие товары, которых нет на сайте и ссылку на них мы дать не можем.
Административная часть
msProductKits добавляет в карточке товара новую вкладку Комплекты, где можно прописать связи между товарами, а так же указать дополнительные сведения.
Для примера я использую демонстрационный каталог (магазин шин/дисков) со следующей структурой:

У товара появилась новая вкладка, где можно добавить позиции комплекта:

Каждая строка — это товар, являющийся частью комплекта. Товар может быть как ссылкой на существующий товар (msProduct), так и мы можем просто написать его название. Так же можно указать некоторые дополнительные сведения (описание, количество, артикул, производителя).

У товара, который при этом является частью комплекта, в этой вкладке отображаются все комплекты, в состав которых он входит.

Логично, что если товар является комплектом, то один товар — один комплект, а вот как часть товар может входить в любое количество комплектов.
Фронтэнд
На сайте можно вывести информацию при помощи сниппета msProductKits.
Параметры сниппета msProductKits:
Выводим товары, входящие в Комплект:

Выводим все комплекты, в состав которых входит товар:

Послесловие
В принципе компонент небольшой, и его функционал при желании можно реализовать и через MIGX, но это будет не так удобно и презентабельно.
Если есть предложения и идеи по развитию — пишете в комментариях.
Компонент доступен в ModStore: modstore.pro/packages/ecommerce/msproductkits
Сегодня хотел бы представить небольшой компонент под названием msProductKits, назначение которого — обеспечить удобную работу с товарами, представляющими собой комплект (набор) из других товаров. Компонент работает только с товарами miniShop2.
Пара сценариев, чтобы было понятно, для чего можно использовать:
1. Магазин шин и дисков.
В магазине продаются шины, колесные диски, их можно купить по одной штуке.
А еще мы хотим продавать промо-набор, куда входят: шины 4 шт, диски 4 шт, пакеты для хранения шин 4 шт и сертификат на шиномонтаж. При этом пакеты и сертификат отдельно купить нельзя, таких товаров на сайте нет.
2. Магазин производителя акустики.
Производитель выпускает несколько видов колонок, которые вполне себе можно купить по отдельности.
Но еще есть готовый набор, куда входят: 4 двухполосные акустические системы, центральный канал, сабвуфер и усилитель мощности. Этот набор можно купить целиком, на сайте он представлен отдельным товаром, причем его цена ниже, чем если покупать все отдельно. При этом усилитель отдельно не продается, это вообще сторонний усилитель, не этого производителя, он предлагается по партнерской программе.
Наша задача в обоих случаях — это у товара, представляющего собой «Комплект», сделать связи с другими товарами, указать сколько их штук входит в этот комплект, да еще как-то указать, что в этот комплект входят некие другие товары, которых нет на сайте и ссылку на них мы дать не можем.
Административная часть
msProductKits добавляет в карточке товара новую вкладку Комплекты, где можно прописать связи между товарами, а так же указать дополнительные сведения.
Для примера я использую демонстрационный каталог (магазин шин/дисков) со следующей структурой:

У товара появилась новая вкладка, где можно добавить позиции комплекта:

Каждая строка — это товар, являющийся частью комплекта. Товар может быть как ссылкой на существующий товар (msProduct), так и мы можем просто написать его название. Так же можно указать некоторые дополнительные сведения (описание, количество, артикул, производителя).

У товара, который при этом является частью комплекта, в этой вкладке отображаются все комплекты, в состав которых он входит.

Логично, что если товар является комплектом, то один товар — один комплект, а вот как часть товар может входить в любое количество комплектов.
Фронтэнд
На сайте можно вывести информацию при помощи сниппета msProductKits.
Параметры сниппета msProductKits:
- resource — id товара, по-умолчанию текущий ресурс;
- mode — режим работы сниппета, может принимать 2 значения: owner (делаем выборку товаров, которые входят в комплект) или product (делаем выборку тех товаров, в которые входит наш товар как часть комплекта). В режиме product имеет смысл либо делать join таблицы ресурсов, либо получать только id Товаров для последующего вывода их с помощью msProducts;
- tpl — шаблон отображения одной строки;
- sortby, sortdir — сортировка;
- tplWrapper, wrapIfEmpty, outputSeparator, toPlaceholder, toSeparatePlaceholders — давно всем известные параметры;
- ids — укажите 1, чтобы сниппет вернул только id ресурсов вместо полных данных.
Выводим товары, входящие в Комплект:

Выводим все комплекты, в состав которых входит товар:

Послесловие
В принципе компонент небольшой, и его функционал при желании можно реализовать и через MIGX, но это будет не так удобно и презентабельно.
Если есть предложения и идеи по развитию — пишете в комментариях.
Компонент доступен в ModStore: modstore.pro/packages/ecommerce/msproductkits
Комментарии: 31
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Пользователям будет проще. Т.е. по отдельности сумма 35000, ваша выгода — 5000р, ~15%
Здесь история в том, что по идее нужно вызывать msProducts, который отобразит товары так, как нужно (с подключением изображений, параметров и т.д.).
Я для этих случаев просто получал ids товаров, а после передавал их в msProducts:
ДалееХороший компонент. Спасибо :)
Почему-то не срабатывает сниппет в плагине на событие OnDocFormSave:
$modx->runSnippet('!msProductKits', ['resource' => $id, 'mode' => 'owner', 'ids' => 1]);
Если вызывать кэшируемый msProductKits, то вечное сохранение документа. Не подскажите в чем может быть дело? Хотел при сохранении комплекта суммировать стоимость его компонентов и сохранить в price.
Напишите просто нужный вам запрос, он будет не очень сложным.
Хотя, конечно, в целом сработать то должно было) Может еще в чем дело? Сниппет строку вернет, это учитывали?
сейчас в корзину попадает товар с артикулом и названием набора — «Набор такой то», Арт. 0000
что если сделать настройку, чтобы на усмотрение Админа сайта выбирать, отправлять в корзину Набор, или «Товары в наборе по позиционно».
Это было бы удобно, чтобы при оплате в фискальный чек попадал не набор, а позиции из набора.
Но и на фронте тогда вывод нужно кастомизировать для такого вида товаров.
Некоторые товары требуют особенного учета, сертификации. Делать наборы и выставлять их в продажу через интернет-магазин — нагрузка на бухгалтерию и гемморой.
Если бы наборы товаров продавались как набор, но в фискальный чек попадали поштучно, это было бы супер удобно!
За такой компонент я бы и заплатил ))
У меня не было такой задачи… я вообще в основном все сделал только для того, чтобы в админке этим было удобно управлять.
Советую посмотреть в сторону msSetInCart, может он даст нужный функционал?
стандартных чанков tpl
Есть форма распечатывания заказа из админки по методу modx.pro/howto/17280.
Пытаюсь добавить туда состав комплекта — мне нужно просто получить список id товаров, включенных в комплект. Но, почему-то сниппет в данном чанке не срабатывает (на страницах сайта во фронтенде работает нормально).
Как ещё можно получить id товаров из комплекта?
Я так понимаю, у вас там некий файл с кодом, где нужны id товаров?
Сделайте запрос в бд напрямую, не запускайте сниппет.
Вот вырезка кода, только поправьте ее, я просто скопировал кусок:
Там нет $modx->resource, здесь и возникает ошибка…
Подскажите, как правильно составлять наборы при выгрузке товаров через mSync? Делать прямые запросы на добавление этих связей? Собираюсь делать в событии где известен id ресурса.
Что касается интеграции с mSync — вам придется самим думать как это сделать, руками создавать записи в БД. Никаких других механизмов нет.
Смотрите схему БД, там всё просто: github.com/createit-ru/msProductKits/blob/master/core/components/msproductkits/model/schema/msproductkits.mysql.schema.xml