Телеграм: @camouf_ru Почта: mihail@bazarow.ru

Заполнить поля пользователя из свойства заказа, на примере ФИО

Просмотров: 1170

При создании заказа покупатель заполняет поле "ФИО". Необходимо скопировать эти данные в профиль пользователя (не путать с профилем покупателя) разбив на отдельные поля.

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

Для оформляющих заказ в первый раз наиболее актуально, если используете фоновую регистрацию пользователя при оформлении заказа. Так как, такие пользователи в принципе не заполняют свой профиль и кроме e-mail и телефона у них поля с именем пустые.

Пользователь битрикс

Получение данных о заказе и пользователе по API

Для реализации открываем файл confirm.php который находится в шаблоне оформления заказа (sale.order.ajax). Этот файл отвечает за последний шаг заказа, когда и заказ и пользователь уже созданы.

Здесь есть массив $arResult["ORDER"] в котором имеются ID пользователя в ключе $arResult['ORDER']['USER_ID'] и ID заказа в ключе $arResult["ORDER"]['ID']

Сначала получим информацию о пользователе методом CUser::GetByID и создадим условие, проверяющее не пустое ли у пользователя поле с именем (мне достаточно только этого, но можете проверить все три поля).


$user = CUser::GetByID($arResult['ORDER']['USER_ID']);
$arUser = $user->Fetch();
if (empty($arUser['NAME'])) { 
	// тут будет срабатывать наш скрипт, если поле ИМЯ пустое
}

Теперь получаем информацию о свойствах заказа, нам нужно только поле с ФИО, которое пользователь заполняет одной строкой, при оформлении

оформление заказа

Для этого пользуемся из API D7 \Bitrix\Sale\Order::load и $order->getPropertyCollection();


$order = \Bitrix\Sale\Order::load($arResult["ORDER"]['ID']);
$collection = $order->getPropertyCollection();
$dbRes = \Bitrix\Sale\PropertyValueCollection::getList([
	'select' => ['VALUE'], // Только значение
	'filter' => [
        '=ORDER_ID' => $arResult["ORDER"]['ID'], // ID этого заказа
        '=CODE' => 'FIO' // Код свойства с ФИО
    ]
]);
while ($item = $dbRes->fetch()) {
    $arUserOrderFio = explode(' ', $item['VALUE']); // Массив с ФИО
}

Теперь, у нас в массиве $arUserOrderFio ключи с фамилией именем и отчеством указанные пользователем. Массив создан с помощью explode с пробелом, в качестве разделителя, между значениями.

Обновление полей пользователя

Осталось, с помощью метода CUser::Update заполнить поля пользователя значениями ключей массива.

$user = CUser::GetByID($arResult['ORDER']['USER_ID']);
$arUser = $user->Fetch();
// Если имя пустое
if (empty($arUser['NAME'])) {

	// Данные о заказе с получением ФИО
	$order = \Bitrix\Sale\Order::load($arResult["ORDER"]['ID']);
	$collection = $order->getPropertyCollection();
	$dbRes = \Bitrix\Sale\PropertyValueCollection::getList([
		'select' => ['VALUE'], // Только значение
		'filter' => [
	        '=ORDER_ID' => $arResult["ORDER"]['ID'], // ID этого заказа
	        '=CODE' => 'FIO' // Код свойства с ФИО
	    ]
	]);
	while ($item = $dbRes->fetch()) {
	    $arUserOrderFio = explode(' ', $item['VALUE']); // Массив с ФИО
	}

	// Обновление полей пользователя
	user = new CUser;
        $fields = array(
           "LAST_NAME" => $arUserOrderFio['0'],
           "NAME" => $arUserOrderFio['1'],
           "SECOND_NAME" => $arUserOrderFio['2'],
        );
        $user->Update($arResult['ORDER']['USER_ID'], $fields);

}

На этом все. Да, по массиву $arUserOrderFio можно было пробежаться foreach-ом но это излишне.

Само собой, пользователь может не правильно вбить свое ФИО- не в том порядке который нам нужен (например ИФО), но тут остается только поделить ФИО на три отдельных поля в самом заказе и получать ровно таким же способом, но без создания массива.

Написать первый комментарий:

Перетащите файлы
Ничего не найдено
Защита от автоматических сообщений
Нажимая кнопку "Отправить" вы соглашаетесь
с политикой конфиденциальности и обработки персональных данных.

Записная книжка разработчика

Примерно с 2013-го года пишу заметки по разработке сайтов на Битрикс.
Вы можете задавать уточняющие вопросы в комментариях- отвечаю или дополняю заметки по возможности.

Многосайтовость битрикс на разных доменах и поддоменах Просмотров: 61197 Часто спрашивают "как настроить многосайтовость Битрикс на разных доменах", решил записать... Информация о заказах и содержимое корзины текущего пользователя. Просмотров: 11734 В процессе разработки сайта могут понадобиться рецепты приведенные ниже. Использовать можн... Создание блога с комментариями, оценками и просмотрами на сайте с 1С-... Просмотров: 22989 Если на вашем сайте требуется создание раздела с блогом или новостями, статьями. Записям в... Вывести свойство привязка к Яндекс Картам в Битрикс Просмотров: 18143 Часто бывает нужно вывести свойство привязка к Яндекс карте в детальном описании элемента... Заполнение габаритов товара, после обмена с 1С, из свойств элемента и... Просмотров: 10383 Если Ваш интернет-магазин интегрирован с 1С, скорее всего столкнулись с такой проблемой: 1... Как работает система сертификации партнеров 1С-Битрикс, уровни партне... Просмотров: 3456 Сертификация от «1С-Битрикс» – это объективная оценка знаний и практических навыков разраб... Вывести информацию, только на первом уровне раздела каталога, в 1С-Би... Просмотров: 4216 Задача: на сайте, в каталоге, выводится два фильтра - боковой и верхний. Оба компонента по... Вывести список всех пользователей с необходимой информацией Просмотров: 24030 Если нужно, на какой-либо странице сайта, вывести всех пользователей из группы "Зарегистир... Создание раздела инфоблока при регистрации пользователя в Битрикс Просмотров: 7873 Например вам нужно выводить информацию исключительно для определенного пользователя. Само ... Следующая/предыдущая новость/статья при просмотре подробной в Битрикс Просмотров: 17521 Дизайн создается только для наглядного и удобного предоставления содержимого сайта, пользо... Смена вида карточек товаров в catalog.section с иммитацией AJAX Просмотров: 782 Смену вида карточек товаров, в разделе каталога, можно реализовать с помощью сессии, запис... Скопировать номер телефона из поля пользователя в телефон для регистр... Просмотров: 1593 Задача, на конкретном сайте: раньше все пользователи регистрировались по стандартному режи... Автоматически отгрузить заказ и сменить статус отгрузки, при выполнен... Просмотров: 321 Проблема: Заказы, на сайте, обрабатываются только в 1С. При этом 1С не работает с отгрузка... Создание скидки на общую сумму покупки в Битрикс корзине Просмотров: 26908 Функционал интернет-магазина, работающего под управлением 1С Битрикс, позволяет задавать м... Ленивая подгрузка картинок в компоненте, на vue js Битрикс Просмотров: 9424 Если на одну страницу сайта выводится большое количество картинок, которые могут долго под... Подключение SSL на Битрикс виртуальная машина Просмотров: 11893 С первого января 2017 года, наличие безопасного соединения HTTPS становится практически об... Добавление и удаление из сравнения на AJAX: Битрикс Просмотров: 17648 Рецепт лежал у меня в закромах, почти о нем и забыл, но тут подвернулся под руку- решил оп... Определить местоположение пользователя и показать на карте Просмотров: 3254 Задача определить местоположение текущего пользователя и показать его на карте, с меткой. ... Вывод даты создания элемента в правильном формате в Битрикс Просмотров: 21619 Если нужно вывести дату создания новости, статьи или товара в каталоге, в принципе любого ... Автоматически помечаем новинки лейблом в каталоге битрикс Просмотров: 5357 Если вы хотите помечать новинки каталога, вашего магазина на Битрикс, лейблом "Новинка". И...