[miniShop2] 4.1.0 - большой релиз
Друзья, спешу представить вашему вниманию довольно объемный релиз нашего любимого компонента miniShop2.
Вот что мы подготовили для вас на этот раз.
Новый тип опций — выбор цвета
Поддержка менеджера очередей
Работа с лексиконами через сервис crowdln по аналогии с MODX
Дополнительные данные возвращаемые корзиной при ее изменении
Новые режимы возвращение данных из msGallery
Cистемная настройка ms2_status_canceled
Исправлена ошибка одновременной работы корзины с разными контекстами
Добавлена прослушка и сохранение поля описание в процессор gallery/upload
Улучшена сортировка и выборка загруженных файлов для сохранения первого изображения в таблицу msProductData
Обновили текст и значения системной настройки setting_ms2_order_product_options
Поправил баг с переадресацией после оформления заказа в новом js
Множество мелких улучшений синтаксиса и читаемости кода
удалена настройка для иконок кнопок в категории
Удалено ограничение длины телефона при валидации
Рассмотрим некоторые пункты подробнее.
Автор обновления @Алексей Смирнов
Суть следующая. В опциях минишопа, появился принципиально новый тип поля — Множественный выбор цветов.
Выглядит вот так

Как можно заметить состоит из пар Наименование — код цвета. После ввода кода, автоматически отображает цвет.
В товарах получаем вот такую картину


При выводе цвета на сайте, также несложно отобразить доступную цветовую палитру, вместо текстовых обозначений.
Авторы идеи @Михаил и @Дима Касаткин
Справедливости ради стоит заметить, что @Михаил даже присылал свою реализацию на базе очередей, встроенных в MODX, которая достаточно долго провисела непринятой. @Дима Касаткин предложил и обосновал использование в качестве удобной зависимости компонент Марка Хамстра Scheduler. После большого обсуждения в нашем закрытом чате — решили использовать внутри miniShop2 Scheduler и сразу же его локализовали на русский язык, попутно внеся несколько PR.
Итак, в чем суть.
Мы добавили в minishop2 настройку, позволяющую пользоваться sheduler. При активации этой настройки (и при установленном компоненте scheduler), письма при формировании заказа начинают отправляться не сразу, а в фоновом режиме. Тем самым снимается нагрузка на процесс формирования заказа, клиент видит результат существенно быстрее (ну, то есть для клиента заказ создается очень быстро).
Есть также возможность поставить в фоновый, отложенный режим работы и другие плагины. Например, отправку SMS, отправку заказа в CRM и тому подобное.
Кроме того есть несколько неочевидных, но тоже достаточно полезных и просто прикольных преимуществ.
Задачу по отправке письма можно просмотреть в планировщике. Причем само письмо сразу визуалировано, что можно использовать для отладки.

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

Ну и еще один плюс — проваленную отправку письма, можно запланировать повторно, поправив ошибки, из за которых не работала отправка писем.
Вы можете использовать подобную технику и в обычных формах. Позже подготовлю хук для FormIT.
До текущего момента вызов сниппета msGallery требовал обязательно наличия чанка для вывода результатов.
При работе с fenom это не всегда удобно. Иногда хочется вернуть просто голый массив данных, которые будут добавлены в верстку шаблона. Ну и не плодить лишние чанки.
Для решения вопроса в сниппет msGallery — добавлен параметр return
Поддерживаются режимы
— tpl режим по умолчанию. Сниппет возвращает чанк. По старинке
— data Сниппет возвращает голый массив
— sql — Возвращение только SQL запроса. Может быть полезно при отладке.
— json — почти как data, но данные уже сконвертированы в json.
Важное, долгожданное дополнение, которое позволит более гибко работать с корзиной. Суть сводится к следующему.
Теперь все колбэки для работы с корзиной возвращают не только, общие статистические данные, но и всю корзину целиком, что важно для ecommerce скриптов, например.
Также отдельно возвращается и измененный ряд.
Покажу на практике. Используем вот такой код
Наша команда растет и крепнет. С каждым шагом, ребята предлагают все более смелые и все более объемные решения, за что я им очень благодарен.
В этом релизе принимали участие
@Иван Бочкарев
@Артур Шевченко
@Алексей Смирнов
@Руслан Алеев
@Евгений Webinmd
Ну и я @Николай Савин
Были рядом, поддерживали нас, помогая идеей, советом, братским пинком
@Михаил
@Дима Касаткин
@Баха Волков
@Илья Уткин
@Семён Кудрявцев
Если кого-то забыл, не судите строго. Сообщество большое и довольно активное.
Вы всегда можете поддержать и ускорить подобные инициативы через финансовую поддержку
Развитие MiniShop происходит исключительно благодаря Вам друзья!
Финансовая поддержка с вашей стороны, позволяет выделять больше времени на развитие сообщества и обновлять наши проекты, которые в свою очередь приносят пользу и вам.
Поддержать нас можно, используя следующие каналы для доната:
Вот что мы подготовили для вас на этот раз.
Добавлено
Новый тип опций — выбор цвета
Поддержка менеджера очередей
Работа с лексиконами через сервис crowdln по аналогии с MODX
Дополнительные данные возвращаемые корзиной при ее изменении
Новые режимы возвращение данных из msGallery
Cистемная настройка ms2_status_canceled
Изменено
Исправлена ошибка одновременной работы корзины с разными контекстами
Добавлена прослушка и сохранение поля описание в процессор gallery/upload
Улучшена сортировка и выборка загруженных файлов для сохранения первого изображения в таблицу msProductData
Обновили текст и значения системной настройки setting_ms2_order_product_options
Поправил баг с переадресацией после оформления заказа в новом js
Множество мелких улучшений синтаксиса и читаемости кода
Удалено
удалена настройка для иконок кнопок в категории
Удалено ограничение длины телефона при валидации
Рассмотрим некоторые пункты подробнее.
Новый тип опций — выбор цвета
Автор обновления @Алексей Смирнов
Суть следующая. В опциях минишопа, появился принципиально новый тип поля — Множественный выбор цветов.
Выглядит вот так

Как можно заметить состоит из пар Наименование — код цвета. После ввода кода, автоматически отображает цвет.
В товарах получаем вот такую картину


При выводе цвета на сайте, также несложно отобразить доступную цветовую палитру, вместо текстовых обозначений.
Поддержка менеджера очередей
Авторы идеи @Михаил и @Дима Касаткин
Справедливости ради стоит заметить, что @Михаил даже присылал свою реализацию на базе очередей, встроенных в MODX, которая достаточно долго провисела непринятой. @Дима Касаткин предложил и обосновал использование в качестве удобной зависимости компонент Марка Хамстра Scheduler. После большого обсуждения в нашем закрытом чате — решили использовать внутри miniShop2 Scheduler и сразу же его локализовали на русский язык, попутно внеся несколько PR.
Итак, в чем суть.
Мы добавили в minishop2 настройку, позволяющую пользоваться sheduler. При активации этой настройки (и при установленном компоненте scheduler), письма при формировании заказа начинают отправляться не сразу, а в фоновом режиме. Тем самым снимается нагрузка на процесс формирования заказа, клиент видит результат существенно быстрее (ну, то есть для клиента заказ создается очень быстро).
Есть также возможность поставить в фоновый, отложенный режим работы и другие плагины. Например, отправку SMS, отправку заказа в CRM и тому подобное.
Кроме того есть несколько неочевидных, но тоже достаточно полезных и просто прикольных преимуществ.
Задачу по отправке письма можно просмотреть в планировщике. Причем само письмо сразу визуалировано, что можно использовать для отладки.

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

Ну и еще один плюс — проваленную отправку письма, можно запланировать повторно, поправив ошибки, из за которых не работала отправка писем.
Вы можете использовать подобную технику и в обычных формах. Позже подготовлю хук для FormIT.
Дополнительные режимы работы сниппета msGallery
До текущего момента вызов сниппета msGallery требовал обязательно наличия чанка для вывода результатов.
При работе с fenom это не всегда удобно. Иногда хочется вернуть просто голый массив данных, которые будут добавлены в верстку шаблона. Ну и не плодить лишние чанки.
Для решения вопроса в сниппет msGallery — добавлен параметр return
Поддерживаются режимы
— tpl режим по умолчанию. Сниппет возвращает чанк. По старинке
— data Сниппет возвращает голый массив
— sql — Возвращение только SQL запроса. Может быть полезно при отладке.
— json — почти как data, но данные уже сконвертированы в json.
Дополнительные данные возвращаемые корзиной при ее изменении
Важное, долгожданное дополнение, которое позволит более гибко работать с корзиной. Суть сводится к следующему.
Теперь все колбэки для работы с корзиной возвращают не только, общие статистические данные, но и всю корзину целиком, что важно для ecommerce скриптов, например.
Также отдельно возвращается и измененный ряд.
Покажу на практике. Используем вот такой код
document.addEventListener('DOMContentLoaded', (event) => {
if (typeof miniShop2 != "undefined") {
miniShop2.Callbacks.add('Cart.add.response.success', 'cartAddCallbacks', function (response) {
console.log(response)
});
miniShop2.Callbacks.add('Cart.remove.response.success', 'cartRemoveCallbacks', function (response) {
console.log(response)
});
miniShop2.Callbacks.add('Cart.change.response.success', 'cartChangeCallbacks', function (response) {
console.log(response)
});
}
});До сегодняшнего обновления ответ от сервера был такой{
"success" => true,
"message" => "Товар добавлен в корзину",
"total_count" => 2,
"total_cost" => 5000,
"total_weight" => 2,
"total_discount" => 0,
"total_positions" => 2,
}Теперь стало вот так{
"success" => true,
"message" => "Товар добавлен в корзину",
"total_count" => 2,
"total_cost" => 5000,
"total_weight" => 2,
"total_discount" => 0,
"total_positions" => 2,
"key" => "ключ для добавленного товара",
"row" => {запись в корзине ключу выше, с учетом всех плагинов}
"cart" => {вся корзина целиком}
}Не буду расписывать все изменения и дополнения, на это мне не хватит дня. Но отвечу на все вопросы, по мере их поступления. Благодарности
Наша команда растет и крепнет. С каждым шагом, ребята предлагают все более смелые и все более объемные решения, за что я им очень благодарен.
В этом релизе принимали участие
@Иван Бочкарев
@Артур Шевченко
@Алексей Смирнов
@Руслан Алеев
@Евгений Webinmd
Ну и я @Николай Савин
Были рядом, поддерживали нас, помогая идеей, советом, братским пинком
@Михаил
@Дима Касаткин
@Баха Волков
@Илья Уткин
@Семён Кудрявцев
Если кого-то забыл, не судите строго. Сообщество большое и довольно активное.
Вы всегда можете поддержать и ускорить подобные инициативы через финансовую поддержку
Финансовая поддержка
Развитие MiniShop происходит исключительно благодаря Вам друзья!
Финансовая поддержка с вашей стороны, позволяет выделять больше времени на развитие сообщества и обновлять наши проекты, которые в свою очередь приносят пользу и вам.
Поддержать нас можно, используя следующие каналы для доната:
- Отправить донат с карты
- Отправить донат на Яндекс. Деньги
- Отправить донат на Qiwi
- Перевод на каспи в Казахстане на номер +7 701 282 77 37
Комментарии: 62
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Хочу отметить, что обновления minishop в последнее время очень точно сфокусированы на решение довольно непростых вопросов, которые вроде бы и раньше при запуске магазина можно было разобраться, добавляя дополнительный код и модули…
… но @Николай Савин и команда много делают именно для удобства, ускорения и упрощения разработки, точно прицеливаются на самые противоречивые решения, но казалось ранее проверенные и надежные решения и находят точки роста, улучшая их. Такими темпами, я уверен, Minishop ждёт большое будущее!
Вчера и сегодня приходили донаты — все ок. Попробуйте снова
Комментарий вот к этому моменту:
есть смысл добавить сразу и на событие Order.submit.response.success.
У меня на одном из сайтов коллбэки возвращают сразу готовый для добавления в dataLayer объект ecommerce.
Это очень удобно.
если настроен редирект на другую страницу после заказа, то, чтобы данные точно успели попасть в dataLayer и далее в метрику или гугл, нужно добавить паузу перед редиректом.
У меня просто setTimeout стоит на несколько секунд. Возможно, можно сделать изящнее )
Как вариант можно добавить настройку для setTimeout.
Но мне видится в штатном скрипте ms2 что-то типа промиса в коллбеке, чтобы народ мог сам что-то на Order.submit.response.success повесить, что будет или паузу добавлять или даже какой-то лоадер, типа «Заказ сохраняется, подождите...».
Иногда это очень нужно, когда «под капотом» происходит выгрузка в CRM и т.п. (по старинке, без очереди).
Привязка статей к товару minishop2
Как связать ресурсы определенных категорий между собой
Потом почитал про msProductLink
Потом посмотрел
/assets/components/minishop2/js/mgr/product/links.grid.js
и
/assets/components/minishop2/js/mgr/product/links.window.js
А потом подумал ро обновления. По этому и спросил.
Мне одному кажется, что метод должен называться — sendRequest? Так как шлем «запрос» на сервер.
Или я тут что-то не улавливаю до конца?
Ещё момент, очень не хватает со стороны js метода запроса получения актуального состояния корзины,
чтобы прямо из консоли можно было вызвать так — miniShop2.Cart.status(); Без параметра, метод возвращал бы актуальную корзину, а с параметром как обычно отрабатывал. По аналогии как сейчас работает miniShop2.Order.getcost();
Есть несколько компонентов, которые так или иначе пересчитывают корзину, ну и само собой все товары в ней.
Так вот в каждом таком компоненте авторы, в своем js, кто как реализует обновление данных корзины в html:
1) Кто-то циклом проходит и меняет в товарах цену и старую цену, а также результирующий блок
2) Кто-то целиком меняет весь кусок html кода корзины
Если в коробке miniShop2 будет универсальный метод получения актуальной корзины и обновляющий соответственно html на странице корзины, тогда в любом компоненте можно просто будет вызвать что-то типа
И всё сразу обновилось на странице на актуальные цифры.
Если понадобится что-то кастомное делать в чанке корзины, то поправить нужно будет только коробочный класс корзины (имею ввиду не исходники, а доработанную копию). То есть изменить только в одном месте.
Не придется лезть во все js других компонентов и везде менять реализацию обновления данных корзины.
Ну и ещё на ум пришел пример, если корзину делать на условном React, Vue, любом реактивном фреймворке, то как-то нужно получать стейт корзины из js, чтобы вьюха по стейту всё обновляла на странице.
Будет полностью динамичная обновляемая целиком корзина. При чем их может быть несколько на странице со своими чанками.
В 4.1 включить не успели, так как мало протестировано.
в какой-нибудь отдельный метот, типа — applyHTMLChanges или лучше renderCart, так метод status будет чистым — отвечать только за получение данных актуальной корзины.
Мир тебя не забудет
С большой вероятность он после некоторой оптимизации будет влит в ядро
За деталями общайся в наш чат.
В минишопе появилась возможность создавать заказы из под панели администратора.
Но немного не хватает тогда функционала.
Нажал «Создать заказ», выбрал товар, заполнил поля клиента и адреса. Выбрал способ доставки и оплаты.
Но как мне поставить стоимость Доставки? Поле не редактируется. Вес почему тоже не передался из товара в итоговый параметр.
Как правильно оформлять заказы из под админки?
Чтобы корректно рассчитывалась доставка подключенного модуля — такое вряд ли из админки получится сделать.
Модулей доставки много и они все совершенно разные по своим функциональным возможностям, архитектуре, реализации.
Рассчитать доставку менеджер магазина может и в сервисе доставки. Просто возможности забить эту стоимость в заказ сейчас нет, к сожалению. Ну и вес не передается из товаров, это наверное пофиксить можно))
Есть дополнение которое это может сделать msOrderFields, но оно с последней версией miniShop2 не работает корректно.
В общем если есть вариант принять пожелание в список хотелок по минишопу, буду очень рад)
По весу посмотрим. Вопрос с доставкой тоже поглядим.
Возможно оставить в папках:
??
Сейчас компоненты которые раньше обращались к эти классам, нужно перерабатывать.
Скорей всего таких компонентов много, то есть все те что связаны с доставкой и оплатой
modstore.pro/packages/payment-system/msprobokassaofficial
modstore.pro/packages/payment-system/mspyookassa
99% что они по тому же пути обращаются
После обновления miniShop2 4.1.1 до версии 4.1.2 перестали выводится изображения в галерее товаров. Может кто сталкивался с подобной ситуацией?
В обновлении 4.1.2 было ровно одно изменение, исправляющее баг в новом комплекте JS скриптов. Никаким образом это не могло затронуть галерею товаров.
Как минимум для решения вопроса — вам нужно показать вызов галереи.
Кроме того посмотреть есть ли какие-то ошибки в журнале ошибок.
Далее на следующем шаге — вот прям в этом посте посмотрите раздел Дополнительные режимы работы сниппета msGallery. Возможно у вас какой-то конфликт.
Если и тут ничего не понятно — нужно расставлять логи в сниппете и смотреть на каком этапе пропадает информация.
Ну или же нанять программиста.
Вызов галереи: [[!msGallery]]
В логе только для сниппета msGallery: PHP warning: Invalid argument supplied for foreach()
Замена сниппета на более старый решает проблему, но убивает все нововведения.
На самом деле проблема довольно странная.
Этот вопрос решен еще тогда на стадии доработки сниппета. Но почему то в компонент попал старый сниппет. У нас есть готовый код
github.com/modx-pro/miniShop2/blob/master/core/components/minishop2/elements/snippets/snippet.ms_gallery.php#L69
Вообще это гарантированно рабочий сниппет, можете просто скопировать из github
— minishop2 4.0.0 (обновлялись с 2.5)
— возможно это критично, /components/minishop2/js/web/default_custom.js и наверняка от 2.5 версии.
— есть кастомная платежка, лежит в папке components/minishop2/custom/payment/rbs.class.php
В ней реализован метод send, в конце такие строчки:
При оформления заказа file_put_contents и this->modx->log (при включенном логировании) — не отрабатывают, т.е. данный метод send вообще не запускается.
Так же если сделать alert в callbacks.submit.response.success
disk.yandex.ru/i/as4oZIV5VbkrsQ
Видно, что нет redirect, отсюда и не перенаправляет на платежку.
Если же сделать так:
То все отрабатывает и дает ссылку.
Подскажите почему может не запускаться класс оплаты при оформлении с фронта?
modx.pro/components/23283
modx.pro/components/23536
Если не найдете посмотрите все последние ветки Николая через его профиль — Заметки.
Заметил что в обновленной версии minishop больше нельзя добавить поля через модуль msAddField.
Как с этим быть теперь?
К сожалению не было возможности испытать его в работе.
Update. Прошу прощения, оказывается модуль бесплатный. Но остальные слова остаются верными.
Я искренне не понимаю почему вдруг сейчас все заговорили об этом.
Самому интересно.
В шаблонах использую возврат массива данных, что дает всю необходимую гибкость для работы