MiniShop3 особенности и отличия от miniShop2

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



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

1. Хранение корзины и информации о заказе на стадии оформления.



MiniShop2 — из коробки хранит информацию в сессиях. С версии 3.0 есть экспериментальная возможность хранения данных в базе данных, что дало возможность обращаться к корзине из разных устройств, организовывать ссылку на корзину, а управляющему видеть брошенные корзины, и проводить работу над ошибками.

MiniShop3 — из коробки хранит данные сразу в базе данных. Никаких сессий. Механизм хранения, обмена данными оптимизирован по сравнению с MS2.

2. Опознавание владельца корзины и заказа.



MniShop2 — куки для восстановления сессии. В режиме хранения «База данных» сочетание данных session_Id и user_id.

Работа с куками сложна и ненадежна. Не каждый разработчик сможет корректно восстановить сессию, при использовании RESTfull API. Постоянно приходится изобретать велосипеды при работе с удаленными запросами из мобильного приложения, поддомена или Localhost. Кроме того все идет к тому, что кроссдоменные куки запретят в хроме из-за их ненадежности.

MiniShop3 — внедрен механизм токенов. Каждый покупатель при первом посещении получает токен, к которому привязаны корзина и заказ. Все запросы обязаны быть подписаны токеном в заголовке запроса. тут все просто — прислал токен — получил свою корзину. И не важно откуда ты обращаешься, с сайта, из поддомена, из приложения или localhost. Актуальные данные всегда под рукой. Нет привязки к устройству.

3. Отрисовка корзины и миникорзина



MiniShop2 — после обновления корзины, удаления товара и т.п. нужно перезагрузить страницу, либо сочинять собственную логику отрисовки корзины заново.
Стандартные ответы сервера возвращают только общие данные, которые можно вставить в блок Total

MiniShop3 — из коробки реализован механизм серверного рендера корзины. Используйте хоть десять сниппетов корзины на странице. Они все будут обновляться и перерисовываться на лету. Каждый со своими чанками и другими параметрами естественно. Также предусмотрен механизм возврата только сырых данных, для отрисовки корзины на VUE, к примеру.

Сниппет мини-корзины больше не нужен. Просто вызывайте две разные корзины со своей версткой.

4. Изменение опций внутри корзины



Minishop2 — невозможно в принципе.

MiniShop3 — Выполнено. Предыдущий пункт — дал возможность реализовать и такую возможность. Выводите в корзине список доступных опций. Меняйте их, и корзина на лету пересчитается. Если ваш выбор опций совпадает с уже существующим сочетанием — то строки суммируются и объединятся.

5. Новая сущность — msCustomer (покупатель)



Minishop2 — Отсутствует.

MiniShop3 — добавлено. Новая логика дает нам возможность отказаться от обязательного создания системного пользователя MODX с частой проблемой генерации Email. Не на каждом проекте предусмотрена регистрация, авторизация с особыми правами и т.п. Идея сделать такую возможность опциональной.

Будем хранить данные о покупателе в сокращенном формате. К примеру только имя и телефон.
Появился новый сниппет msCustomer, для вывода формы и сохранения данных Покупателя.

В добавок к Покупателю, заводим еще одну новую сущность. msCustomerAddress (Адрес покупателя).
Это дает нам возможность сохранять все вводимые адреса Покупателя и при последующих заказах просто выбирать из списка нужный.

5. Новые правила валидации



Minishop2 — валидация полей заказа происходит по «вшитым» в код правилам.
Не всех устраивает то, как валидируется телефон (иногда не хватает символов).
Не всех устраивают правила валидации имени. К примеру там обязательно первая буква меняется на заглавную. Это не всегда удобно.
Для переопределения необходимо переписывать класс заказа.

MiniShop3 — я выбросил всю логику валидации, и внедрил готовую библиотеку похожую на ту, что используется в Laravel

Теперь правила валидации будут указываться разработчиком прямо в вызове сниппета, по примеру FormIT, что дает возможность не лезть в PHP

Пример сниппета (валидация предусмотрена как в msCustomer, так и в msOrder)

{'!msCustomer'|snippet : [
    'tpl' => '@FILE chunks/demo/customer.tpl',
    'validationRules' => [
        'first_name' => 'required|min:2',
        'last_name' => 'required|min:3',
        'email' => 'required|email',
        'phone' => 'required|min:10'
    ]
]}

Пока на этом все.



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

Как видите изменений очень много (это я еще не писал об отличиях двух платформ, о технологических отличиях версии PHP и других мелочах). Меня много чего не устраивало в работе miniShop2 и проще было сделать все с нуля, а не выбрасывать из старого компонента.

Когда релиз



У меня не так много времени на работу. Никто ведь не отменял необходимости коммерческой работы. Я стараюсь выделять один день в неделю и по ощущениям мне осталось еще 4-6 недель до завершения работ.

Важно понимать, что «завершение работ» еще не подразумевает коммерческого релиза для всех. Я изготавливаю Альфа-версию, цель которой показать концепт-идею проекта. Разработчики компонентов смогут изучить проект, пощупать его, прикинуть как подогнать под него свои существующие компоненты и как реализовать новые идеи.

Опытные участники сообщества смогут приступить к тестированию и поиску багов. Ну а я займусь документацией и решением найденных проблем. В лучшем случае после 6 месяцев со дня альфа-релиза можно будет пилить какие-то более менее стабильные проекты. Там может и базовые компоненты подтянутся.

Чем помочь



В первую очередь меня конечно же интересует финансовая помощь. Желающим помочь — все реквизиты есть на отдельной странице modx.pro/about

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

После альфа-релиза я составлю подробный план тестирования, выложу его здесь и мы сможем начать собирать первые данные о работе проекта.
Николай Савин
25 января 2024, 12:02
modx.pro
1 240
+29
Поблагодарить автора Отправить деньги

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

Andrew
25 января 2024, 12:11
+2
Кайф! Большая работа, необходимая для развития Modx в целом. Магаз важный компонент, спасибо Коль, что тянешь этот локомотив. Донат на спортпит закину)
    Николай Савин
    25 января 2024, 12:13
    +2
    А плюсик статье зажал таки
      Andrew
      25 января 2024, 12:14
      0
      Виноват. Не часто пишу комменты тут)
    Наумов Алексей
    25 января 2024, 12:19
    0
    Привет! Ждем, с нетерпением)

    Спрошу про валидацию.
    Ты пишешь:
    валидация предусмотрена как в msCustomer, так и в msOrder
    т.е. валидация указывается в вызове сниппета.

    Сохраниться ли сценарий, что для разных способов доставки я смогу сделать: через курьерскую службу обязательным полный ФИО + мобильный телефон, а для самовывоза просто Имя (телефон не обязателен).
    Пример абстрактный, но суть ясна.

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

    Все равно предложу еще раз) есть время и желание помочь, прежде всего с целью ускорить выход альфа версии.
    Переживания, что другой человек сделает не так, как видишь ты в голове — понятно. Но всегда можно обсудить список задач и подход к их решению. ;-)
      Николай Савин
      25 января 2024, 12:22
      0
      Да, я здесь оговорился, ты верно заметил.
      msCustomer — простая форма, там валидация пока в сниппете вызывается.
      А для msOrder валидация будет конечно же зависеть от способа доставки и прописываться где-то в интерфейсе доставки (я еще не сделал это).
        Николай Савин
        25 января 2024, 12:25
        +1
        Но всегда можно обсудить список задач и подход к их решению. ;-)
        Ты уже второй за сегодня, кто предлагает помощь. Я собственно пока первому проговаривал в чем вообще отличие будет и подумал что можно статью запилить.

        Хорошо я прикину как тебя к делу привлечь.
        Wassi Wassinen
        25 января 2024, 12:45
        0
        Николай, прежде всего — вы Молодец! С большой буквы. :)

        Где-то видел упоминание, что планируется встроенная фильтрация для MS3.

        Вопрос — это есть в планах и получится ли сделать встроенную фильтрацию для каталога? Только не mFilter2 с его медленной работой, а что-то быстрое вроде flatFilters?
        На мой скромный взгляд и мнение — магазин должен быть с фильтрами из коробки. Это не претензия — просто наблюдение за другими продуктами и желание сделать MODx более конкурентным.

        Если такая возможность и идея есть — готов дополнительно поучаствовать материально.

        Заранее благодарен за ответ.
          Николай Савин
          25 января 2024, 12:56
          +1
          Николай, прежде всего — вы Молодец! С большой буквы. :)

          Спасибо )

          Где-то видел упоминание, что планируется встроенная фильтрация для MS3.
          Я подобного не анонсировал, упоминаний такого не видел.

          Вопрос — это есть в планах и получится ли сделать встроенную фильтрацию для каталога? Т
          На данный момент такого не планируется по нескольким причинам.
          Прежде всего — объем работы большой. Мне бы запустить то, что расписал. А дальше видно будет.
          Вторая причина — технологии. mFilter2 медленный по причине медленного устройства традиционных баз данных и языка PHP в принципе.
          К работе Артура и его FlatFilter я честно, говоря отношусь скептически. На первый взгляд (а дальше я не заглядывал) это выглядит как большой костыль. Весь цивилизованный мир давно использует ElasticSearch и его аналоги, которые не на PHP выполнены.
          Я, в том числе на рабочем проекте использую поисковый движок TypeSense. Поиск уже реализовал. Фильтра по аналогии с mFilter2 уже на подходе, скоро запущу. Но большое ограничение в том, что для запуска требуется квалификация и VDS сервер.
            Wassi Wassinen
            26 января 2024, 19:19
            0
            Отдельный VDS под фильтры?
              Николай Савин
              26 января 2024, 20:41
              0
              Да нет конечно. Один VDS на котором крутится магазин. А рядом лежит поисковый движок, по сути шустрая база данных. Обмен между двумя системами происходит через Curl запросы. Магазин ему запрос (или набор фильтров), движок в ответ готовый JSON.
              Василий Наумкин
              27 января 2024, 06:27
              1
              +2
              mFilter2 медленный по причине медленного устройства традиционных баз данных и языка PHP в принципе.

              Вот уж не соглашусь — из базы он только выбирает данные, затем строит файловый индекс, и его фильтрует на PHP, пробегая по массивам. И, полагаю, делает это совсем неоптимально.

              Сегодня есть гораздо более быстрый компонент k-samuel/faceted-search, который я опробовал на разных проектах, в том числе и с большим количеством данных — результаты отличные. Вопрос только в том, сможет ли кто-то, и захочет ли, прикрутить этот пакет к MODX.

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

              А с базой MODX работать придётся даже ElasticSearch, потому что именно в ней хранятся данные товаров, которые нужно фильтровать.
                Николай Савин
                27 января 2024, 10:09
                +1
                Faceted-search раз месяц тут всплывает в различных постах. Судя по всему — именно его и будем в дальнейшем использовать для организации полноценного каталога в MS3. Альтернатив особо и нет для шаредов.
            Баха Волков
            25 января 2024, 13:02
            +2
            Нам всем, т.е. тем, кто хоть как-то связан с MODX повезло, что у нас есть Аксакал @Николай Савин А внедренные идею прямо в точку.
            Руслан Алеев
            25 января 2024, 13:57
            0
            Мощь! Пасиб за труд!
              Андрей Шевяков
              25 января 2024, 14:07
              +1
              Уже не первый раз Тиньков ругается при донате. Но вроде благодарочка ушла.
              Спасибо за вклад в наше MODX будущее))
              Константин
              25 января 2024, 17:54
              1
              0
              Добрый день.
              Подскажите пожалуйста, какой плагин лучше всего использовать сейчас для организации комментариев к статьям на сайте на MODX 3?
              Благодарю!
                Николай Савин
                25 января 2024, 18:17
                0
                EasyComm
                  Константин
                  25 января 2024, 18:49
                  0
                  EasyComm он больше для отзывов. Там нет возможности комментировать комментарии других, если ты не админ.
                  Так что вопрос открыт, пожалуйста, подскажите!
                    Николай Савин
                    25 января 2024, 18:51
                    0
                    В вашем вопросе не было про древовидные комментарии. Так навскидку других компонентов я не знаю. Tickets точно не адаптирован.
                Ivan K.
                26 января 2024, 21:11
                0
                Николай спасибо, что ведете разработку такого важного компонента. Жду с нетерпением релиза.

                Вопрос по донату, у вас на станице modx.pro/about — реквизиты Ивана Бочкарева. По ним закидывать? или вам по кнопке в стартпосте?
                  Николай Савин
                  26 января 2024, 21:52
                  +1
                  Спасибо за теплые слова. Донат можно отправить на любой удобный вариант. Любой из них дойдет по назначению до кошелька сообщества. К слову это не только для меня деньги. Мы поддерживаем и других авторов, в их работе над проектами сообщества. Из последнего, недавно поддержали разработку нового сайта документации.
                    Иван Бочкарев
                    27 января 2024, 06:52
                    +2
                    > Вопрос по донату, у вас на станице modx.pro/about — реквизиты Ивана Бочкарева.

                    Я выступаю казначеем сообщества =). За сохранность можете не переживать.
                    iWatchYouFromAfar
                    31 января 2024, 21:41
                    0
                    Будет ли совместим MS3 с текущей компонентной базой? Или MS3 сугубо для MODx 3?
                    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                    26