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

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

Кастомизация импорта из 1С с помощью событий Битрикс: часть вторая

Итак, после прошлого моего поста остались "незаконченные дела": это выставление флага "Новинка" для совсем новых товаров, которых еще не было в каталоге, и учет даты последнего поступления.

1. Добавляем обработчик события OnBeforeIBlockElementAdd, который относится, в отличие от предыдущего, уже к модулю iblock, а не к catalog. 
Сначала я скопировала предыдущий код, но, как оказалось, ни одной строчки в нем мне не пригодилось. Ведь в событии Add нам еще неизвестен id добавляемого элемента, а свойства еще не заданы (так что переопределять в цикле их не потребуется).

2. Теперь разберемся с форматом входных данных. Сразу проверяем, чтобы iblock_id был равен 12 (у меня это id каталога) - а то вдруг клиент решил добавить новость. 
Формат массива arResult тут несколько другой. Впрочем, доступные нам поля можно посмотреть в документации Битрикса.
ССЫЛКА 

3. Задаем массив с определением значения свойства. В массиве нужно будет обратиться к свойству по id, который посмотрим в админке "магазин - свойства товаров".
То есть в нашем массиве мы пропишем id=75 и value=211 (это id значения свойства). 

Первая сегодняшняя задача готова! 

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

Комментарии

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

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

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

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