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

Для решения данной задачи будем использовать обработчик события и метод из 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 года. Посмотреть некоторые из моих работ, а также узнать чуть больше обо мне, вы можете на forwww.ru

Какие услуги предоставляю:
- Создание сайтов, шаблонов и компонентов на 1С-Битрикс;
- Разработка функционала с нуля и доработка кода на уже созданных проектах;
- Поддержка рабочего сайта, доработки по ТЗ;
- Адаптивная вёрстка макетов и натяжка на Битрикс;
- Парсинг сайтов;
- Выгрузка и Загрузка на сайт (форматы - CSV, XML, XLS, XLSX, JSON)
- Интеграции со сторонними сервисами по API;
- Многоязычные версии сайтов и многое другое.

Если у вас остались вопросы, свяжитесь со мной любым удобным для вас способом или оставьте комментарий внизу.
E-mail: dmitriyribka@gmail.com
Skype: cinemacreaterus

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *