Last active
August 1, 2022 08:30
-
-
Save iKrevedko/2970642ee0f7e060ea89 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Важно!! | |
После того, как вы добавили обработчик события 'inited:insales:checkout:deliveries' | |
нужно вызвать событие 'ready:insales:delivery' (можно для document), которое сообщает нам о том, что вы готовы обрабатывать события. | |
В этом случае если событие 'inited:insales:checkout:deliveries' уже сработало, мы сгенерируем его повторно. | |
Для вызова событий необходимо использовать CustomEvent | |
// Для удобства вызова события можно добавить метод jQuery | |
if (typeof $.fn.triggerCustom !== 'function') { | |
$.fn['triggerCustom'] = function(type, data, options) { | |
if (options == null) { | |
options = {}; | |
} | |
options = $.extend({}, { | |
bubbles: true, | |
cancelable: true, | |
detail: data | |
}, { | |
bubbles: options.bubbles, | |
cancelable: options.cancelable | |
}); | |
return this.each(function() { | |
var e; | |
e = new window.CustomEvent(type, options); | |
return this.dispatchEvent(e); | |
}); | |
} | |
} | |
Если вы используете jQuery для обработки событий, то получить данные можно как уазано в примерах. | |
$(document).on('inited:insales:checkout:deliveries', function(e) { data ... }) - инициализированы способы доставки. Происходит каждый раз когда покупатель меняет Страну\Регион\Город\Индекс | |
data = e.originalEvent.detail | |
data = { | |
"order": { | |
"comment":"", | |
"referer":"", | |
"currency_code":"UAH", | |
"currency_unit":"грн.", | |
"shipping_address": { | |
"address":"dfgdfgdfgdfg", | |
"country":"RU", | |
"middlename":"asdf", | |
"name":"ssdf", | |
"phone":"+79261111111", | |
"surname":"seser", | |
"region":"обл Московская", | |
"city":"", | |
"zip":"1234567", | |
"fields_values":[] | |
}, | |
"client": { | |
"client_group_id":null, | |
"created_at":"2014-04-15T15:11:57+04:00", | |
"email":"test123@test.com", | |
"id":46613, | |
"middlename":"asdf", | |
"name":"ssdf", | |
"phone":"+79261111111", | |
"registered":true, | |
"subscribe":true, | |
"surname":"seser", | |
"fields_values":[ | |
{"field_id":117040,"name":"Подписка на новости","value":"0","human_value":"Нет"} | |
] | |
}, | |
"recipient": { | |
"name": "ssdf", | |
"surname": "seser", #Поле может отсутствовать если оно выключено в настройках | |
"middlename": "asdf", #Поле может отсутствовать если оно выключено в настройках | |
"phone": "+79261111111", | |
"email": "test123@test.com" | |
}, | |
"order_lines":[ | |
{"product_id":227777,"quantity":1,"sku":null,"title":"23452345","variant_id":318919,"weight":null,"sale_price":1192}, | |
{"product_id":149504,"quantity":1,"sku":null,"title":"2414223","variant_id":202900,"weight":null,"sale_price":33}, | |
{"product_id":230764,"quantity":1,"sku":null,"title":"Магнитола Sony CFD-S03CP","variant_id":322194,"weight":null,"sale_price":27} | |
], | |
"discounts":[ | |
{"description":"Более 100р. скидка 10р.","amount":10} | |
], | |
"total_weight":0, | |
"items_price":1242, | |
"fields_values":[ | |
{"field_id":127921,"name":"carrier_id","value":"sdfsdf","human_value":"sdfsdf","delivery_variant_group_name":15323}, | |
{"field_id":127922,"name":"carrier_name","value":"sdfsdf","human_value":"sdfsdf","delivery_variant_group_name":15323}, | |
{"field_id":127923,"name":"carrier_pickpoint_name","value":"","human_value":"","delivery_variant_group_name":15323}, | |
{"field_id":127924,"name":"carrier_pickpoint_address","value":"","human_value":"","delivery_variant_group_name":15323} | |
] | |
}, | |
"deliveries":{ | |
"15325":{"id":15325,"html_id":"#order_delivery_variant_id_15325","available":true,"active":true,"price":120,"description":null,"description_html":null,"fields_values":[],"selected":false,"is_external":false,"external_url":false,"external_data":{}}, | |
"15326":{"id":15326,"html_id":"#order_delivery_variant_id_15326","available":true,"active":true,"price":250,"description":null,"description_html":null,"fields_values":[],"selected":true,"is_external":false,"external_url":false,"external_data":{}} | |
} | |
} | |
$('#order_delivery_variant_id_123').on('updated:insales:checkout:recipient', function(e) { order ... }) - Обновлены данные получателя | |
$('#order_delivery_variant_id_123').on('updated:insales:checkout:delivery', function(e) { order ... }) - способ доставки обновлен | |
order = e.originalEvent.detail | |
order = { | |
... | |
"delivery": { | |
"id": 123, | |
"available": true, | |
"active": true, | |
"html_id": '#order_delivery_variant_id_123', | |
"price": 123, | |
"fields_values": [], | |
"selected": false, | |
"description": null, | |
"description_html": null, | |
"is_external": true, | |
"external_url": null, | |
"external_data": {} | |
} | |
} | |
$('#order_delivery_variant_id_123').on('selected:insales:checkout:delivery', function(e) { order ... }) - способ доставки выбран. Срабатывает один раз т.е. если пользователь кликнул 3 раза, событие вызоветься только один раз | |
order = { ... } см. updated | |
$('#order_delivery_variant_id_123').on('unselected:insales:checkout:delivery', function(e) { order ... }) - выбран другой способ доставки, где delivery предыдущий способ доставки | |
order = { ... } см. updated | |
$('#order_delivery_variant_id_123').triggerCustom('update:insales:delivery', delivery) - обновить способ доставки (скрывает спинер и очищает ошибки) | |
После обновления способа доставки пересчет и отрисовка общей стоимости заказа, стоимости доставки, а так же добавление скрытых полей со значением стоимости доставки, доп полей, описания доставки происходит на стороне InSales. Теперь нет необходимости вручную добавлять скрытые поля и следить за их очисткой при смене способа доставки. | |
delivery = { | |
"price": 100, // Стоимость доставки | |
"fields_values": [{"field_id": 123, "value": 'test'}], // Доп поля заказа | |
"is_external": true, // Флаг внешнего способа доставки. У доставок помеченных таким флагом не обновляется стоимость при получении с сервера доступных способов доставки. Так же при сохранении заказа на сервер передаются стоимость доставки и значения доп полей | |
"description": 'my external delivery', // Описание способа доставки которое сохраниться в заказе при создании. | |
"description_html": '<b>my external delivery</b>', // Описание способа доставки выводимое в списке доставок | |
"external_data": {"my_data": 'test'} // Произвольные данные которые можно хранить в доставке. НЕ сохраняются. | |
} | |
$('#order_delivery_variant_id_123').triggerCustom('calculating:insales:delivery') - способ доставки расчитывается (выводиться спинер, стоимость доставки скрывается) | |
$('#order_delivery_variant_id_123').triggerCustom('hide:insales:delivery') - скрыть способ доставки (способ доставки при этом не дизейблиться и можно его выбрать програмным способом) | |
$('#order_delivery_variant_id_123').triggerCustom('show:insales:delivery') - показать способ доставки | |
$('#order_delivery_variant_id_123').triggerCustom('enable:insales:delivery') - активировать способ доставки | |
$('#order_delivery_variant_id_123').triggerCustom('disable:insales:delivery') - выключить способ доставки (не позволяет выбрать способ доставки) | |
$('#order_delivery_variant_id_123').triggerCustom('error:insales:delivery', 'Способ доставки не доступен') - вывести сообщение об ошибке | |
$('#order_delivery_variant_id_123').triggerCustom('preventSubmit:insales:delivery') - Запретить создание заказа (если требуется заполнение полей) | |
1. Форма заказа не будет отправлена на сервер только в случае, когда даный способ доставки выбран пользователем | |
2. Перед вызовом события inited:insales:checkout:delivery флаг принудительно сбрасывается | |
3. После нажатия на кнопку создать заказ генерируется событие 'submitPrevented:insales:checkout' | |
$('#order_delivery_variant_id_123').on('submitPrevented:insales:checkout') | |
$('#order_delivery_variant_id_123').triggerCustom('allowSubmit:insales:delivery') - Разрешить создание заказа | |
$('document').triggerCustom('update:insales:recipient', recipient) | |
recipient = { | |
"name": "ssdf", | |
"surname": "seser", #Поле может отсутствовать если оно выключено в настройках | |
"middlename": "asdf", #Поле может отсутствовать если оно выключено в настройках | |
"phone": "+79261111111", | |
"email": "test123@test.com" | |
} | |
Порядок событий при загрузке страницы оформления заказа или смены адреса | |
1) inited:insales:checkout:deliveries | |
2) unselected:insales:checkout:delivery - вызыается только если полсле получения списка доступных способов доставки способ доставки был помечен как недоступный (нпаример из-за ограничения по региону) | |
3) selected:insales:checkout:delivery - при первой загрузке вызывается у первого доступного. При повторной загрузке, у ранее выбранного пользователем. | |
(Может не вызваться если для выбранного способа доставки это событие уже было вызвано и способ доставки не изменился) | |
4) unselected:insales:checkout:payment - вызывается если выбранный способ оплаты не доступне для выбранного способа доставки | |
5) selected:insales:checkout:payment - при первой загрузке вызывается у первого доступного. При повторной загрузке, у ранее выбранного пользователем. | |
(Может не вызваться если для выбранного способа оплаты это событие уже было вызвано и способ оплаты не изменился) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Для чекаута 2.0
Функция для ручного пересчёта доставок
get_deliveries()
Функция для ручного пересчёта оплат
get_payments()