use \Bitrix\Recyclebin\Internals\Models\RecyclebinTable; use \Bitrix\Recyclebin\Recyclebin; use \Bitrix\Main\Loader; Loader::includeModule('recyclebin'); $list = RecyclebinTable::getList([ 'limit' => 5000, 'filter' => ['MODULE_ID' => 'CRM'], 'select' => ['ID'] ] )->fetchAll(); foreach ($list as $item) { Recyclebin::remove(intval($item['ID'])); }
1c-bitrix
Если нужно сделать User Update и сразу Authorize(id)
Задача:
Если обновлять пользователя (в моем случае ajax) и пытаться сразу авторизовать по ID, это не получится сделать или будет выкидывать после 1 хита.
Решение:
$user = new \CUser();
$resultUpdate = $user->Update($userId, $filedsUpdate);
if ($resultUpdate) {
$user->Authorize($userId);
$user->CheckAuthActions(); // вся соль тут
}
Bitrix, MAMP, restore.php -> MySQL query error! Invalid default value for ‘DATE_STAT’
Битрикс ЧПУ, правила urlrewrite.php
Самые часто используемые правила ЧПУ в битриксе это страницы детального описания элемента, например /section/125/ 125 это ID элемента, в основном это дополнительные разделы сайта, для магазинов используется комплексный компонент каталога и там 1 правило для всего компонента, но речь не о ней.
Виртуальная машина Bitrix, CURL
#yum install php-curl #cp /etc/php.d/20-curl.ini.disabled /etc/php.d/20-curl.ini #/etc/init.d/httpd restart
Кодировка в теме письма [bitrix]
Отключение обработчиков событий [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