Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Processor: isOrderStarted() #151

Open
projkin opened this issue Oct 1, 2024 · 4 comments
Open

Processor: isOrderStarted() #151

projkin opened this issue Oct 1, 2024 · 4 comments

Comments

@projkin
Copy link

projkin commented Oct 1, 2024

Есть один нюанс. Метод определяет что оформление заказа начато по наличию инициированной сессии, на сколько я понял. И тут возникает момент.

Допустим если у нас есть 2 страницы (корзина/форма заказа). Очевидно, что находясь на странице оформления заказа (там где лежит форма order) - он начат. Вопрос, начато ли оформление заказа если пользователь зашел один раз на форму заказа, что-то там сделал, сессия создалась, метод isOrderStarted() отдал =true, затем вернулся на страницу корзины и удалил часть товаров или изменил количество, казалось бы ответ - ДА, на форму заходил ведь, что-то нажал, просто потом отошел в сортир/корзину/страницу с котами =).
Но вот момент, если сделать плагин и в событии "OnRegisterDelivery" описать, как пример, получение данных от апи сервиса, то каждый раз, когда пользователь нажимает +- или меняет что-то на странице корзины, событие "OnRegisterDelivery" отрабатывает и данные запрашиваются даже когда формы не видно. Исходя из названия события, он должно отрабатывать когда мы добавляем способы доставки, по идее находясь на странице, где был вызван "Order".

Если конечно корзина на одной странице с формой, вопрос отпадает.

Можно ли методами Commerce определить, что пользователь в процессе оформления и в форме? Я изначально попробовал ($modx->documentIdentifier !== $params['order_page_id']), грубо, но ajax запросы проходят через 404 я так понимаю и там не получается в "OnRegisterDelivery" определить id страницы. Ожидаю именно в "OnRegisterDelivery", чтобы просто заблокировать запросы по какому-либо условию что юзверь не в корзине или где-либо еще. Каждый раз просто плюс нажал и пошел спам в сервис, при этом изменение данных корзины тоже тормозить начинает из-за ожидания ответа.

@projkin projkin changed the title Processor: onOrderStarted() Processor: isOrderStarted() Oct 1, 2024
@Pathologic
Copy link
Collaborator

Pathologic commented Oct 1, 2024

Не нужно обращаться к апи в OnRegisterDelivery. Или кэшировать обращения, если по-другому никак.

@projkin
Copy link
Author

projkin commented Oct 1, 2024

Не нужно обращаться к апи в OnRegisterDelivery.

А в каком событии можно? Чтобы перерисовывать форму согласно изменившимся данным? Я просто не нашел ничего в доках по этому поводу. Там в событии OnRegisterDelivery и массиве $rows добавляется свой вариант и у него есть markup и туда можно добавить дополнительный контент (мне показалось что туда зайдет форма от сервиса из 6 полей), которую можно менять еще и через браузер при помощи, грубо JS: onChange = Commerce.updateOrderData($('[data-commerce-order]')); Оно все прекрасно работает, только проблема в том, что при изменении количества товаров идет пересчет сумм доставок даже когда пользователь не на странице с формой. Из-за того, что сессия распространяется на все страницы, а данные мы берем из сессии через $processor->getRawData() в событии OnRegisterDelivery.

Кеширование в принципе да, вариант, но не в этом случае, когда почти на любое действие в форме или в корзине нужно перезапрашивать АПИ за новым перерасчетом и перерисовкой формы.

У меня пока один вариант, воткнуть костыль [[Order? &isOrderstarted=1]] может быть тогда из массива $params в событии OnRegisterDelivery можно будет вытащить эту переменную и если она существует, значит мы на стадии оформления через форму...

@Pathologic
Copy link
Collaborator

Перерисовывать форму по данным нужно в OnOrderRawDataChanged

@projkin
Copy link
Author

projkin commented Oct 11, 2024

Перерисовывать форму по данным нужно в OnOrderRawDataChanged

Если форма в OnRegisterDelivery рисуется, то в OnOrderRawDataChanged нет к ней доступа в любом случае. Все что есть в OnOrderRawDataChanged это только сессия. Тут смысла в ней нет. Ее можно получить $processor->getRawData() в событии OnRegisterDelivery.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants