Сайт в кодировке UTF-8, тело письма отображается нормально, а тема в таком формате:
=?UTF-8?B?VXBha292YW5vLlJ1Oi==?=
Отключение обработчиков событий [1С-Битрикс]
class HandlerTest { static $b_HandlerRun = true; function OnAfterIBlockElementAddHandler(&$arFields) { AddMessage2Log(var_export( self::$b_HandlerRun , true), "my_module_id"); } } /****** В init.php *****/ AddEventHandler("iblock", "OnAfterIBlockElementAdd", Array("HandlerTest", "OnAfterIBlockElementAddHandler")); /************************************/ HandlerTest::$b_HandlerRun = false; $oElement = new CIBlockElement(); $oElement->Add(array("IBLOCK_ID" => 43, "NAME" => "Название элемента"));
В логе получим false, тем самым мы можем отключать или включать там где нужно события.
Отработка событий *::Add, *::Update, *::Delete
Иногда нужно чтобы события не срабатывали у разных методов системы. Пока этого нет, то пишем свои методы в обход. Редактирование полей пользователя прямым запросом.
function updateUserField($i_UserID, $ar_Fields) { $ID = intval($i_UserID); if(intval($ID) <= 0 || count($ar_Fields) == 0) return false; global $DB; $res = $DB->Query("UPDATE b_user SET ".$DB->PrepareUpdate("b_user", $ar_Fields)." WHERE ID=".$ID, true); return (!$res) ? false : true; }
OnAfterUserUpdate не все данные
На заметку, OnAfterUserUpdate в массиве $arFields вы будите долго искать XML_ID, ну а зачем он, и без него можно… :(
function OnAfterUserUpdateHandler(&$arFields) { # Зато б..дь есть все UF_* $_ar = CUser::GetByID($arFields['ID'])->Fetch(); $arFields['XML_ID'] = $_ar['XML_ID']; self::_handler($arFields, 'update'); }
XML to Array and Array to XML
Сейчас много приходится работать с XML (интеграция 1C-Битрикс и 1С), сложная логика проекта не позволяет использовать типового импорта, и задача стоит как можно больше перенести на сторону 1с, ну суть не в этом, задача постоянно парсить XML или собирать и отдавать в 1с, хочу сохранить пару очень удобных классов которые как раз подходят для этих задач. Array2XML и XML2Array
Разделы инфоблока в виде массива 1С-Битрикс
Что такое список разделов в информационном блоке, это данные структурированные в виде дерева.
Замена CUser::GetParam()
/** * Возвращает все данные текущего пользователя, можно выбрать 1 параметр по ключу, можно указать ID другого пользователя * @param string $s_ParamKey - Ключ поля CUser * @param intval $i_UserID - ID пользователя данные которогонужно выбрать * @return mixed */ public static function getUserParams($s_ParamKey = false, $i_UserID = false) { global $USER; if( ! $i_UserID && ! $USER->IsAuthorized() ) return; $ar_User = CUser::GetByID( ( intval($i_UserID) > 0 ) ? intval($i_UserID) : $USER->GetID() )->Fetch(); return (!$s_ParamKey) ? $ar_User : $ar_User[$s_ParamKey]; }
Вместо ущербного CUser::GetParam()
Правильный site_closed.php 1С-Битрикс
/bitrix/php_interface/include/site_closed.php require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); CHTTP::SetStatus("503 Service Unavailable"); echo 'Проводятся технические работы на сайте ;)';
1С-Битрикс, добавить логотип к службе доставки CSaleDelivery::Add()
Чтобы добавить логотип при добавлении настраиваемой службы доставки, нужно добавить ключ: LOGOTIP
$ar_Fields = array( 'NAME' => 'New drlivery', ... 'LOGOTIP' => CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"].$s_ImagesPatch) ); if($i_NewID = CSaleDelivery::Add($ar_Fields)) { }