MiniShop3: итоги февраля и версия 1.6.0
За февраль выпустили четыре релиза — с 1.4.0 до 1.6.0. Переработали авторизацию, добавили уведомления, переписали личный кабинет. 242 файла, 36 закрытых задач. Расскажу по порядку, начиная с самого крупного.
Это изменение назревало давно. Токен авторизации покупателя хранился одновременно в четырёх местах: localStorage в браузере, PHP-сессия на сервере, таблица в базе и поле в объекте msCustomer. Четыре источника правды — и ни один из них не был главным.
На практике это приводило к конкретной проблеме: гость добавляет товары в корзину, логинится — и корзина пропадает. Токены рассинхронивались, и корзина «терялась» между старым и новым токеном.
Теперь один httpOnly cookie ms3_token — единственный источник правды. Сервер ставит, сервер читает. JavaScript доступа не имеет — закрыт вектор XSS-атаки. Токен не светится в URL-параметрах. Для межсайтовых запросов поддерживается Authorization: Bearer.
При логине токен не пересоздаётся — гостевая корзина сохраняется. При выходе старый токен инвалидируется, генерируется свежий анонимный. Обратная совместимость сохранена — middleware прозрачно транслирует cookie в существующий формат, контроллеры не потребовали изменений.
В 1.4.0 начали нормально работать уведомления о смене статуса заказа — email и Telegram. Настраиваются через админку: кому отправлять, какой шаблон использовать. Шаблоны — обычные чанки с поддержкой @FILE.
До 1.6.0 в ЛК жило три отдельных JS-модуля, каждый сам по себе — со своим клиентом, обработкой ошибок и нативными диалогами подтверждения. Теперь всё интегрировано в архитектуру ms3:
Заодно перевели URL заказов с integer ID на UUID — не раскрывает количество заказов в системе.
Частый запрос — дать покупателю возможность отменить заказ из ЛК. Кнопка появляется в списке заказов и на странице деталей. Статусы, в которых отмена разрешена, настраиваются (по умолчанию — новый и оплаченный). Есть хуки для кастомной логики.
Все CSS-селекторы фронтенда собраны в единый конфиг Selectors.js. Переопределяются из темы без переписывания JS. Параллельно разметка переведена на data-ms3-* атрибуты — меньше конфликтов со стилями темы. CSS-классы сохранены как fallback.
Несколько исправлений, которые не видны снаружи, но важны:
Спасибо Ivan Bochkarev за контрибьюты. Часть задач в этом цикле — прямые запросы из issues: #17 (data-атрибуты), #18 (селекторы), #68 (обработка отсутствия сервиса), #78 (пагинация заказов), #117 (отмена заказа).
Полный список изменений — в CHANGELOG. Все релизы доступны в GitHub Releases и в репозитории modstore. Баг-репорты и предложения — в issues.
Авторизация: одна 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 — общий клиент для всех операций покупателя
Заодно перевели 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.
Поблагодарить автора
Отправить деньги
Комментарии: 33
Приятно, что я вдохновил тебя использовать data-атрибуты вместо классов)))
А если серьезно, ты молодец! И твоя продуктивность восхищает!
А если серьезно, ты молодец! И твоя продуктивность восхищает!
Да в этом месяце больше Ваня старался, львиная доля работы — его заслуга.
Он тоже молодец. Он ещё и развитие ядра решил расшевелить, откуда только столько энтузиазма)))
Не за что! Благое дело делаем.
Добрый день. Спасибо за работу.
Есть небольшой вопрос, Modx3, minishop3 1.6.0 — как только ресурс перевожу в статус категории товаров, то отключается визуальный редактор и видна просто верстка. При этом, галочка в настройках не меняется, т.е. визуальный редактор по настройкам включен, но он не отображается(( в чем может быть ошибка?
Есть небольшой вопрос, Modx3, minishop3 1.6.0 — как только ресурс перевожу в статус категории товаров, то отключается визуальный редактор и видна просто верстка. При этом, галочка в настройках не меняется, т.е. визуальный редактор по настройкам включен, но он не отображается(( в чем может быть ошибка?
Спасибо за информацию — проверим. Какой редактор используете?
у меня с TinyMCE Rich Text Editor не работает
Принято, взял в работу
спасибо
Добрый день! Периодически удаляются заполненные значения опций товара (вроде при нажатии Обновить URI-ссылки, так же после редактирования шаблона).
И пропал photo-screen.ru/i/iBsrZbZ66 создать Документ.
И пропал photo-screen.ru/i/iBsrZbZ66 создать Документ.
Создал issue github.com/modx-pro/MiniShop3/issues/153
спасибо
По админке, минишоп 3.
Цена доставки не меняется после изменения администратором способов оплаты и доставки. Намертво прилипает.
Есть ручная возможность принудительно менять цифры в админке на странице заказа?
Необходимо предусмотреть возможность добавления и наценок скидок в % отношении, для настроек в поле добавления способов доставки и оплаты. Цена доставки не меняется после изменения администратором, способов оплаты и доставки.
временно поправлено костылями, ждем рабочее решение.
Цена доставки не меняется после изменения администратором способов оплаты и доставки. Намертво прилипает.
Есть ручная возможность принудительно менять цифры в админке на странице заказа?
Необходимо предусмотреть возможность добавления и наценок скидок в % отношении, для настроек в поле добавления способов доставки и оплаты. Цена доставки не меняется после изменения администратором, способов оплаты и доставки.
временно поправлено костылями, ждем рабочее решение.
Необходимо предусмотреть возможность добавления и наценок скидок в % отношении, для настроек в поле добавления способов доставки и оплаты.Здравствуйте. Это есть с самого первого релиза, также как и в MS2
К сожалению % возможен только на увеличение, Delivery.php в строке $addPrice = $cost / 100 * $percent; мы временно закостылили добавив к вашей функции вариант если менеджер ввел -%, сперва хотели добавить собственный класс, но это тот еще гемор если нужно учитывать кучу стандартных данных. втч по какой то причине невозможностью его зарегистрировать через системные настройки — отсутствует поле ms3_services.
Вообще Было бы лучше если в настройках доставки и способов оплаты, добавить отдельное поле скидка. К примеру в нашем варианте самовывоз подразумевает скидку в 15%.
Вообще Было бы лучше если в настройках доставки и способов оплаты, добавить отдельное поле скидка. К примеру в нашем варианте самовывоз подразумевает скидку в 15%.
отсутствует поле ms3_servicesА почему поле должно присутствовать? Его никогда не было. Такой способ подключения характерен для MiniShop2. MS3, как и MODX3 использует DI контейнеры
docs.modx.pro/components/minishop3/development/services
И есть пошаговое описание, как сменить класс docs.modx.pro/components/minishop3/development/services#zamena-servisov
тогда у вас противоречие с этим разделом docs.modx.pro/components/minishop3/settings где это описано как системная настройка.
Это ошибка. Спасибо что нашли. Актуализирую описание системных настроек.
Расширение сервисов я вам показал. Там есть конкретные примеры как расширить класс заказа.
что касается отрицательных наценок на доставку — честно скажу это неожиданный кейс. Посмотрим что можно сделать и нужно ли.
Расширение сервисов я вам показал. Там есть конкретные примеры как расширить класс заказа.
что касается отрицательных наценок на доставку — честно скажу это неожиданный кейс. Посмотрим что можно сделать и нужно ли.
👍
Решите пож. проблему с обновлением стоимости в зависимости от смены способа доставки и оплаты с админки на всех этапах заказа, с возможностью ручной корректировки цифры доставки,
Гибкость и контроль самом деле очень важен, к примеру для доставки по городу когда цена курьера может сильно плавать в ту или иную сторону.
Добавьте поле скидка в настройки способа доставки и оплаты. отрицательная наценка — кринжа.)) к примеру в нашем случае Самовывоз предусматривает скидку, наличка предусматривает еще одну скидку.
В остальном плагин супер. Идеально подошел для сайта доставки еды.
Решите пож. проблему с обновлением стоимости в зависимости от смены способа доставки и оплаты с админки на всех этапах заказа, с возможностью ручной корректировки цифры доставки,
Гибкость и контроль самом деле очень важен, к примеру для доставки по городу когда цена курьера может сильно плавать в ту или иную сторону.
Добавьте поле скидка в настройки способа доставки и оплаты. отрицательная наценка — кринжа.)) к примеру в нашем случае Самовывоз предусматривает скидку, наличка предусматривает еще одну скидку.
В остальном плагин супер. Идеально подошел для сайта доставки еды.
Создал запрос — рассмотрим
github.com/modx-pro/MiniShop3/issues/212
github.com/modx-pro/MiniShop3/issues/212
Подтверждение E-mail не работает, не после регистрации, кнопка подтверждения в демо версии кабинета вообще не запускает крипт, насколько мы поняли классы отрабатывающие почту уже есть, но во фронтенде они пока не обозначены. Так же нет какого нибудь внятного упоминания в туториале, как эти классы использовать… Есть где то информация как это правильно натянуть? И еще ссылка забыли пароль.
PS письмо с ссылкой с токеном потьверждения юзер получает, но ссылка выводит на главную страницу, и никак не меняет статус почты,
PS письмо с ссылкой с токеном потьверждения юзер получает, но ссылка выводит на главную страницу, и никак не меняет статус почты,
Здравствуйте!
Проверьте на последней актуальной версии 1.10.0-beta1 и вернитесь с обратной связью
Проверьте на последней актуальной версии 1.10.0-beta1 и вернитесь с обратной связью
Нет не работает, функуця sendVerificationEmail отрабатывет, письмо приходит на почту, но обратная ссылка имеет невнятный адрес, в общем до verifyToken дело не доходит, временно создали свой костыль которые принимает get и меняет поля юзера email_verified_at и used_at напрямую в бд. Повторная верификация должна запускаться через JS но она вообще не колышется, даже ошибок нет. просто мертвая кнопка.
Спасибо за обратную связь — возьмем в работу
Спасибо!
Подскажите еще один момент! нам надо куда то пристроть код отправки уведомления на почту администратора, в момент появления нового заказа. Куда лучше всего приютить строчку, чтобы не ломать существующие классы, заменой своими, или их правкой? с учетом того что файлы могут обновляться с пакетами.
Подскажите еще один момент! нам надо куда то пристроть код отправки уведомления на почту администратора, в момент появления нового заказа. Куда лучше всего приютить строчку, чтобы не ломать существующие классы, заменой своими, или их правкой? с учетом того что файлы могут обновляться с пакетами.
Что вы имеете ввиду под кодом отправки уведомлений на почту?
Вообще у нас есть центр уведомлений, где вы можете задать Email шаблоны для каждого статуса покупателю и менеджеру (в том числе файловые). Можно сделать отложенную отправку с настраиваемой задержкой отправления. Можно использовать телеграм и sms каналы отправки данных. Можно использовать события.
Документация docs.modx.pro/components/minishop3/interface/notifications
Вообще у нас есть центр уведомлений, где вы можете задать Email шаблоны для каждого статуса покупателю и менеджеру (в том числе файловые). Можно сделать отложенную отправку с настраиваемой задержкой отправления. Можно использовать телеграм и sms каналы отправки данных. Можно использовать события.
Документация docs.modx.pro/components/minishop3/interface/notifications
Все это конечно увлекательно за исключением маленькой детали — отсутствия поля ms3_email_managers в настройках, вот и интересуемся куда можно ткнуть строку с набором мыл чтобы все заработало. В данный момент работает только уведомление для покупателя.
Адреса нужно задавать в системных настройках MODX (область заказов miniShop3 / ms3_order), а не искать отдельное поле с именем ms3_email_managers в центре уведомлений — там настраиваются шаблоны и каналы по событиям, а список получателей для менеджеров — через эту опцию (и аналоги для телефона/Telegram: ms3_phone_manager, ms3_telegram_manager).
Спасибо большое! классическая невнимательность. мы искали настройку в разделе уведомление
Не за что!
Ольга, спасибо вам что подсвечиваете проблемы. Было бы замечательно, если бы наше общение происходило в более дружеском ключе. Пока большинство ваших сообщений выглядит так, что вы оплатили весь цикл разработки и теперь как заказчик с полным правом требуете устранения проблем.
MiniShop3 — это бесплатный open source, без техподдержки. Вся работа тут происходит на энтузиазме по мере свободного времени и настроения.
Вы всегда можете предложить свое видение реализации и исправление найденных ошибок через механизм pull request, либо заказать доработку у программистов.
MiniShop3 — это бесплатный open source, без техподдержки. Вся работа тут происходит на энтузиазме по мере свободного времени и настроения.
Вы всегда можете предложить свое видение реализации и исправление найденных ошибок через механизм pull request, либо заказать доработку у программистов.
Это вам спасибо за отличное решение!, мы и стараемся подсветить проблемы. И более того продукт вполне себе стоит того что за него не жалко и денег дать уже на данном этапе. И мы не требуем исправления, мы исправляем его временно сами, и подсвечиваем трабу, рекомендуем к мерам, или просим совета если что то непонятно. Если Вас чем то задели мои посты или вопросы, могу более не писать. ((
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.