MiniShop3 для MODX3. Что нового.

Всем привет. Продолжаю разработку компонента, а заодно рассказываю — что нового.

Если прошлые месяцы основное внимание было уделено админке и администрированию, то в августе фокус внимания сместился на фронт.

Начал с того, что переделал сниппет msProducts. Подробности ниже.


сниппет msProducts — основные изменения



1. Добавил новый параметр includeOptions. Теперь вызвав такой параметр, по аналогии с includeTVs вы получаете присоединенные значения нужных вам опций.

2. Добавил новый параметр includeVendor (здесь я не уверен насчет нейминга. Может быть придумаю, что-то лучше). Этот параметр задает список присоединяемых полей производителя.
Для сравнения в miniShop2 без каких либо уточнений тянутся абсолютно все поля заданного вендора. Это довольно большой список совсем не нужных в данном случае данных. Теперь мы можем ускорить загрузку страницы, просто выбирая нужное.

3. Убрал форматирование чисел по умолчанию. Теперь price и weight приходят в чанк в виде числа, а не строк, отформатированных пробелами. Думаю не один я заморачивался убирая эти пробелы через модификатор replace.

4. Но красота нам по-прежнему нужна верно? Для желающих получить отформатированные по старинке цены и веса будут готовые модификаторы.

{$pirce | ms3_price_format}
{$weight | ms3_weight_format}

Заказы только через базу данных



Посовещавшись с разработчиками, мы приняли решение отказаться от хранения корзины и черновика заказа в сессии, оставив основным (и пока единственным) способом хранение черновиков в базе данных.

Кроме того несколько обновилась и логика опознания пользователя. При первой инициализации минишопа на сайте, происходит генерация уникального токена, который сохраняется в localStorage и далее используется для подписания запросов.

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

Как будет работать оформление заказа.

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

Вот такие идеи удалось внедрить на сегодняшний день.

План работ на сентябрь



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

Полностью обновляемые на лету корзины. Будет это работать следующим образом.
1. Каждый вызываемый на странице сниппет msCart регистрируется системой, довольно хитрым образом.
2. Класс корзины всегда знает, сколько зарегистрировано корзин на странице, какие у них параметры, включая tpl
3. Запрос к корзине, любое ее изменение возвращает обновленный html каждой корзины. Таким образом они будут меняться на лету при любом изменении. Можно обозначить это как ServerSide Render

Заранее предусмотрен вариант указания собственных рендеров, и получения готовых html без сниппетов.
К примеру мобильное приложение, в основе которого лежит html сможет получать обновления своих html-виджетов удаленно, без использования сессий, без MODX шаблонов, просто используя RESTfull запросы.

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

Отдельный контроллер для покупателя. Исторически у нас всегда были 4 главных контроллера. Это классы работы с Корзиной, Заказом, Доставкой, Оплатой. Теперь появится пятый — Клиент.

Он будет отвечать за логику работы с покупателем.
— Генерировать токены
— Регистрировать пользователя системы
— Сохранять адреса, которых может быть несколько
— Управлять реферальной системой и кошельком

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

Регистрация пользователя. Кто сказал, что для оформления заказа обязательно нужно регистрировать пользователя MODX? А это точно нужно в 100% случаев? Мне кажется, что нет. Более того — нынче зарубежные системы вроде Apple требуют контроля регистрации. Клиент сам должен решать хочет он быть частью системы или нет. В общем дадим возможность просто создать заказ без заведения учетной записи.

Адреса доставки. Про это уже много раз писали тут. Все просто. Клиент может сохранять несколько адресов доставки и выбирать из сохраненных нужный.

Эпилог.



Ну как? Звучит неплохо мне кажется? Мне тоже нравится. Но как факт, для реализации всего выше перечисленного, требуется ваша, друзья мои финансовая поддержка. На данный момент, с учетом содержимого нашей копилки для продолжения работ не хватает 50 000 42000 рублей. Это достаточно небольшая сумма, учитывая объем поставленных задач и я уверен нам по силам ее собрать.

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

Спасибо за вашу прошлую и будущую поддержку. Уверен новый MiniShop3 станет стандартом разработки и будет радовать нас бесплатными обновлениями еще долгие годы.
Николай Савин
05 сентября 2023, 12:03
modx.pro
426
+21
Поблагодарить автора Отправить деньги

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

Наумов Алексей
05 сентября 2023, 12:13
+2
п. 3 и 4 в msProducts — ура))
Необязательная регистрация пользователя — тоже ура)
    Артур Шевченко
    05 сентября 2023, 13:57
    +1
    И ещё важно не забыть сделать метод генерации ключа товара в корзине публичным.
      Павел Голубев
      05 сентября 2023, 17:13
      0
      А почему всю корзину не хранить в LocalStorage? А при оформлении заказа прокидывать в процессор создающий заказ данные из LocalStorage. Там и событие есть на изменение, можно сразу все корзины офовлять по нему.
        Николай Савин
        05 сентября 2023, 17:17
        +4
        Не вижу ни одной причины за эту идею.
        В то время как хранение корзины в базе дает кучу преимуществ
        1. Во-первых, это уже реализовано в ms2 и повторить реализацию можно тупо быстрее.
        2. Во-вторых, менеджеры могут просматривать какие заказы сейчас находятся на стадии оформления, какие брошены и брать контактные данные, если хоть какие-то остались. В общем полный функционал брошенных корзин
        3. Сам покупатель не привязан к клиенту. Начал оформлять заказ на телефоне (авторизованный), затем перешел за комп и сразу после авторизации видит свой заказ.
          Наумов Алексей
          05 сентября 2023, 17:18
          0
          В базе удобно… администратор может видеть брошенные корзины.
          А еще можно зайти под своей учеткой с разных устройств и видеть корзину же?..
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        7