Обновление цен в Minishop2

Добрый день!
Буду благодарен, если кто-то предложить оптимальное решение вопроса.
Есть сайт аптеки — магазин на Minishop2.

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

1. На сайте установлено дополнение msImportExport;
2. Из внешней базы данных аптеки выгружается таблица с данными (Артикул, Наименование, Цена, Производитель и т.д.);
3. Товарам на сайте присвоены артикулы, идентичные товарам из внешней базы данных;
4. Таблица переводится в формат msImportExport и по критерию совпадения артикула происходит изменение цены товара на сайте на актуальную.

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

Т.е. на этой неделе выгружено 3500 товаров — их цены вышеуказанным методом легко обновляются.
Но в прошлом месяце прайс-лист содержал (к примеру) 4000 товаров. Т.е. статус 500 товаров на сегодняшний день — «нет в наличии».

И с этими 500-ми отсутствующими в последнем прайсе товарами, при обновлении, понятное дело, ничего не происходит. А в идеале на таком товаре должна стоят цена «0» и статус «Нет в наличии».

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

Но последнее не обязательно — это легко можно сделать при помощи того же msImportExport — просто отфильтровав все товары с нулевой ценой и проставив нужное значение.
Futuris
02 апреля 2020, 13:18
modx.pro
1 050
0

Комментарии: 9

Павел Бигель
02 апреля 2020, 16:44
0
Вы сами себе что-то усложнили задачу.
Если в выгрузке приходило 5000 товаров, а потом выгрузилось 4000, то 1000 можно выключить процессером.
Как вариант, можно формировать каждый элемент в json объект и на основании diff выключать остатки.
    Futuris
    02 апреля 2020, 16:54
    0
    Выключать товары, не попавшие в последний прайс товаров нам бы не хотелось. Сегодня их нет, а завтра появятся снова. Нужно именно, на не обновившиеся на определенную дату товары выставлять цену 0 и статус «Нет в наличии».
      Павел Бигель
      02 апреля 2020, 16:56
      0
      Ну сегодня товара нет — ставьте цену 0 и «нет в наличии». Завтра появился — будет цена и наличие
        Futuris
        03 апреля 2020, 14:50
        0
        Я так и делаю, просто в табличном экспорте методом фильтрации. Но вопрос был о том, возможно ли сделать скрипт, который способен учитывать дату последнего обновления и на не обновившиеся товары может выставлять цену «0».
          Павел Бигель
          03 апреля 2020, 14:51
          0
          В PHP есть демоны.
          Пишите демон
            Павел Голубев
            03 апреля 2020, 18:08
            0
            Да можно конечно. Добавить 1 одно условие в экспорт цен и готово.
              Futuris
              06 апреля 2020, 11:31
              0
              Вы имеете в виду, что это можно сделать штатными средствами msImportExport?
                Павел Голубев
                06 апреля 2020, 19:26
                0
                Нет, залезть внутрь msImportExport и добавить условие
      Александр
      03 июня 2020, 14:13
      0
      В документации описан плагин на событие: msieOnCompleteImportProduct с помощью которого можно снять с публикации товары, не попавшие в прайс лист. Несколько изменив этот плагин думаю возможно товарам, не попавшим в прайс установить цену, равную нулю и изменить содержимое поля «Наличие» на нужное.
      Причем, судя по документации это возможно именно при импорте, а не обновлении товаров. Так как у события: msieOnCompleteUpdateProduct отсутствует переменная data — строки с ID товарами через запятую которые были добавлены/обновлены
      Хотя возможно это неточность в документации, не проверял.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        9