В 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 инфоблоками.