Максим

Максим

С нами с 01 июня 2020; Место в рейтинге пользователей: #3401
Максим
Вчера в 12:45
0
Нет, данную проблему не решил, потому как она мне и не мешала… Так как с сам minishop3 использовал на паре проектов где доставка и не требовалась. Буду решать проблему, если столкнусь именно с моментом когда цена доставки будет необходима в проекте.

Опишите пожалуйста решение, если вдруг сделаете что-то. Думаю что кому-то ещё пригодиться…

И просто любопытство, то что я выше писал «монолог», вам пригодилось? :D
Максим
26 мая 2025, 10:27
0
Вот я и вернулся обратно к MiniShop3. На данный момент застрял на странице корзины. У меня тут сразу размещены сниппеты [[!msCart]] и [[!msOrder]], тем самым выводится и сам список товаров в заказе и форма с данными покупателя. У самих товаров, при изменении их количества, цена меняется (при условии что сниппет обёрнут в div с id msMiniCart, как у миникорзины). Но не меняется общая цена заказа под формой с данными покупателя, там где написано «Итого, с доставкой:». По началу подумал что просто оформление заказа вывести на другую страницу, тем самым, при переходе на неё, у нас уже будет сформированный список товаров и цена уже меняться не будет… но, при оформлении заказа у нас есть radiobutton доставки, где может быть указана сумма этой самой доставки. И при выборе доставки с дополнительной стоимостью, у нас эта стоимость не прибавляется к заказу… Это происходит только после обновления страницы. Может кто-то подсказать, где находится скрипт, который этот самый блок обновляет с итоговой стоимостью? Я, возможно, сам найду, но может кто-то ускорит этот процесс?



И ещё, нужно сбросить содержимое корзины, когда заказ оформлен. Это происходит, но результат можно увидеть только после перезагрузки страницы… а нужно что бы это делалось ajax-ом… Тут, скорее всего, должен быть метод в скрипте, который, как минимум, обновляет страницу, добавляя в url параметр orderid с номером нового заказа. Может кто-то подсказать где этот метод искать?

Если что, ни при выборе типа доставки/оплаты, ни при создании заказа, ошибок не возникает
Максим
22 мая 2025, 17:00
0
Да, ещё добавлю момент важный, с которым я столкнулся в самом начале, после установки модуля. В системных настройках MiniShop3 есть параметр ms3_frontend_assets, в нём указан перечень css/js файлов что будут подключены на страницах сайта. Собственно, в этом списке есть опечатка/ошибка, которая не позволяет добавить эти ссылки скриптом. По умолчанию этот список выглядит вот так:

[
	"[[+cssUrl]]web\/lib\/izitoast\/iziToast.min.css",
	"[[+jsUrl]]web\/lib\/izitoast\/iziToast.js",
	"[[+jsUrl]]web\/ms3.js",
	"[[+jsUrl]]web\/modules\/hooks.js",
	"[[+jsUrl]]web\/modules\/form.js",
	"[[+jsUrl]]web\/modules\/request.js", 
	"[[+jsUrl]]web\/modules\/cart.js",
	"[[+jsUrl]]web\/modules\/customer.js",
	"[[+jsUrl]]web\/modules\/order.js",
	"[[+jsUrl]]web\/modules\/message.js",
]
Нужно удалить запятую у последней ссылки. Иначе этот список, который фактически является JSON-строкой, не будет преобразован в массив. То есть список должен выглядеть вот так:

[
	"[[+cssUrl]]web\/lib\/izitoast\/iziToast.min.css",
	"[[+jsUrl]]web\/lib\/izitoast\/iziToast.js",
	"[[+jsUrl]]web\/ms3.js",
	"[[+jsUrl]]web\/modules\/hooks.js",
	"[[+jsUrl]]web\/modules\/form.js",
	"[[+jsUrl]]web\/modules\/request.js", 
	"[[+jsUrl]]web\/modules\/cart.js",
	"[[+jsUrl]]web\/modules\/customer.js",
	"[[+jsUrl]]web\/modules\/order.js",
	"[[+jsUrl]]web\/modules\/message.js"
]
Надеюсь это кому-нибудь поможет.

И ещё. Хочу сказать огромное спасибо разработчикам за проделанную титаническую работу! Очень жду, как и многие, модуль в общем доступе уже в репозиториях, хотя, думаю, из-за объёма работ и параллельных забот, это произойдёт не скоро.
Максим
22 мая 2025, 16:46
0
Продвинулся ещё немного, в файле cart.js, который находится по адресу assets/components/minishop3/js/web/modules/ есть строки:

render: function (response) {
    const cartRender = response.data.render.cart
    console.log(response);

    for (const key in cartRender) {
      const { selector, render } = cartRender[key]
      
      const $element = document.querySelector(selector)

      if ($element) {
        $element.innerHTML = render
      }
    }
  },
Где selector оказывается пустым, и, соответственно, скрипт не может определить где корзина, что бы обновить её. Честно, пока не пойму откуда он должен получить идентификатор контейнера корзины… Возможно id блока где-то можно указать, но я не нашёл где… Возможно скрипт сам его получает где-то… Для проверки в строку
const $element = document.querySelector(selector)
вставил, добавленный мною на сайте идентификатор msMiniCart (взятый с minisop2 в надежде что его добавление «чудесным образом» позволит корзине обновляться, но не тут то было), получив
const $element = document.querySelector(#msMiniCart )
и корзина полноценно заработала. Пока остановлюсь на этом… мне этого пока достаточно, что бы продолжить другие работы по сайту, но, возможно, скоро я снова погружусь в интересный процесс доработки кода.
Максим
22 мая 2025, 15:49
0
Выявил такую штуку… Скорее всего, то что корзина на странице не обновляется, связано с тем что нет какой-то обёртки у неё, что бы скрипт мог понять что именно нужно обновлять после изменения содержимого. Сейчас же сниппет и для отображения на всех страницах, и на самой странице корзины общий — выводит только его содержимое. То есть, если добавить на страницу [[!msCart]], то он просто выводит содержимое корзины в виде таблицы или просто текстом напишет что товаров нет, без какой-то обёртки. Посмотрю как выглядит корзина в minishop2, может оттуда можно будет что-то взять
Максим
22 мая 2025, 15:23
0
Оказалось что в updateToken пропустил один this, теперь ошибок нет вообще, но корзина не обновляется, что бы показать увеличение количества товаров, после добавления… Содержимое страницы обновляется только после перезагрузки страницы. Буду искать причину. Но если что знает от чего так, то подскажите, буду признателен.
Максим
22 мая 2025, 15:06
0
Продолжу делится тем как продвигается исправление встречающихся мне ошибок. Надеюсь что двигаюсь в правильном направлении, может это кому-то то же поможет. В файле заменил все встречаемые this на ms3, в методах setToken и updateToken (в файле customer.js). Теперь товар добавляется в корзину, только сама корзина на странице не обновляется. Товар в корзине можно увидеть только после обновления страницы.



Теперь ошибка в консоли вот такая. Что-то не так в функции updateToken, ошибка уже не на какой-то конкретной строке, а выводится из try/catch
Максим
22 мая 2025, 13:19
0
Не знаю верно ли делаю или нет, может кто-то подскажет, пока заменил:
ms3.setToken()
на
ms3.customer.setToken()
Ошибка пропала. На странице, при нажатии на кнопку добавления товара в корзину, появилось всплывающее модальное об отсутствии токена (ранее страница просто перезагружалась). Копаюсь дальше. Сейчас видна в консоли другая ошибка:

Максим
22 мая 2025, 09:54
0
Дополню предыдущий пост. Сама функция, которую мы пытаемся вызвать, находится чуть ниже по коду, в этом же файле — она асинхронная

Максим
22 мая 2025, 09:24
0
Спасибо что откликнулись.

Пока была надежда что кто-то прям с такой же проблемой столкнулся кто-то, поэтому не прикреплял скриншоты. Сейчас будут подробности. Вот тут указаны эти методы, в самом репозитории модуля — https://github.com/modx-pro/MiniShop3/issues/15

Вот скриншот из консоли браузера


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

В каталоге ошибка в консоли вылазит сразу при загрузке страницы, так же и в карточке товара.

Вот скриншот блока кода из файла:
Максим
21 мая 2025, 17:04
0
У меня сайт на MODx 3.1.1, требуется настроить на нём магазин. Я поставил MiniShop3. Я в курсе что это альфа-версия и могут быть какие-то проблемы в работе, просто не хочется самим писать какой-то примитивный функционал магазина (займусь этим если ничего не решу с ошибками), что бы закрыть все потребности на сайте. Тем более что когда-то давным давно писалось что основной функционал с MiniShop2 перенесён. Может кто-то ставил уже этот модуль и решал возникнувшие проблемы? В частности, у меня проблема с асинхронной функцией ms3.setToken() в файле customer.js (возможно дальше тоже появятся ошибки, но это пока в числе первых), возвращается ошибка «ms3.setToken is not a function». Знает кто-то как её исправить? В поиске не нашёл что бы у кого-то подобная проблема была…

На гите есть упоминание этой функции и пометка что «Метод setToken является асинхронной, но вызывается как синхронный. Возможны ошибки в будущем.». Может кто-то знает как убраь эту ошибку?
Максим
01 июня 2020, 16:24
0
Если кому понадобится (по настройке AjaxForm и мультиязычности), возможно Мне из будущего… Мало ли, придётся с этим опять столкнуться, не дай Бог…
Короче, лезем в «Системные настройки» системы управления MOdx Revo, раздел «Сессии и куки», параметр «session_cookie_path» и меняем на «/». И плюс к карме вот этому человеку и его статье — https://modx.pro/howto/16334… если бы не Он, я бы кого-нибудь убил или сам убился.