Сообщения

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

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

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

У элементов инфоблоков легко можно добавлять дополнительные свойства и при необходимости выводить их. Иногда подобная задача возникает для разделов. Но там этот функционал несколько ограничен: во-первых, типы полей не так разнообразны, а во-вторых, подобраться к ним не так уж и легко (это уже не ограничится только включением доступности свойства в настройках компонента). Например, нам необходимо добавлять краткое описание для "Описания раздела" (которое будет выводиться отдельно, в сайдбаре). //задаем параметры фильтра - ID инфоблока, а также выбираем id выбранного раздела (без ID инфоблока работать не будет!) $arF=Array( "IBLOCK_ID"=>"8", "ID"=>$arResult["ID"] //примечание: в компоненте news.list это будет $arResult['SECTION']['PATH'][0]['ID'] ); $db_list = CIBlockSection::GetList(Array("SORT"=>"­­ASC"), $arF, false, array("UF_*")); //делаем выборку пользо...

Передача параметров цели Яндекс.метрике

Не совсем про битрикс, но пусть тоже будет здесь <?$uri=$_SERVER['REQUEST_URI'];?> <script> function goal_ym_call() {   var uri = '<?php echo $uri;?>';   var yaParams = {url: uri};   yaCounter38030175.reachGoal('call_me_target', yaParams);   return true; }; </script> onClick="goal_ym_call()"

Автоматическое создание галереи из медиабиблиотеки в инфоблоках

Бывает такое, что сайт у клиента организован насколько странно. Например, фотогалерея лежит в инфоблоках, и отображается компонентом bitrix:news.list, и поэтому каждую фоточку бедному клиенту приходится заливать по отдельности, да еще и присваивая ей значение обязательно поля "Имя". Так что клиент в 2 часа ночи сидит и материт битрикс, будучи уверенным, насколько это неудобная CMS. Но тут на помощь приходят они - грамотные сертифицированные специалисты))) В данном случае я. Чтоб не городить огород, не писать новых скриптов и не переделывать компонентов, и при этом загрузить за одну ночь 280 фоток в инфоблоки, было решено использовать медиабиблиотеку в качестве промежуточного буфера.  Клиент залил туда фотографии с помощью множественной загрузки, а я написала небольшой скрипт, который закинул все эти фоточки - каждую в свой элемент инфоблока. Строго говоря, скрипт не идеален и можно было его еще доработать, сделав так, чтобы он сам подключился к медиабибли...

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

Итак, сегодня задача была несколько странновата. Заказчик, имея полноценную версию интернет-магазина, желает получать заказы через подобие "формы обратной связи". Для удобства я сразу решила определять все заказы в инфоблок "Заказы", чтобы они хранились еще хоть где-то, кроме почты. Поэтому использую компонент 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С. Да и менеджер сразу увидит, откуда пришел клиент.