Новый шаблон sale.order.ajax: кастомизация

Изображение
На реализацию этого функционала ушло порядка 30 часов рабочего времени (плюс время на самообразование). За это время было отправлено 18 коммитов, написано 371 строк кода и осуществлено несколько попыток виртуального суицида :) Основная задача Создать группу свойств "Параметры доставки", которая будет зависеть от выбора типа доставки. Для курьера это "Адрес доставки", для "Транспортной компании" это выбор ТК из выпадающего списка, для доставки "Другая транспортная компания" - тоже текстовое поле (как и адрес доставки). Все эти поля являются обязательными, и отображаться должны не в блоке "Пользователь", а в блоке с доставками. В новом шаблоне sale.order.ajax перенести поля в другой блок не так просто, как кажется на первый взгляд, а информации на эту тему буквально крупицы.

Записываем значение источника трафика из Cookies в поле заказа Битрикс

Это продолжение поста про Подключение механизма определения источника трафика к интернет-магазину на Битрикс

Теперь нам нужно при создании заказа "внедриться" в событие и дописать в поле "Источник" [ISTOCHNIK] значение из Cookies.

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

Но нет, после дополнительного изучения вопроса оказалось, что с помощью этого события можно записать только штатные свойства заказа (например, "Комментарий менеджера" с ключом массива COMMENTS), а пользовательские свойства заказа записываются через класс CSaleOrderPropsValue и его метод Add. А чтобы воспользоваться этим методом, нам нужно знать ID заказа, к которому мы добавляем значение свойства.
В OnBeforeOrderAdd этот ID нам еще неизвестен. Зато он уже появляется в событии OnOrderAdd, которое происходит уже после добавления заказа.

Полезная ссылка на документацию: Как написать обработчик события

Но нет, все оказалось не так просто. В процессе добавления заказа назначение свойств заказов происходит после выполнения обработчиков, поэтому назначенное нами свойство затирается.
Попробуем использовать другое событие:
OnSaleCalculateOrderPropsВызывается после формирования свойств плательщика.
Параметры
arOrderМассив параметров заказа
Здесь нам даже не понадобится работа с классом CSaleOrderPropsValue. Ведь это событие предполагает задание нужных значений свойств прямо в нем.
Нам нужна всего одна строка:
$arOrder['ORDER_PROP'][9]=$_COOKIE["reference"];
в которой 9 - это ID свойства "Источник".

Комментарии

Популярные сообщения из этого блога

Новый шаблон sale.order.ajax: кастомизация

Вывод пользовательского свойства раздела в компонентах catalog.section и news.list

Если при полной выгрузке из 1С в битрикс товары и разделы приходят неактивными