Сообщения

Сообщения за 2014

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

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

Оформление заказа без использования функционала интернет-магазина

Итак, сегодня задача была несколько странновата. Заказчик, имея полноценную версию интернет-магазина, желает получать заказы через подобие "формы обратной связи". Для удобства я сразу решила определять все заказы в инфоблок "Заказы", чтобы они хранились еще хоть где-то, кроме почты. Поэтому использую компонент iblock.element.add.form. Заказы успешно добавляются, но теперь нужно, чтобы еще и почта приходила. Штатного события "Добавлен элемент в инфоблок" в системе нет. Поэтому пишем свой обработчик в init.php. Если используется событие OnAfterIBlockElementAdd, то ID инфоблока в который добавлен элемент - это $arFields["IBLOCK_ID"]. Достаточно понятно этот механизм описан у Дениса Шаромова в статье о создании своего почтового события и шаблона . Кроме прочих данных, нам в письме понадобится ID товара, на котором нажали кнопку "Купить". Для этого кнопка "Купить" имеет идентификатор, например, id=171, который совпадае

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

Это продолжение поста про Подключение механизма определения источника трафика к интернет-магазину на Битрикс Теперь нам нужно при создании заказа "внедриться" в событие и дописать в поле "Источник" [ISTOCHNIK] значение из Cookies. Согласно списку событий интернет-магазина, связанных с изменением заказа , выбираем наиболее подходящее, скорее всего, это будет OnBeforeOrderAdd, так как оно может быть использовано для модификации данных. Но нет, после дополнительного изучения вопроса оказалось, что с помощью этого события можно записать только штатные свойства заказа (например, "Комментарий менеджера" с ключом массива COMMENTS), а пользовательские свойства заказа записываются через класс CSaleOrderPropsValue и его метод Add . А чтобы воспользоваться этим методом, нам нужно знать ID заказа, к которому мы добавляем значение свойства. В OnBeforeOrderAdd этот ID нам еще неизвестен. Зато он уже появляется в событии OnOrderAdd, которое происходит уже после д

Запуск экспорта в Яндекс.Маркет после каждого обмена с 1С

Итак, функция CCatalogExport::PreGenerateExport(3); позволяет запустить профиль экспорта в Маркет с ID=3. Будем вешать его на событие успешного обмена с 1С. Скорее всего, это будет OnSuccessCatalogImport1C. Поместим обработчик в файл init.php: AddEventHandler("catalog", "OnSuccessCatalogImport1C", "OnSuccessCatalogImport1CHandler"); function OnSuccessCatalogImport1CHandler() { //функция должна выполнять экспорт в Яндекс.Маркет сразу после обмена с 1С CModule::IncludeModule("catalog"); CCatalogExport::PreGenerateExport(3); } После успешного импорта запускается функция. Подключается модуль Каталог, и для него выполняется функция экспорта. 

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

Основная обработка заказов из интернет-магазина в офисе у клиента ведется через интернет. Именно поэтому удобно было, чтобы информация об источнике трафика по заказу выгружалась в одно из свойств заказа, чтобы по ним потом можно было сделать развернутый отчет в 1С. Да и менеджер сразу увидит, откуда пришел клиент.

Кастомизация импорта из 1С средствами обработчиков событий Битрикс: часть третья, заключительная. Работа агента

Итак, вот что получилось в итоге: function NewToOld($ELEMENT_ID) { CModule::IncludeModule('iblock'); //убирать флаг новинки $PROPERTY_CODE = "NEWPRODUCT"; // код свойства $PROPERTY_VALUE = ""; // значение свойства // Сбросим свойство новинка для данного элемента $dbr = CIBlockElement::GetList(array(), array("=ID"=>$ELEMENT_ID), false, false, array("ID", "IBLOCK_ID")); if ($dbr_arr = $dbr->Fetch()) //устанавливаем свойства так, чтобы остальные не затерлись { $IBLOCK_ID = $dbr_arr["IBLOCK_ID"]; CIBlockElement::SetPropertyValues($ELEMENT_ID, $IBLOCK_ID, $PROPERTY_VALUE, $PROPERTY_CODE); } } function CheckNews() { //в этой функции должна проверяться дата установки флага "Новинка" (107) у товара, и, если она уже старая, то вызываться для этого элемента функция NewToOld(id) CModule::IncludeModule('iblock'); //подключаем модуль с пользовательск

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

Итак, после прошлого моего поста остались "незаконченные дела": это выставление флага "Новинка" для совсем новых товаров, которых еще не было в каталоге, и учет даты последнего поступления. 1. Добавляем обработчик события OnBeforeIBlockElementAdd, который относится, в отличие от предыдущего, уже к модулю iblock, а не к catalog.  Сначала я скопировала предыдущий код, но, как оказалось, ни одной строчки в нем мне не пригодилось. Ведь в событии Add нам еще неизвестен id добавляемого элемента, а свойства еще не заданы (так что переопределять в цикле их не потребуется). 2. Теперь разберемся с форматом входных данных. Сразу проверяем, чтобы iblock_id был равен 12 (у меня это id каталога) - а то вдруг клиент решил добавить новость.  Формат массива arResult тут несколько другой. Впрочем, доступные нам поля можно посмотреть в документации Битрикса. ССЫЛКА  3. Задаем массив с определением значения свойства. В массиве нужно будет обратиться к свойству по id,

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

У клиента появилась интересная задача: после обмена данных с 1С автоматически выставлять флаг "Новинка" для тех товаров, количество которых изменилось в большую сторону. Было несколько вариантов реализации. Первый, что пришел в голову - использовать событие OnBeforeIblockUpdate, сравнивать сколько было- сколько стало, и выставлять флаг "Новинка". При реализации любой задачи, связанной с событиями, полезно будет воспользоваться описанием событий Битрикса в документации . Коллега с форума Битрикса посоветовала наследовать класс импорта и переопределить в нем функцию ImportElement. Также был вариант кастомизировать компонент импорта каталога. Делать это не хотелось, чтобы не потерять возможность обновления. С наследованием класса тоже напряг, для меня это сложный путь. Самым разумным решением показалось всё же использовать события. Правда, это было все же не OnBeforeIblockUpdate, а OnBeforeProductUpdate, так как поле "Доступное количество" относит
Привет. В последнее время стала больше работать на фрилансе - причем специализируюсь именно на решении локальных задач клиента. Часто это доработки, допиливания, исправление чужих косяков и пр. для уже работающих или готовящихся к запуску интернет-магазинов. В связи с этим довольно сложной задачей оказалось заполнить портфолио. Описывать там каждую задачу текстом? Как-то мелко. В этом блоге буду описывать свой опыт взаимодействий с битриксом. Что-то получается быстро, а для чего-нибудь нужно еще поизучать продукт и его тонкости. Я работаю с битриксом с 2008 года и в принципе хорошо знаю архитектуру продукта. Но, разумеется, с каждой выполненной задачей опыт растет - и чтобы этот опыт не растерять, буду записывать его. Для себя. А может и кому-то еще пригодится :)