MiniShop3 1.2.0 - 1.3.0 Самое интересное

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

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


Виджет msOrderTotal обновляется на лету.


Ранее был доступен статичный сниппет, для желающих отобразить на экране краткую статистику по заказу, без корзины. Добавил свежий чанк для оформления, добавил стилей, добавил поддержку в JS. Теперь он обновляется как и корзина. на любые события.

Вызов на странице:
<div id="orderTotalBlock">
       {'!msOrderTotal' | snippet :'selector' => '#orderTotalBlock']}
   </div>
Что покажет:

<span class="ms3-order-total">
    <span class="ms3-order-total__count">10</span>
            <span class="ms3-order-total__cost">14400 руб.</span>
    </span>
Добавили товар — сумма обновилась. Убрали — тоже. Без перезагрузки страницы.

Товары из дополнительных категорий



Выяснился неприятный баг. В pdoTools по умолчанию вшита поддержка доп категорий минишопа. Когда мы вызываем сниппет msProducts — тот в свою очередь поручает всю работу pdoTools — который не работает с MiniShop3. Пришлось взять всю работу на себя и прямо внутри сниппета реализовать работу с категориями. Как физической, так и виртуальной. Заодно решил еще одну фундаментальную проблему.

PdoTools, показывая в категории все товары, в том числе вложенные в дочерние категории, строит довольно неприятный запрос в базу данных. Он берет текущую категорию и засовывает в запрос перечень ID ВСЕХ вложенных ресурсов, не обращая внимания, товары это или категории товаров. Итого в запросе могут быть десятки тысяч ID. Я эту проблему решил, сократив запрос на тестовом сайте количество ID с 40 000+ до 20+ (просто 20, без тысяч). Это значит теперь каталог будет строиться существенно быстрее, потребляя меньше памяти.

Сразу же сделал PR для miniShop2 — надеюсь @Евгений Webinmd который любезно присматривает за старичком проверит его и выпустит релиз.

Новый тип поля — Выпадающий список


В разделе админки «Свои поля» появился новый тип — выпадающий список с фиксированными значениями.

Как создать:

1. Идём в Приложения → MiniShop3 → Утилиты → Свои поля
2. Создаём новое поле, выбираем тип «Выпадающий список»
3. В поле «Опции» указываем варианты в формате:
new==Новый
used==Б/У
refurbished==Восстановленный
Формат: значение==подпись (каждый вариант с новой строки).
В карточке товара появится выпадающий список с этими вариантами.

Автоматический пересчёт стоимости


Теперь стоимость заказа пересчитывается автоматически когда:
  • Меняете способ доставки
  • Меняете способ оплаты
  • Добавляете/удаляете товары из корзины
Порог бесплатной доставки тоже работает корректно. Если у способа доставки указано free_delivery_amount = 5000, то при сумме корзины от 5000₽ доставка станет бесплатной автоматически.

Совместимость с MySQL 8.0


Если у вас MySQL версии 8.0 и выше — теперь всё работает без ошибок. В MySQL 8 появились новые зарезервированные слова, из-за которых некоторые запросы падали. Исправлено.

Валидация заказа


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

Настройка правил: Приложения → MiniShop3 → Настройки → Доставка → (выбрать доставку) → Правила валидации.

Админка: вложенные вкладки товара


Страница редактирования товара стала удобнее. Вкладка «Товар» теперь содержит подвкладки:
  • Свойства — основные поля товара
  • Галерея — изображения
  • Категории — привязка к категориям
  • Связи — связанные товары
  • Опции — цвет, размер и т.д.
Это упорядочивает интерфейс, особенно когда у товара много данных.

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

Для разработчиков: Plugin Registry


Если вы пишете свои компоненты и хотите добавить вкладку в карточку товара — теперь это просто:
window.MS3ProductTabsRegistry.register({
    key: 'my-custom-tab',
    title: 'Мои данные',
    component: MyVueComponent
});
Ваша вкладка появится рядом со стандартными. Работает без пересборки MiniShop3. Можно добавлять вкладки как на Vue, так и на extJS

Прочие исправления


  • Корзина больше не пропадает после авто-регистрации клиента
  • Галерея работает стабильно (загрузка/удаление изображений)
  • Пагинация в настройках производителей и связей товаров
  • Email-уведомления отправляются корректно
  • Множество мелких улучшений интерфейса
Николай Савин
30 января 2026, 20:09
modx.pro
743
+11
Поблагодарить автора Отправить деньги

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

Ольга
31 января 2026, 21:46
0
У меня без перезагрузки страницы вообще данные не меняются нигде не в корзине, не в msOrderTotal, товары в корзине удаляются но исчезают только после перезагрузки. Пришлось временно подключать Jquery. Что не так не пойму, в минишоп2 таких траблов не было, все работало с коробки.
    Николай Савин
    31 января 2026, 22:33
    0
    Какую версию MiniShop3 используете? Покажите вызов сниппета корзины
      Ольга
      01 февраля 2026, 19:06
      0
      1.3
      по разному пробовали к примеру
      {'!msCart' | snippet: ['tpl' => 'tpl.msCart']}
      может конечно дело в selector
        Николай Савин
        01 февраля 2026, 22:22
        0
        может конечно дело в selector
        Именно так. Параметр selector отвечает именно за обновление корзины на лету, без него JS просто не знает куда вставлять обновленную корзину.
          Ольга
          03 февраля 2026, 03:17
          0
          да так и есть, упустили этот момент в туториале. впервые работаем с модх)) кстати у вас ошибка в тексте про order total в описание кода пропущена [. все ломается сразу))
    Дмитрий
    03 февраля 2026, 10:50
    0
    При добавлении tv- migx для категории товара Minishop3 поле типа richtext шакалит, может сталкивались с таким?
      Дмитрий
      03 февраля 2026, 13:37
      0
      Подскажите, пожалуйста, пытаюсь добавить свое кастомное поле в свойства товара MiniShop3 1.3.0-beta-1.
      MiniShop3 — Утилиты — Свои поля — Создать поле. Форму заполняю как у вас в примере:
      Ключ: wholesale_price
      Название: Оптовая цена
      xtype: numberfield
      dbtype: decimal
      Precision: 12,2
      phptype: float
      Default: NULL
      Index: NONE

      В результате получаю ошибку — Ошибка создания Failed to create field in database
        Николай Савин
        04 февраля 2026, 19:54
        0
        Попробовал на чистом, с нуля поднятом сайте — ошибку подтвердить не получилось. Все работает. Возможно проблема локальная или связана с конкретно вашим софтом Уточните какая у вас СУБД, версия PHP?
      Ольга
      04 февраля 2026, 19:10
      0
      msOrderTotal регистрирует все изменения только пока браузер открыт, после нового открытия браузера все пусто, пока не произвести действие с корзиной или товаром.
        Наумов Алексей
        06 февраля 2026, 10:15
        0
        Привет! Хоть у ms3 указана совместимость с php >= 8.1, однако тянутся библиотеки symfony/*, которые просят php >= 8.2.
          Ivan K.
          06 февраля 2026, 12:29
          0
          Более того, если используется на сайте 8.1 — то установку «клинит», сайт перестает работать вообще, выводится ошибка типа минимальная версия 8.2. И с другими компонентами тоже самое (mFilter и mSearch)
            Наумов Алексей
            07 февраля 2026, 16:02
            0
            Да, есть такое) при попытке установить на 8,1 сломается все с концами
              Николай Савин
              07 февраля 2026, 19:12
              0
              Это при актуальном 8.5 то. Может не стоит пытаться оживить давно умирающего дедушку?
                Наумов Алексей
                07 февраля 2026, 21:29
                0
                конечно нет, просто в описании компонента нужно актуализировать версию пэхэпэ
                  Ivan K.
                  07 февраля 2026, 22:08
                  0
                  Николай сделай пожалуйста, невозможность установки компонентов если версия меньше 8.2.
                  А то если на сайте 8.1, потребуется восстановление из резервной копии) после попытки установить компонент.
                    Николай Савин
                    08 февраля 2026, 21:20
                    +1
                    Переключил минммальную версию в modStore. Программно заменю при следующем обновлении
            Ольга
            25 февраля 2026, 15:07
            0
            Подскажите, никак не получается понять почему — почему вывод корзины не работает после авторизации? причем добавление товаров уже после авторизации, ничего не решает, корзины не видно, так же не видно мини корзинки, все пусто. Может ге в системе что то щелкнуть нужно? типа сессий, итд?
              Николай Савин
              25 февраля 2026, 15:21
              0
              Сложно сказать. Впервые про такую проблему слышу. Вы можете написать мне в телеграм доступы — вместе посмотрим
              Дмитрий
              02 марта 2026, 15:37
              0
              Добрый день! При обновлении modx 3.1.2 до 3.2.0 появились ошибки
              Fatal error: Uncaught TypeError: array_diff_key(): Argument #1 ($array) must be of type array, string given in /home/setup/includes/upgrade.install.php:254 Stack trace: #0 /home/setup/includes/upgrade.install.php(254): array_diff_key('{"mscategory_sa...', Array) #1 /home/setup/includes/runner/modinstallrunnerweb.class.php(78): include('/home/hostcweb/...') #2 /home/setup/includes/runner/modinstallrunner.class.php(49): modInstallRunnerWeb->execute(1) #3 /home/setup/controllers/install.php(34): modInstallRunner->run(1) #4 /home/setup/includes/request/modinstallrequest.class.php(81): include('/home/hostcweb/...') #5 /home/setup/index.php(30): modInstallRequest->handle() #6 {main} thrown in /home/setup/includes/upgrade.install.php on line 254
              , оказалось, что в modx_access_policies у modx_access_policies стоял 0 template, а в data
              "{\"mscategory_save\":true,\"msproduct_save\":true,\"msproduct_publish\":true,\"msproduct_delete\":true,\"msorder_save\":true,\"msorder_view\":true,\"msorder_list\":true,\"msorder_remove\":true,\"mssetting_save\":true,\"mssetting_view\":true,\"mssetting_list\":true,\"msproductfile_save\":true,\"msproductfile_generate\":true,\"msproductfile_list\":true}"
              , убрал лишние кавычки и /, поставил 8 шаблон руками, после этого modx обновился. Это баг minishop3 или я где-то напортачил?
              Дмитрий
              02 марта 2026, 15:48
              0
              так же при обновлении minishop3 до версии 1.5.0-beta1 ошибка
              [MiniShop3] System routes are in: core/components/minishop3/config/routes/
              [MiniShop3] Scheduler not installed, skipping task registration. Install Scheduler component to enable background task processing.
              PHP warning: Undefined array key "desc"
              PHP warning: Undefined array key "desc"
              Успешно установлен пакет minishop3-1.5.0-beta1
              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
              23