MiniShop3: итоги февраля и версия 1.6.0

За февраль выпустили четыре релиза — с 1.4.0 до 1.6.0. Переработали авторизацию, добавили уведомления, переписали личный кабинет. 242 файла, 36 закрытых задач. Расскажу по порядку, начиная с самого крупного.



Авторизация: одна cookie вместо четырёх хранилищ



Это изменение назревало давно. Токен авторизации покупателя хранился одновременно в четырёх местах: localStorage в браузере, PHP-сессия на сервере, таблица в базе и поле в объекте msCustomer. Четыре источника правды — и ни один из них не был главным.

На практике это приводило к конкретной проблеме: гость добавляет товары в корзину, логинится — и корзина пропадает. Токены рассинхронивались, и корзина «терялась» между старым и новым токеном.

Теперь один httpOnly cookie ms3_token — единственный источник правды. Сервер ставит, сервер читает. JavaScript доступа не имеет — закрыт вектор XSS-атаки. Токен не светится в URL-параметрах. Для межсайтовых запросов поддерживается Authorization: Bearer.

При логине токен не пересоздаётся — гостевая корзина сохраняется. При выходе старый токен инвалидируется, генерируется свежий анонимный. Обратная совместимость сохранена — middleware прозрачно транслирует cookie в существующий формат, контроллеры не потребовали изменений.

Notification Center



В 1.4.0 начали нормально работать уведомления о смене статуса заказа — email и Telegram. Настраиваются через админку: кому отправлять, какой шаблон использовать. Шаблоны — обычные чанки с поддержкой @FILE.

Личный кабинет: рефакторинг



До 1.6.0 в ЛК жило три отдельных JS-модуля, каждый сам по себе — со своим клиентом, обработкой ошибок и нативными диалогами подтверждения. Теперь всё интегрировано в архитектуру ms3:

  • AuthUI — формы логина/регистрации
  • CustomerUI — отмена заказов, управление адресами
  • CustomerAPI — общий клиент для всех операций покупателя
Единый API-клиент, единые хуки, единые селекторы. Нативные confirm() заменены на Bootstrap Modal — с автоматическим выбором языка и возможностью декларативной привязки через data-атрибуты.

Заодно перевели URL заказов с integer ID на UUID — не раскрывает количество заказов в системе.

Отмена заказа покупателем



Частый запрос — дать покупателю возможность отменить заказ из ЛК. Кнопка появляется в списке заказов и на странице деталей. Статусы, в которых отмена разрешена, настраиваются (по умолчанию — новый и оплаченный). Есть хуки для кастомной логики.

Селекторы и data-атрибуты



Все CSS-селекторы фронтенда собраны в единый конфиг Selectors.js. Переопределяются из темы без переписывания JS. Параллельно разметка переведена на data-ms3-* атрибуты — меньше конфликтов со стилями темы. CSS-классы сохранены как fallback.

Устойчивость к ошибкам



Несколько исправлений, которые не видны снаружи, но важны:

  • MySQL reconnect при установке. На хостингах с коротким таймаутом соединение обрывалось между скачиванием пакетов и миграциями. Теперь resolver восстанавливает его автоматически.
  • Проверка сервиса ms3. Если MiniShop3 не загрузился — корректный 503 вместо необработанного Exception.
  • Идемпотентные миграции. Повторный запуск не ломает базу.

Community



Спасибо Ivan Bochkarev за контрибьюты. Часть задач в этом цикле — прямые запросы из issues: #17 (data-атрибуты), #18 (селекторы), #68 (обработка отсутствия сервиса), #78 (пагинация заказов), #117 (отмена заказа).

Дополнительная информация



Полный список изменений — в CHANGELOG. Все релизы доступны в GitHub Releases и в репозитории modstore. Баг-репорты и предложения — в issues.
Николай Савин
03 марта 2026, 22:08
modx.pro
2 537
+13
Поблагодарить автора Отправить деньги

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

Артур Шевченко
03 марта 2026, 22:20
+1
Приятно, что я вдохновил тебя использовать data-атрибуты вместо классов)))

А если серьезно, ты молодец! И твоя продуктивность восхищает!
    Николай Савин
    03 марта 2026, 22:23
    +1
    Да в этом месяце больше Ваня старался, львиная доля работы — его заслуга.
      Артур Шевченко
      03 марта 2026, 22:25
      +1
      Он тоже молодец. Он ещё и развитие ядра решил расшевелить, откуда только столько энтузиазма)))
        Иван Бочкарев
        04 марта 2026, 13:01
        +1
        Не за что! Благое дело делаем.
      Bor
      Bor
      05 марта 2026, 23:57
      0
      Добрый день. Спасибо за работу.
      Есть небольшой вопрос, Modx3, minishop3 1.6.0 — как только ресурс перевожу в статус категории товаров, то отключается визуальный редактор и видна просто верстка. При этом, галочка в настройках не меняется, т.е. визуальный редактор по настройкам включен, но он не отображается(( в чем может быть ошибка?
        Иван Бочкарев
        06 марта 2026, 09:11
        0
        Спасибо за информацию — проверим. Какой редактор используете?
      Дмитрий
      16 марта 2026, 10:59
      0
      Добрый день! Периодически удаляются заполненные значения опций товара (вроде при нажатии Обновить URI-ссылки, так же после редактирования шаблона).
      И пропал photo-screen.ru/i/iBsrZbZ66 создать Документ.
      Ольга
      19 апреля 2026, 14:08
      0
      По админке, минишоп 3.
      Цена доставки не меняется после изменения администратором способов оплаты и доставки. Намертво прилипает.
      Есть ручная возможность принудительно менять цифры в админке на странице заказа?
      Необходимо предусмотреть возможность добавления и наценок скидок в % отношении, для настроек в поле добавления способов доставки и оплаты. Цена доставки не меняется после изменения администратором, способов оплаты и доставки.
      временно поправлено костылями, ждем рабочее решение.
        Николай Савин
        19 апреля 2026, 19:29
        0
        Необходимо предусмотреть возможность добавления и наценок скидок в % отношении, для настроек в поле добавления способов доставки и оплаты.
        Здравствуйте. Это есть с самого первого релиза, также как и в MS2
          Ольга
          21 апреля 2026, 13:42
          0
          К сожалению % возможен только на увеличение, Delivery.php в строке $addPrice = $cost / 100 * $percent; мы временно закостылили добавив к вашей функции вариант если менеджер ввел -%, сперва хотели добавить собственный класс, но это тот еще гемор если нужно учитывать кучу стандартных данных. втч по какой то причине невозможностью его зарегистрировать через системные настройки — отсутствует поле ms3_services.
          Вообще Было бы лучше если в настройках доставки и способов оплаты, добавить отдельное поле скидка. К примеру в нашем варианте самовывоз подразумевает скидку в 15%.
            Николай Савин
            21 апреля 2026, 13:46
            0
            отсутствует поле ms3_services
            А почему поле должно присутствовать? Его никогда не было. Такой способ подключения характерен для MiniShop2. MS3, как и MODX3 использует DI контейнеры
            docs.modx.pro/components/minishop3/development/services

            И есть пошаговое описание, как сменить класс docs.modx.pro/components/minishop3/development/services#zamena-servisov
              Ольга
              21 апреля 2026, 13:53
              0
              тогда у вас противоречие с этим разделом docs.modx.pro/components/minishop3/settings где это описано как системная настройка.
                Николай Савин
                21 апреля 2026, 14:00
                0
                Это ошибка. Спасибо что нашли. Актуализирую описание системных настроек.
                Расширение сервисов я вам показал. Там есть конкретные примеры как расширить класс заказа.
                что касается отрицательных наценок на доставку — честно скажу это неожиданный кейс. Посмотрим что можно сделать и нужно ли.
                  Ольга
                  21 апреля 2026, 14:39
                  0
                  👍
                  Решите пож. проблему с обновлением стоимости в зависимости от смены способа доставки и оплаты с админки на всех этапах заказа, с возможностью ручной корректировки цифры доставки,

                  Гибкость и контроль самом деле очень важен, к примеру для доставки по городу когда цена курьера может сильно плавать в ту или иную сторону.
                  Добавьте поле скидка в настройки способа доставки и оплаты. отрицательная наценка — кринжа.)) к примеру в нашем случае Самовывоз предусматривает скидку, наличка предусматривает еще одну скидку.
                  В остальном плагин супер. Идеально подошел для сайта доставки еды.
      Ольга
      22 апреля 2026, 13:55
      0
      Подтверждение E-mail не работает, не после регистрации, кнопка подтверждения в демо версии кабинета вообще не запускает крипт, насколько мы поняли классы отрабатывающие почту уже есть, но во фронтенде они пока не обозначены. Так же нет какого нибудь внятного упоминания в туториале, как эти классы использовать… Есть где то информация как это правильно натянуть? И еще ссылка забыли пароль.
      PS письмо с ссылкой с токеном потьверждения юзер получает, но ссылка выводит на главную страницу, и никак не меняет статус почты,
        Иван Бочкарев
        23 апреля 2026, 11:28
        0
        Здравствуйте!

        Проверьте на последней актуальной версии 1.10.0-beta1 и вернитесь с обратной связью
          Ольга
          23 апреля 2026, 15:17
          0
          Нет не работает, функуця sendVerificationEmail отрабатывет, письмо приходит на почту, но обратная ссылка имеет невнятный адрес, в общем до verifyToken дело не доходит, временно создали свой костыль которые принимает get и меняет поля юзера email_verified_at и used_at напрямую в бд. Повторная верификация должна запускаться через JS но она вообще не колышется, даже ошибок нет. просто мертвая кнопка.
            Иван Бочкарев
            23 апреля 2026, 15:33
            0
            Спасибо за обратную связь — возьмем в работу
                Ольга
                26 апреля 2026, 19:15
                0
                Спасибо!
                Подскажите еще один момент! нам надо куда то пристроть код отправки уведомления на почту администратора, в момент появления нового заказа. Куда лучше всего приютить строчку, чтобы не ломать существующие классы, заменой своими, или их правкой? с учетом того что файлы могут обновляться с пакетами.
                  Николай Савин
                  26 апреля 2026, 23:10
                  0
                  Что вы имеете ввиду под кодом отправки уведомлений на почту?
                  Вообще у нас есть центр уведомлений, где вы можете задать Email шаблоны для каждого статуса покупателю и менеджеру (в том числе файловые). Можно сделать отложенную отправку с настраиваемой задержкой отправления. Можно использовать телеграм и sms каналы отправки данных. Можно использовать события.

                  Документация docs.modx.pro/components/minishop3/interface/notifications
                    Ольга
                    27 апреля 2026, 00:18
                    0
                    Все это конечно увлекательно за исключением маленькой детали — отсутствия поля ms3_email_managers в настройках, вот и интересуемся куда можно ткнуть строку с набором мыл чтобы все заработало. В данный момент работает только уведомление для покупателя.
                      Иван Бочкарев
                      27 апреля 2026, 04:34
                      0
                      Адреса нужно задавать в системных настройках MODX (область заказов miniShop3 / ms3_order), а не искать отдельное поле с именем ms3_email_managers в центре уведомлений — там настраиваются шаблоны и каналы по событиям, а список получателей для менеджеров — через эту опцию (и аналоги для телефона/Telegram: ms3_phone_manager, ms3_telegram_manager).

                        Ольга
                        27 апреля 2026, 12:43
                        +1
                        Спасибо большое! классическая невнимательность. мы искали настройку в разделе уведомление
                      Николай Савин
                      27 апреля 2026, 10:55
                      0
                      Ольга, спасибо вам что подсвечиваете проблемы. Было бы замечательно, если бы наше общение происходило в более дружеском ключе. Пока большинство ваших сообщений выглядит так, что вы оплатили весь цикл разработки и теперь как заказчик с полным правом требуете устранения проблем.
                      MiniShop3 — это бесплатный open source, без техподдержки. Вся работа тут происходит на энтузиазме по мере свободного времени и настроения.
                      Вы всегда можете предложить свое видение реализации и исправление найденных ошибок через механизм pull request, либо заказать доработку у программистов.
                        Ольга
                        27 апреля 2026, 12:34
                        +1
                        Это вам спасибо за отличное решение!, мы и стараемся подсветить проблемы. И более того продукт вполне себе стоит того что за него не жалко и денег дать уже на данном этапе. И мы не требуем исправления, мы исправляем его временно сами, и подсвечиваем трабу, рекомендуем к мерам, или просим совета если что то непонятно. Если Вас чем то задели мои посты или вопросы, могу более не писать. ((
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          33