Битрикс – Как при сохранении заказа обновить поле пользователя

Для решения данной задачи будем использовать обработчик события и метод из API.
Разделим задачу на 2 шага.

Событие сохранения заказа в битриксе

Данное событие вызывается при обновлении заказа. Записываем его в init.php:

// отлавливаем сохранение заказа
AddEventHandler("sale", "OnOrderSave", "OrderMySave");
function OrderMySave($orderID, $fields, $orderFields){

}

В данной функции вылавливаем переданные параметры:

AddEventHandler("sale", "OnOrderSave", "OrderMySave");
function OrderMySave($orderID, $fields, $orderFields){
	$valText = false;
	if ($orderFields['ORDER_PROP'][32]) {
		$valText = $orderFields['ORDER_PROP'][32];
	}
	elseif ($orderFields['ORDER_PROP'][34]) {
		$valText = $orderFields['ORDER_PROP'][34];
	}
...

Как видно из примера, мы ищем заполненность свойств заказа, и только в случае если они есть – записываем значение в переменную. С первой частью думаю вы разобрались, ключевой момент, это именно создать обработчик событий и убедится что он корректно работает.

Как перезаписать поля у пользователя при сохранении заказа в Битриксе

Сначала рассмотрим уже готовый код, а потом дам комментарии о том что появилось:

// отлавливаем сохранение заказа
AddEventHandler("sale", "OnOrderSave", "OrderMySave");
function OrderMySave($orderID, $fields, $orderFields){
	$valText = false;
	if ($orderFields['ORDER_PROP'][32]) {
		$valText = $orderFields['ORDER_PROP'][32];
	}
	if ($orderFields['ORDER_PROP'][34]) {
		$valText = $orderFields['ORDER_PROP'][34];
	}

	$userID = $fields['USER_ID'];
	$user = new CUser;
	$fields = Array(
		"UF_VED" => $valText,
		"UF_ORDER_ID" => $orderID
	);
	$user->Update($userID, $fields);
}

Из нашего обработчика события мы можем получить 3 параметра: $orderID, $fields, $orderFields.
$orderFields – мы уже использовали, там хранятся передаваемые свойства заказа.
$fields[‘USER_ID’] – хранит в себе запись ID пользователя, на которого и был оформлен заказ. По этому ID, мы записываем два пользовательских свойства: UF_VED и UF_ORDER_ID.
$orderID – (первый параметр из обработчика) как раз и поможет нам с UF_ORDER_ID.

Для каких ситуация может пригодится такой код? Предположим, после обработки заказа менеджером, в нём будет изменено какое-то свойство. И, в данном конкретном случае, нам не нужно привязываться к статусу заказа (хотя могли и так). А смотрим именно на наличие одного из свойств, и если оно есть – сохраняем в профиль пользователя.

В дальнейшем, при помощи кода, это свойство можно проставлять в новых заказах. Это может помочь в случаях, когда свойство не входит в “профиль пользователя по заказу”, и оно несет в себе информационный характер для администрации интернет-магазина.

автор: Dmitriy

З 2011 року займаюся веб-розробкою. Зараз я – PHP Full Stack Developer.
Обговорити ваш проект, а також дізнатися більше про мене ви можете на цьому сайті:
dev.forwww.com

Email: dmitriyribka@gmail.com

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *