Модификации товара. Учет остатков. Галерея.

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

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

Использовал mFilter2. Логика такая, создается главный товар (он же категория товара, по сути папка). В главном товаре размещается описание товара, отображаются комментарии, различные модули с рекомендациями дополнительных товаров и т.п.

В главный товар добавляются модификации товара (ресурсы). В модификациях указывается только цвет, размер, заголовок, цена и картинки.

При этом mFilter2 должен отображать фильтр только как radio и в каждом фильтре по умолчанию должны быть выбраны первые пункты. Иначе будет просто список всех товаров. То что получилось можно посмотреть по ссылке выше.

Какие вижу плюсы в этом решении:

1) Удобное представление всех модификаций товаров в виде таблички. Не нужно искать взаимосвязанные товары в общем большом списке.


2) При просмотре заказа сразу понятно какая модификация товара заказа.


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


на распечатанной накладной то же все удобно и понятно


3) Полностью решен вопрос учетом остатков по каждому сочетанию цвет/размер (или любым другим параметрам)

4) Отдельная галерея для каждого товара

5) При выборе параметров товара, все поля фильтра взаимодействуют друг с другом. Т.е. если товар «Черный / 45» отключен или закончился, то radio баттон будет неактивный.

Из минусов, то что у меня не получилось.

1) Не смог вызвать msGallery в чанке mFilter2, поэтому в примере только 1 картинка, а не вся галерея целиком.

2) Не смог поместить кнопку «Добавить в корзину» ниже фильтров. Из — за того, что информация о товаре вызывается в чанке для mSearhc2 не смог сверстать т.к. хотелось.

Следующая заметка
Sendex - отправка рассылки при публикации ресурса
Предыдущая заметка
Переключение контекстов мультиязычного сайта


Комментарии ()

  1. Чикин Артур 09 февраля 2014, 09:36 # 0
    Это же не тутариал, а какой то ченджлог? Или я чего то не понимаю?
    1. Владимир Тельнов 09 февраля 2014, 10:11 # 0
      Это не тутариал, это предложение обсудить возможный вариант реализации работы с параметрами. И надежда на то, что кто то сможет предложить решение по выводу галереи в mFilter2 и вывода чанков в нужных местах.
      1. Чикин Артур 09 февраля 2014, 10:21 # 0
        Так Это предложение о работе?

        Тогда Василий не туда перенес материал, ему не место в Тонкостях и трюках)
        1. Владимир Тельнов 09 февраля 2014, 11:10 # 0
          Пока не предложение о работе. Возможно кто то сможет довести до ума на общественных началах. Тема учета остатков и работы с параметрами здесь обсуждалась неоднократно.

          Если не будет выработано решение общественными силами, то создам предложение о работе с конкретным ТЗ.
    2. Наумов Алексей 09 февраля 2014, 09:56 # 0
      Ох, а если у меня 6 цветов, размеры от 46 до 62, получаем 96 товаров… при отсутствии синхронизации с 1С или чем то подобным — вручную уже не по управляешь…

      А для небольшого магазина — хорошая реализация!
      1. Владимир Тельнов 09 февраля 2014, 10:16 # 0
        Большой или маленький магазин — это другая история. Есть магазины у которых 200000 товаров и вообще нет модификаций товаров. Например для магазина сотовых телефонов, нужно максимум 2-3 цвета и 2-3 варианта объема встроенной памяти. Т.е. всего 9 вариантов модификаций товаров.

        Например Связной вообще не заморачивается, в каталоге связного 9 отдельных товаров
        1. Мордынский Николай 10 февраля 2014, 01:59 # 0
          Владимир я ниже написал почему так, изначально я тоже парился поповоду связки товаров и уменьшения сущностей в базе, но что хорошо для скорости сайта в итоге выльется в геморой при работе с учетом товара.
          У связного по сути правильно сделано и в модексе реализовано также просто есть возможность свернуть товары в 1 и выводить каждый товар на страницу по выбору покупателя.

          Фактически вы своими артикулами дублируете производственные штрих коды которые назначаются производителем товара. Вы можете с помошью связи выводить только главный товар который будет заполняться (контент заголовки и прочее а остальные будут содержать лишь уникальные параметры цвет размер и эти параметры можно грузить на туже страницу)
      2. Виталий Батушев 09 февраля 2014, 17:43 # +1
        У меня сделано с помощью MIGX.
        Есть отдельная таблица с ценами и параметрами варианта товара, которую можно смотреть/править с помощью MIGX.

        Внутренний вид MIGX-записи


        Для mFilter сделаны дополнительные поля товара:

        Заполняется все при импорте автоматически. Можно и руками, хотя и скучно руками колотить.
        1. Николай 09 февраля 2014, 19:00 # 0
          А как ты так сделал TV?
          1. Виталий Батушев 09 февраля 2014, 19:08 # 0
            Ммм, не понял вопроса.
            1. Николай 09 февраля 2014, 19:15 # 0
              Все TV же находятся в зеленой вкладке «Дополнительные поля», а у тебя получилось их сделать как Цвет\Размер\Теги
              1. Виталий Батушев 09 февраля 2014, 19:28 # 0
                Это то, что на последнем изображении? Нет, это не TV, это дополнительные поля товара. Предназначение у них чисто утилитарное — для получения listbox-ов параметров на странице товара. Человек выбирает параметры, происходит AJAX запрос и из MIGX-TV выбирается нужная цена на основании данного запроса.
                Там есть еще дополнительный геморрой. Дело в том, что сумма на отдельные товары рассчитывается простой суммой цен на товар. На другие товары происходит скидка в зависимости от выбранного количества товаров. На третьи существует другая схема, где сумма рассчитывается как бы пакетами. Скажем, цена на 1 шт. товара = 100 руб., а на товар в 3 штуки = 250 руб. При этом при покупке 4 шт. товара расчет делается так: 100 + 250, а не 100*4. Соответственно, 10 шт. = 250+250+250+100.
                1. Владимир Тельнов 09 февраля 2014, 19:31 # 0
                  А смену галерею как то можно прикрутить к этому всему?
                  Можно посмотреть пример сайта?
                  1. Виталий Батушев 09 февраля 2014, 20:07 # 0
                    Пока у меня на локальном серваке.
                    С галереей и описанием (скажем, редакции товара) пока, конечно, некоторая засада. Хотя описание можно добавить как еще одно поле MIGX. Или migx-tv. А связывать по ключевому слову названия редакции.
                    В принципе, ничего не мешает поменять у изображения название на, скажем, артикул или наименование редакции и при смене редакции на странице товара показывать именно это изображение.
                    1. Мордынский Николай 10 февраля 2014, 01:54 # 0
                      Виталий а какие объемы товаров в магазине… скорость работы с тв тестировали… очень любопытно узнать… выглядит весьма удобно
                      1. Виталий Батушев 10 февраля 2014, 02:45 # 0
                        Объемы обещают большие. При этом прайсы производителей очень разные и дикими портянками. Вот это пока моя самая большая проблема.
                        Что касается скорости, то ведь это не «классический» TV, это отдельная таблица:

                        Пока у меня главная затыка со скоростью в меню:

                        Чую, нужно резко поумнеть и перебрать по косточкам свой сниппет для него.
                        1. Мордынский Николай 12 февраля 2014, 10:33 # 0
                          тут был тупой вопрос извиняюсь… утренний тупняк)
        2. Мордынский Николай 10 февраля 2014, 01:13 # +1
          А теперь о том как ведеться учет товаров в 1С или люой другой программе учета… ибо магазин работает строго с оглядкой на складской учет и бухгалтерию иначе бардак…

          Итак любой пук в изменении товара будь то цвет, пуговка или рюшечка это другой штрих код поставщика и отдельная сущность в базе учета… — каждый товар имеющий отдельный штрихкод должен быть забит на сайт как отдельный товар.

          Объединение товаров в минишоп реализовано с помощью связей — создаете связь размер, к примеру, назначаете 1 товар главным остальные цепляете к нему как слейвы, также с цветами… а там уже делаете нужные выборки и выводите покупателю основной товар а селект боксами или как хотите показываете ему опции, пр и этом можете показывать товар который выбирает покупатель. И у каждого товара отдельная галлерея, цены и остаток получаеться… да таблица товаров пухнет но в бух учете это выглядит именно так и сайту работать имено с этим нужно будет. Иначе потом придется разгребать а что жы вы всетаки продали, а что нет. А если под 1 штрихом вам прислали 10 цветов 1 и той же кофточки то это уже называется в ассортименте, и в отчетности это идет как 10 штук 1 товара и все тут…

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

          Если бы плагины можно было цеплять строго к категориям товара (как тв к шаблонам) было бы супер… но василий говорил что это нереализуемо из за структуры самого модх… что очень досадно
          1. Виталий Греков 10 февраля 2014, 02:14 # 0
            Если бы плагины можно было цеплять строго к категориям товара (как тв к шаблонам) было бы супер
            Согласен, тоже ощущаю такую потребность, а так, тоже все с помощью связей реализовываю и считаю, что это удачное решение.
            1. Василий Наумкин 10 февраля 2014, 06:12 # 0
              В этой заметке автор делает ровно также, только объединяет товары через категорию, а не связями, и выводит через mFilter2.

              Неплохая идея, имеет право на существование.
              1. Владимир Тельнов 10 февраля 2014, 08:28 # 0
                Не направите на пусть, как вывести msGallery в чанке mFilter2 и кнопку «Добавить в корзину» н в произвольном месте?
                1. Василий Наумкин 10 февраля 2014, 09:19 # 0
                  Да вроде нет никаких проблем. Нужно просто добавить в чанк вывода товара
                  [[!msGallery?product=`[[+id]]`]]


                  Ну а уж с кнопкой сложностей вообще быть не может. Это обычная форма:
                  <form method="post" class="ms2_form">
                  	<input type="hidden" name="id" value="[[+id]]">
                  	<input type="hidden" name="count" value="1">
                  	<input type="hidden" name="options" value="[]">
                  	<button type="submit" name="ms2_action" value="cart/add">В корзину!</button>
                  </form>
                  
                  1. Владимир Тельнов 10 февраля 2014, 09:51 # 0
                    Большое спасибо. Галерея работает как нужно.
                    Но с кнопкой сложнее. [[+id]] — возвращает id текущей страницы (главная страница, она же категория товара), а нужно получить id страницы, которую нашел mFilter2
                    1. Василий Наумкин 10 февраля 2014, 09:59 # 0
                      Как может id правильно передаваться в галерею, но не передаваться в кнопку?

                      Ну и если указать [[+id]] в контенте страницы — оно пустое. Так что, ты где-то ошибаешься.
                      1. Владимир Тельнов 10 февраля 2014, 10:11 # 0
                        [[!msGallery?product=`[[+id]]`]]
                        вызываю в чанке tpl.mSearch2.row, а кнопку мне нужно вызвать в чанке tpl.mFilter2.outer или в шаблоне страницы категории.
                        1. Василий Наумкин 10 февраля 2014, 10:19 # 0
                          Страница категории никак не узнает id выводимого товара.

                          Нужно или передавать через javascript, или лучше спозиционировать кнопку через CSS. В общем, напряги фантазию.
                          1. Владимир Тельнов 10 февраля 2014, 10:53 # 0
                            Сделал вот так

                            tpl.mSearch2.row
                            <script language="JavaScript">
                            var knopka = '<form method="post" class="ms2_form">	<input type="hidden" name="id" value="[[+id]]">	<input type="hidden" name="count" value="1">	<input type="hidden" name="options" value="[]">	<button type="submit" name="ms2_action" value="cart/add">В корзину!</button></form>'
                            </script>
                            Шаблон
                            <script language="JavaScript">document.writeln(knopka);</script>
                            Убого конечно, нор работает.
              2. Владимир Тельнов 10 февраля 2014, 08:27 # 0
                Единственное неудобство о котором я уже писал и надеюсь когда нибудь оно будет устранено это то, что если в магазине разные виды товара к примеру лифчики и телевизоры они имеют общие плагины
                Согласен, тоже ощущаю такую потребность, а так, тоже все с помощью связей реализовываю и считаю, что это удачное решение.
                По этой причине пришлось отказаться от использования плагина для создания полей. Если все поля всех категорий выводятся одним списком, то получается огромное полотно экранов на 10, при этом 70% полей будут вообще лишние. Забивать параметры товара в такой список полей жутко не удобно.
                1. Александр Котлов 12 февраля 2014, 17:38 # 0
                  Уже не помню кто, предложил супер хак — поля добавленные плагинами можно скрывать через настройку форм — просто нужно узнать их имя!
                  Соответственно можно в зависимости от категории или шаблона убирать лишние поля. Хотя если много будет полей и категорий — то напряжно будет.
                  1. Володя 12 февраля 2014, 17:59 # 0
                    да и там еще есть тонкость одна… все поля скрывать нужно за один раз…
                    Если выйти из редактора форм и потом снова зайти и что то отредактировать то — все пропало…
                    Нужно будет все по новой заполнять. Поэтому я этот этап оставляю на самый последний момент, составляю список у какого шаблона что скрывать и кучкой все скрываю…
                    1. Владимир Тельнов 27 февраля 2014, 10:38 # 0
                      Можно по подробнее, пожалуйста? Что подразумевается под редактором форм и как привязать поля к конкретному шаблону?
                    2. Владимир Тельнов 12 февраля 2014, 18:37 # 0
                      Тестировал 3000 ресурсов по 10-15 TV в каждом, не увидел изменений в производительности. Пока не вижу веских причин отказываться от TV, тем более они они позволяют сделать все что нужно базовыми средствами.
                      1. Alexander 15 февраля 2014, 20:57 # 0
                        Попробуйте сделать фильтр по ним..)
                        1. Владимир Тельнов 15 февраля 2014, 21:15 # 0
                          Уже сделал.
                          1. Alexander 15 февраля 2014, 21:17 # 0
                            Ну тогда, действительно, Василий фигней занимался :)
                      2. Владимир Тельнов 27 февраля 2014, 10:41 # 0
                        Поделитесь хаком. Смотрел настройки минишопа не увидел как можно скрывать поля в зависимости от используемого шаблона.
                        1. Володя 27 февраля 2014, 11:27 # 0
                          Это функционал MODX — joxi.ru/y-gOUxjKTJARR7ER1gU
                          1. Владимир Тельнов 27 февраля 2014, 12:45 # 0
                            Добрался до редактора полей, но вижу толя поля TV и стандартные поля MODx, полей плагина и полей MS2 там не вижу. Или я что то делаю не так?
                            1. Володя 27 февраля 2014, 12:52 # 0
                              сделай поиск по сайту — «немного смекалки»
                  2. Владимир Тельнов 15 февраля 2014, 22:53 # 0
                    Задержка видимая глазом конечно все равно есть, но она есть если вообще отключить TV и пользоваться только постраничным просмотром.
                    1. Володя 18 марта 2014, 13:00 # 0
                      Идея в целом интересная, задумался над этим местом
                      При этом mFilter2 должен отображать фильтр только как radio и в каждом фильтре по умолчанию должны быть выбраны первые пункты. Иначе будет просто список всех товаров.
                      Как сие реализовать?
                      скриптом, чтоб при загрузке страницы щелкал по радибатон?
                      1. Володя 18 марта 2014, 13:18 # 0
                        ага, понял что ерунду спросил.
                        Достаточно установить свойство — «checked»:true
                        и затем вызвать mSearch2.load();
                        1. Владимир Тельнов 18 марта 2014, 13:21 # 0
                          Можно вообще без этого обойтись. Достаточно устно вить лимит количества ресурсов в mFiltr2 равный 1. В этом случае будет оказываться первый по порядку ресурс (товар)
                          1. Володя 18 марта 2014, 14:14 # 0
                            Да так лучше… Можно брать свойства товара и по из значению просто присваивать фильтру стутус — отмечено.
                      Добавление новых комментариев отключено.