You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Есть один нюанс. Метод определяет что оформление заказа начато по наличию инициированной сессии, на сколько я понял. И тут возникает момент.
Допустим если у нас есть 2 страницы (корзина/форма заказа). Очевидно, что находясь на странице оформления заказа (там где лежит форма order) - он начат. Вопрос, начато ли оформление заказа если пользователь зашел один раз на форму заказа, что-то там сделал, сессия создалась, метод isOrderStarted() отдал =true, затем вернулся на страницу корзины и удалил часть товаров или изменил количество, казалось бы ответ - ДА, на форму заходил ведь, что-то нажал, просто потом отошел в сортир/корзину/страницу с котами =).
Но вот момент, если сделать плагин и в событии "OnRegisterDelivery" описать, как пример, получение данных от апи сервиса, то каждый раз, когда пользователь нажимает +- или меняет что-то на странице корзины, событие "OnRegisterDelivery" отрабатывает и данные запрашиваются даже когда формы не видно. Исходя из названия события, он должно отрабатывать когда мы добавляем способы доставки, по идее находясь на странице, где был вызван "Order".
Если конечно корзина на одной странице с формой, вопрос отпадает.
Можно ли методами Commerce определить, что пользователь в процессе оформления и в форме? Я изначально попробовал ($modx->documentIdentifier !== $params['order_page_id']), грубо, но ajax запросы проходят через 404 я так понимаю и там не получается в "OnRegisterDelivery" определить id страницы. Ожидаю именно в "OnRegisterDelivery", чтобы просто заблокировать запросы по какому-либо условию что юзверь не в корзине или где-либо еще. Каждый раз просто плюс нажал и пошел спам в сервис, при этом изменение данных корзины тоже тормозить начинает из-за ожидания ответа.
А в каком событии можно? Чтобы перерисовывать форму согласно изменившимся данным? Я просто не нашел ничего в доках по этому поводу. Там в событии OnRegisterDelivery и массиве $rows добавляется свой вариант и у него есть markup и туда можно добавить дополнительный контент (мне показалось что туда зайдет форма от сервиса из 6 полей), которую можно менять еще и через браузер при помощи, грубо JS: onChange = Commerce.updateOrderData($('[data-commerce-order]')); Оно все прекрасно работает, только проблема в том, что при изменении количества товаров идет пересчет сумм доставок даже когда пользователь не на странице с формой. Из-за того, что сессия распространяется на все страницы, а данные мы берем из сессии через $processor->getRawData() в событии OnRegisterDelivery.
Кеширование в принципе да, вариант, но не в этом случае, когда почти на любое действие в форме или в корзине нужно перезапрашивать АПИ за новым перерасчетом и перерисовкой формы.
У меня пока один вариант, воткнуть костыль [[Order? &isOrderstarted=1]] может быть тогда из массива $params в событии OnRegisterDelivery можно будет вытащить эту переменную и если она существует, значит мы на стадии оформления через форму...
Перерисовывать форму по данным нужно в OnOrderRawDataChanged
Если форма в OnRegisterDelivery рисуется, то в OnOrderRawDataChanged нет к ней доступа в любом случае. Все что есть в OnOrderRawDataChanged это только сессия. Тут смысла в ней нет. Ее можно получить $processor->getRawData() в событии OnRegisterDelivery.
Activity
[-]Processor: onOrderStarted()[/-][+]Processor: isOrderStarted()[/+]Pathologic commentedon Oct 1, 2024
Не нужно обращаться к апи в OnRegisterDelivery. Или кэшировать обращения, если по-другому никак.
projkin commentedon Oct 1, 2024
А в каком событии можно? Чтобы перерисовывать форму согласно изменившимся данным? Я просто не нашел ничего в доках по этому поводу. Там в событии OnRegisterDelivery и массиве $rows добавляется свой вариант и у него есть markup и туда можно добавить дополнительный контент (мне показалось что туда зайдет форма от сервиса из 6 полей), которую можно менять еще и через браузер при помощи, грубо
JS: onChange = Commerce.updateOrderData($('[data-commerce-order]'));Оно все прекрасно работает, только проблема в том, что при изменении количества товаров идет пересчет сумм доставок даже когда пользователь не на странице с формой. Из-за того, что сессия распространяется на все страницы, а данные мы берем из сессии через $processor->getRawData() в событии OnRegisterDelivery.Кеширование в принципе да, вариант, но не в этом случае, когда почти на любое действие в форме или в корзине нужно перезапрашивать АПИ за новым перерасчетом и перерисовкой формы.
У меня пока один вариант, воткнуть костыль [[Order? &isOrderstarted=
1]] может быть тогда из массива $params в событии OnRegisterDelivery можно будет вытащить эту переменную и если она существует, значит мы на стадии оформления через форму...Pathologic commentedon Oct 1, 2024
Перерисовывать форму по данным нужно в OnOrderRawDataChanged
projkin commentedon Oct 11, 2024
Если форма в OnRegisterDelivery рисуется, то в OnOrderRawDataChanged нет к ней доступа в любом случае. Все что есть в
OnOrderRawDataChangedэто только сессия. Тут смысла в ней нет. Ее можно получить$processor->getRawData() в событии OnRegisterDelivery.