[MiniShop3] - Новости, Планы
Всем привет. Это моя традиционная заметка-отчет о проделанной за месяц работе.
Впервые за долгое время мы не выпустили ежемесячный апдейт miniShop2.
Это связано с тем, что все доступное время я посвятил разработке MiniShop3.
Сегодня постараюсь вам рассказать, как идут дела, что уже сделано, чего и когда ждать.

С момента написания прошлой заметки, посвященной MS3 прошел почти год. Дело было в августе 2022 года.
Честно говоря, работа над компонентом никак не складывалась. Объем задач изначально был огромным, а оплата труда по сути отсутствовала.
Но ежемесячные релизы miniShop2, активность в телеграм-чате, подключившиеся к общему делу ребята смогли переломить ситуацию и наш счет начал пополняться вашими донатами. Как оказалось мы смогли набрать достаточную сумму, чтобы приступить к активной работе.
На старте работ, еще в 2022 году я не был сторонником открытого исходного кода. Хотелось сначала сделать какой-никакой готовый релиз, и затем показывать его.
Но ребята убедили меня открыть исходники и показывать процесс работы сразу, на лету.
Знакомьтесь, кто еще не видел — перед вами набросок MiniShop3
Все коммиты, конечно же, можно видеть в режиме реального времени.
Каждый желающий может скачать и развернуть у себя компонент, с целью протестировать его.
Искать правки и предлагать улучшения пока не рекомендую, до момента Альфа-релиза.
На первый взгляд в админке мало что существенно изменилось. Все тот же extJS, немного причесанный и стилизованный. Что может быть проще, чем просто перенести и запустить уже готовые страницы из miniShop2.
Да — бэкенд нужно будет доработать, но сами технологии админки то остались прежними. По-быстрому перенесу виджеты и займусь архитектурой.
Так я думал, приступая к работе. Но не тут то было. Другая верстка, другое расположение панелей потребовали очень плотной работы со страницами MiniShop3. Ни один из виджетов MS2 не завелся с первого раза, просто так. Но дело сделано. На сегодня все, что мы привыкли видеть в админке ms2, полностью перенесено, адаптировано и настроено. Вся админка полностью работает и готова к тестированию, обсуждению.
Кто не знает, в miniShop2 опции у продуктов реализованы достаточно странным образом. При каждом сохранении ВСЕ значения опций товара первым делом удаляются из таблицы, затем на их место записываются обновленные (или старые) значения. Такая механика работы не позволяет их индексировать, корректно перезаписывать через API, расширять таблицу и т.д.
Полностью переписал функционирование опций (имею в виду таблицу msProductOption)
Выше я описал те моменты, которые заняли у меня больше всего времени и внимания. Разумеется уже реализованных изменений намного больше. Новшества есть в полях таблиц, структуре каталогов, классов, и в интерфейсе админки.
Из интересного — добавил возможность подключать файловые шаблоны писем к статусам заказов.
Минимальные требования
Планирую сделать минимальной версией PHP8.0. Даже она является старой. В Laravel уже 8.2 минимальная. Нет смысла дальше поддерживать PHP7.4. Компонент просто не будет устанавливаться на версию PHP ниже 8.0. Также проработаю вопрос с СУБД mysql 8.
Портирование ежемесячных улучшений из miniShop2
Мы каждый месяц что-то добавляем, улучшаем в нашем основном компоненте. Конечно же требуется синхронизировать все эти обновления с MiniShop3, чтобы не потерять улучшения и исправления багов, при переезде. Казалось бы очевидный момент — но он тоже требует внимания, времени, сил.
Часто проблема портирования каких-то изменений, может оказаться более объемной, чем выглядит на первый взгляд. К примеру, использование менеджера очередей Scheduler требует сначала адаптировать сам менеджер под MODX3.
Фронтенд
На первый взгляд кажется что дел там не особо много. Развернуть шаблончики с чанками, да сниппеты адаптировать под MODX3. Но на самом деле работы сильно больше.
Хочется реализовать удобный обмен данными с бэкендом, полностью перейти на vanila JS.
Обеспечить нормальный фундамент для работы VUE JS и других фронтенд движков.
Заказы
На данный момент есть идея, согласованная с коллегами отказаться от использования сессий вообще.
Основной реализацией станет хранение корзины и заказов сразу в базе данных.
Архитектура будет изменена на более удобную с этой точки зрения.
Сессии вызывают только проблемы.
В данном случае все обсуждаемо — вы конечно же можете привести свои доводы в пользу сессий.
Адреса покупателя
В компоненте будет функционал сохранения и быстрого выбора адресов покупателя.
Прочее
У нас с коллегами много хороших, правильных, обоснованных идей по улучшению. Они все давно напрашиваются, по каждому есть множество обращений, вопросов, предложений. В частности реализовать конструктор полей, остатки, модификации, избранное из коробки.
Все это можно реализовать, все технически выполнимо, но требует внимания, времени, сил.
Все это станет возможным при достаточной поддержке сообщества.
На фоне хороших новостей прошу вас поддержать работу финансово. Каждый из разработчиков так или иначе использует в своей работе miniShop2 и воспользуется MiniShop3 по мере готовности. Поддержав нас всего лишь в размере 1% от заработка, полученного при помощи наших бесплатных компонентов — вы спонсируете собственную работу в будущем. Рассмотрим это дело как инвестиции?
Каждому спонсору низкий поклон. Только благодаря вам — мы не даем умереть MODX.
Все возможные варианты спонсорства указаны на специальной странице сообщества
Для наиболее крупных спонсоров доступна опция приоритетных пожеланий. Возможно вам требуется конкретный функционал, и его можно включить в ядро или выпустить бесплатным дополнением к MS2-MS3
Впервые за долгое время мы не выпустили ежемесячный апдейт miniShop2.
Это связано с тем, что все доступное время я посвятил разработке MiniShop3.
Сегодня постараюсь вам рассказать, как идут дела, что уже сделано, чего и когда ждать.

С момента написания прошлой заметки, посвященной MS3 прошел почти год. Дело было в августе 2022 года.
Честно говоря, работа над компонентом никак не складывалась. Объем задач изначально был огромным, а оплата труда по сути отсутствовала.
Но ежемесячные релизы miniShop2, активность в телеграм-чате, подключившиеся к общему делу ребята смогли переломить ситуацию и наш счет начал пополняться вашими донатами. Как оказалось мы смогли набрать достаточную сумму, чтобы приступить к активной работе.
Репозиторий
На старте работ, еще в 2022 году я не был сторонником открытого исходного кода. Хотелось сначала сделать какой-никакой готовый релиз, и затем показывать его.
Но ребята убедили меня открыть исходники и показывать процесс работы сразу, на лету.
Знакомьтесь, кто еще не видел — перед вами набросок MiniShop3
Все коммиты, конечно же, можно видеть в режиме реального времени.
Каждый желающий может скачать и развернуть у себя компонент, с целью протестировать его.
Искать правки и предлагать улучшения пока не рекомендую, до момента Альфа-релиза.
Админка
На первый взгляд в админке мало что существенно изменилось. Все тот же extJS, немного причесанный и стилизованный. Что может быть проще, чем просто перенести и запустить уже готовые страницы из miniShop2.
Да — бэкенд нужно будет доработать, но сами технологии админки то остались прежними. По-быстрому перенесу виджеты и займусь архитектурой.
Так я думал, приступая к работе. Но не тут то было. Другая верстка, другое расположение панелей потребовали очень плотной работы со страницами MiniShop3. Ни один из виджетов MS2 не завелся с первого раза, просто так. Но дело сделано. На сегодня все, что мы привыкли видеть в админке ms2, полностью перенесено, адаптировано и настроено. Вся админка полностью работает и готова к тестированию, обсуждению.
Опции
Кто не знает, в miniShop2 опции у продуктов реализованы достаточно странным образом. При каждом сохранении ВСЕ значения опций товара первым делом удаляются из таблицы, затем на их место записываются обновленные (или старые) значения. Такая механика работы не позволяет их индексировать, корректно перезаписывать через API, расширять таблицу и т.д.
Полностью переписал функционирование опций (имею в виду таблицу msProductOption)
- Теперь опции имеют primaryKey, что дает возможность работать с ними как с объектами
- Значения опций индексируются, что конечно же ускоряет выборку данных и последующую работу всяческих фильтров, сортировок и поисков.
- Теперь значения опций у товаров обновляются без обязательного удаления данных и последующей записи начисто.
Множество мелких изменений
Выше я описал те моменты, которые заняли у меня больше всего времени и внимания. Разумеется уже реализованных изменений намного больше. Новшества есть в полях таблиц, структуре каталогов, классов, и в интерфейсе админки.
Из интересного — добавил возможность подключать файловые шаблоны писем к статусам заказов.
Что дальше?
Минимальные требования
Планирую сделать минимальной версией PHP8.0. Даже она является старой. В Laravel уже 8.2 минимальная. Нет смысла дальше поддерживать PHP7.4. Компонент просто не будет устанавливаться на версию PHP ниже 8.0. Также проработаю вопрос с СУБД mysql 8.
Портирование ежемесячных улучшений из miniShop2
Мы каждый месяц что-то добавляем, улучшаем в нашем основном компоненте. Конечно же требуется синхронизировать все эти обновления с MiniShop3, чтобы не потерять улучшения и исправления багов, при переезде. Казалось бы очевидный момент — но он тоже требует внимания, времени, сил.
Часто проблема портирования каких-то изменений, может оказаться более объемной, чем выглядит на первый взгляд. К примеру, использование менеджера очередей Scheduler требует сначала адаптировать сам менеджер под MODX3.
Фронтенд
На первый взгляд кажется что дел там не особо много. Развернуть шаблончики с чанками, да сниппеты адаптировать под MODX3. Но на самом деле работы сильно больше.
Хочется реализовать удобный обмен данными с бэкендом, полностью перейти на vanila JS.
Обеспечить нормальный фундамент для работы VUE JS и других фронтенд движков.
Заказы
На данный момент есть идея, согласованная с коллегами отказаться от использования сессий вообще.
Основной реализацией станет хранение корзины и заказов сразу в базе данных.
Архитектура будет изменена на более удобную с этой точки зрения.
Сессии вызывают только проблемы.
- Большие проблемы реализовать удаленные запросы к серверу, который работает на основе сессий. Каждый новый запрос поднимает свою сессию и попробуй достучаться до той корзины, которую ты пополнял на предыдущем запросе
- Большие проблемы при необходимости сразу быстро добавить в заказ набор данных. Например, при автозаполнении формы. Сессии так быстро не работают, они блокируют запросы, записывая только последний присланный. Проблема зафиксирована и описана.
В данном случае все обсуждаемо — вы конечно же можете привести свои доводы в пользу сессий.
Адреса покупателя
В компоненте будет функционал сохранения и быстрого выбора адресов покупателя.
Прочее
У нас с коллегами много хороших, правильных, обоснованных идей по улучшению. Они все давно напрашиваются, по каждому есть множество обращений, вопросов, предложений. В частности реализовать конструктор полей, остатки, модификации, избранное из коробки.
Все это можно реализовать, все технически выполнимо, но требует внимания, времени, сил.
Все это станет возможным при достаточной поддержке сообщества.
Слова благодарности
На фоне хороших новостей прошу вас поддержать работу финансово. Каждый из разработчиков так или иначе использует в своей работе miniShop2 и воспользуется MiniShop3 по мере готовности. Поддержав нас всего лишь в размере 1% от заработка, полученного при помощи наших бесплатных компонентов — вы спонсируете собственную работу в будущем. Рассмотрим это дело как инвестиции?
Каждому спонсору низкий поклон. Только благодаря вам — мы не даем умереть MODX.
Все возможные варианты спонсорства указаны на специальной странице сообщества
Для наиболее крупных спонсоров доступна опция приоритетных пожеланий. Возможно вам требуется конкретный функционал, и его можно включить в ядро или выпустить бесплатным дополнением к MS2-MS3
Комментарии: 34
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Спасибо всем кто участвует, с нетерпением ждем релиза, для новых клиентов с магазинами, затягиваем этапы прототипов и подготовки данных, рисования макетов… короче делаем все, чтобы новые проекты стартовать уже на MODX3 и Minishop3!
А ещё, с релизом будет весомый повод напомнить старым проектам о модернизации, ведь это же прекрасно, улучшать свои достижения, сколько уже можно костыли вставлять…
Донатим срочно! И потираем ладошки потестить альфу!
Альфа она для того и называется ранней версией, что может получиться неудачной, ее выбросишь и делаешь заново, понимая, где ошибки и проблемы.
А как ещё внедрять edge-технологии, если не огнем и мечом?))
Не буду говорить что знаю зачем @Василий Наумкин primary key на опции не поставил. Инкремент мне кажется правдоподобной догадкой.
Но замечание ваше в уме все равно нужно держать, оно не лишено смысла.
На гите есть упоминание этой функции и пометка что «Метод setToken является асинхронной, но вызывается как синхронный. Возможны ошибки в будущем.». Может кто-то знает как убраь эту ошибку?
Пока была надежда что кто-то прям с такой же проблемой столкнулся кто-то, поэтому не прикреплял скриншоты. Сейчас будут подробности. Вот тут указаны эти методы, в самом репозитории модуля — https://github.com/modx-pro/MiniShop3/issues/15
Вот скриншот из консоли браузера
Если что, вот сама страница где тестовый товар. Перейдя в него, можно увидеть кнопку так же добавления товара в корзину.
В каталоге ошибка в консоли вылазит сразу при загрузке страницы, так же и в карточке товара.
Вот скриншот блока кода из файла:
на
Ошибка пропала. На странице, при нажатии на кнопку добавления товара в корзину, появилось всплывающее модальное об отсутствии токена (ранее страница просто перезагружалась). Копаюсь дальше. Сейчас видна в консоли другая ошибка:
Теперь ошибка в консоли вот такая. Что-то не так в функции updateToken, ошибка уже не на какой-то конкретной строке, а выводится из try/catch
Где selector оказывается пустым, и, соответственно, скрипт не может определить где корзина, что бы обновить её. Честно, пока не пойму откуда он должен получить идентификатор контейнера корзины… Возможно id блока где-то можно указать, но я не нашёл где… Возможно скрипт сам его получает где-то… Для проверки в строку
вставил, добавленный мною на сайте идентификатор msMiniCart (взятый с minisop2 в надежде что его добавление «чудесным образом» позволит корзине обновляться, но не тут то было), получив
и корзина полноценно заработала. Пока остановлюсь на этом… мне этого пока достаточно, что бы продолжить другие работы по сайту, но, возможно, скоро я снова погружусь в интересный процесс доработки кода.
Нужно удалить запятую у последней ссылки. Иначе этот список, который фактически является JSON-строкой, не будет преобразован в массив. То есть список должен выглядеть вот так:
Надеюсь это кому-нибудь поможет.
И ещё. Хочу сказать огромное спасибо разработчикам за проделанную титаническую работу! Очень жду, как и многие, модуль в общем доступе уже в репозиториях, хотя, думаю, из-за объёма работ и параллельных забот, это произойдёт не скоро.
И ещё, нужно сбросить содержимое корзины, когда заказ оформлен. Это происходит, но результат можно увидеть только после перезагрузки страницы… а нужно что бы это делалось ajax-ом… Тут, скорее всего, должен быть метод в скрипте, который, как минимум, обновляет страницу, добавляя в url параметр orderid с номером нового заказа. Может кто-то подсказать где этот метод искать?
Если что, ни при выборе типа доставки/оплаты, ни при создании заказа, ошибок не возникает
Опишите пожалуйста решение, если вдруг сделаете что-то. Думаю что кому-то ещё пригодиться…
И просто любопытство, то что я выше писал «монолог», вам пригодилось? :D