В 14й версии вышли highload инфоблоки, в интернете уже есть статья, также добавлю информации, может кому-то пригодится.
Стояла задача при успешной оплате заказа проверять является ли товар номером, если да добавляем информацию в хайлоад инфоблок. Используем обработчик OnSalePayOrder (use которым подключаем классы, должен быть вне функции), выглядеть такой код в init.php будет так:
Если нужно вывести список элементов higload инфоблока пользователя (свойство UF_USER_ID необходимо добавить в хайлоад инфоблок, выше можно посмотреть как туда добавить айди пользователя для оплаченного заказа), то делается это так:
До удаления элемента руки еще не дошли, но выборку и добавление можно посмотреть. В принципе ничего сложного и самое приятное, что можно не создавать свои таблицы, а работать с HL инфоблоками.
Стояла задача при успешной оплате заказа проверять является ли товар номером, если да добавляем информацию в хайлоад инфоблок. Используем обработчик OnSalePayOrder (use которым подключаем классы, должен быть вне функции), выглядеть такой код в init.php будет так:
// Подключаем классы для работы с higloadblockами use Bitrix\Highloadblock as HL; use Bitrix\Main\Entity; use Bitrix\Main\Type\DateTime; // Можете не подключать, если не планируете работать с типом дата/время AddEventHandler("sale", "OnSalePayOrder", array("MyClass", "OnSalePayOrderHandler")); class MyClass { function OnSalePayOrderHandler($orderID, $val) { // Если оплата Y if($val === 'Y') { $dbBasketItems = CSaleBasket::GetList( array("PRICE" => "DESC"), array( // В фильтре следует оставить только ORDER_ID! // "FUSER_ID" => CSaleBasket::GetBasketUserID(), // "LID" => SITE_ID, "ORDER_ID" => $orderID ), false, false, array("ID", "NAME") ); $arItems = array(); while ($arBasketItems = $dbBasketItems->Fetch()) { // Проверяем является ли товара номером, если да то добавляем номер в хайлоад инфоблок $dbProp = CSaleBasket::GetPropsList(array("SORT" => "ASC", "ID" => "ASC"), array("BASKET_ID" => $arBasketItems["ID"], "CODE" => "NUMBER")); if($arProp = $dbProp -> GetNext()) { $arBasketItems['PROPS'][$arProp['CODE']] = $arProp; $arItems[] = $arBasketItems; } } if(!empty($arItems)) { // Подключаем хайлоад инфоблоки if (!CModule::IncludeModule("highloadblock")) { ShowError(GetMessage("Модуль highloadblock не установлен.")); return; } // Получаем айди пользователя $rsOrder = CSaleOrder::GetList(array('ID' => 'DESC'), array('ID' => $orderID), false, false, array('ID', 'USER_ID')); if($arOrder = $rsOrder->Fetch()) { $userID = $arOrder['USER_ID']; } // Айди нашего хайлоад блока $hlblock_id = 1; $hlblock = HL\HighloadBlockTable::getById($hlblock_id)->fetch(); if (empty($hlblock)) { ShowError('404'); return; } $entity = HL\HighloadBlockTable::compileEntity($hlblock); $entity_data_class = $entity->getDataClass(); $f = fopen ($_SERVER['DOCUMENT_ROOT']."/bitrix/numbers_log.txt", "a+"); foreach ($arItems as $arItem) { $dt = new DateTime(); $dt90 = new DateTime(); $dt90->add('+90 days'); $result = $entity_data_class::add( array( 'UF_NUMBER' => $arItem['PROPS']['NUMBER']['VALUE'], 'UF_USER_ID' => $userID, 'UF_DATETIME_PAYED' => $dt, 'UF_DATETIME_FINISH' => $dt90, ) ); if ($result->isSuccess()) { fwrite ($f, 'ДОБАВЛЕН ' . $result->getId() . "\n"); } else { fwrite ($f, 'ОШИБКА ' . implode(', ', $result->getErrors()) . "\n"); } } fclose($f); } } } } |
Если нужно вывести список элементов higload инфоблока пользователя (свойство UF_USER_ID необходимо добавить в хайлоад инфоблок, выше можно посмотреть как туда добавить айди пользователя для оплаченного заказа), то делается это так:
global $USER; if (!CModule::IncludeModule("highloadblock")) { ShowError(GetMessage("Модуль highloadblock не установлен.")); return; } use Bitrix\Highloadblock as HL; use Bitrix\Main\Entity; // Айди нашего хайлоад блока $hlblock_id = 1; $hlblock = HL\HighloadBlockTable::getById($hlblock_id)->fetch(); if (empty($hlblock)) { ShowError('404'); return; } $entity = HL\HighloadBlockTable::compileEntity($hlblock); $entity_data_class = $entity->getDataClass(); $rsData = $entity_data_class::getList(array( "select" => array("*"), "order" => array("ID" => "ASC"), "filter" => array('UF_USER_ID' => $USER->GetID()) )); while($arData = $rsData->Fetch()) { $arResult[] = $arData; } |
До удаления элемента руки еще не дошли, но выборку и добавление можно посмотреть. В принципе ничего сложного и самое приятное, что можно не создавать свои таблицы, а работать с HL инфоблоками.