Обновление HL записи инфоблока

Обновление HL записи инфоблока

12.06.2018

При создании языковых версий битрикс сайта возникла необходимость часть общего контента, который не переводится, но от него зависит функционал, вынести как-то хранение отдельно чтобы изменения в основной версии сайта автоматически менялись у других. В результате было принято решение хранить такие данные в Highload-справочнике.
Привязку к элементам инфоблоков делал на базе символьного кода элемента, так как на разных языковых версиях сайта это уникальное значение. В XML_ID Highload-справочника храним значение символьного кода, по которому будем искать обновляемый элемент.
Далее возникает задача обновления таких данных при внесении изменений. Решаем такую задачу с помощью обработчика в файле init.php скачать рабочий пример

Код обработчика обновления HL записи инфоблока

// регистрируем обработчик обновления записей кода камеры на иностранных версиях сайтов
AddEventHandler(«iblock», «OnAfterIBlockElementUpdate», Array(«upHighload», «OnAfterIBlockElementUpdateHandler»));

class upHighload
{
// создаем обработчик события «OnAfterIBlockElementUpdate»
function OnAfterIBlockElementUpdateHandler(&$arFields)
{
if(!$arFields[«RESULT»]) return false;
If($arFields[‘IBLOCK_ID’] == 17) { //инфоблок камер русской версии
$hl_code =$arFields[‘CODE’]; //Символьный код элемента
//Подготовка: по символьному коду получаем ID записи справочника
CModule::IncludeModule(‘highloadblock’);

$hlblock = HL\HighloadBlockTable::getById(1)->fetch(); // Вместо 2 подставьте id highload блока
$entity = HL\HighloadBlockTable::compileEntity($hlblock);
$entityClass = $entity->getDataClass();

$res = $entityClass::getList(array(
‘select’ => array(‘*’),
‘filter’ => array(‘UF_XML_ID’ =>$hl_code) //внешний код значения справочника
));

$row = $res->fetch();
//получаем ID записи справочника
$hl_id=$row[‘ID’];
//Обновление:
$hl_name =$arFields[‘NAME’];
$hl_code =$arFields[‘CODE’];
CModule::IncludeModule(‘iblock’);
//Получаем код камеры
$res_code = CIBlockElement::GetProperty(17, $arFields[«ID»], array(«sort» => «asc»), Array(«CODE»=>»code»));
while ($ob_code = $res_code->GetNext()) {
$one_code = $ob_code[‘~VALUE’];
}
//Получаем да/нет о работе камеры
$res_work = CIBlockElement::GetProperty(17, $arFields[«ID»], array(«sort» => «asc»), Array(«CODE»=>»works»));
while ($ob_work = $res_work->GetNext()) {
$one_work = $ob_work[‘VALUE_ENUM’];
// AddMessage2Log($ob_work);
}
Loader::includeModule(«highloadblock»);
$hlbl = 1; // Указываем ID нашего highloadblock блока к которому будет делать запросы.
$hlblock = HL\HighloadBlockTable::getById($hlbl)->fetch();

$entity = HL\HighloadBlockTable::compileEntity($hlblock);
$entity_data_class = $entity->getDataClass();
// Массив полей для обновления
$data = array(
‘UF_CODE’ => $one_code[‘TEXT’]
);
$result = $entity_data_class::update($hl_id, $data); // где $hl_id — id обновляемой записи
/**/
}
}
}


Ещё статьи:

13.08.2020 Получить id элемента привязки к пользователю битрикс
Получить id элемента, который добавлен в свойство привязки к пользователю битрикс ID: 250

22.06.2020 Дубли внешнего кода не грузятся при импорте Битрикс
При копировании штатными средствами элементов (кнопка копировать) обнаружил такой момент, что при XML экспорте и последующим XML импорте не вс... ID: 243

17.06.2020 Журнал отправки почты на сайте Битрикс
В Битриксе есть инструменты для получения данных отправки почты на сайте. Рассмотрим, что в итоге есть. ID: 242

Новые статьи в блоге:

20.08.2020 Недокументированная связка ElementTable и getEntity
С помощью ElementTable::getEntity создаем объект Query. В качестве параметра он принимает объект сущности, относительно которой мы строим запрос испол... ID: 254

19.08.2020 Миф о сложности поиска специалиста Битрикс
Существует миф о сложности поиска специалиста Битрикс. Но как выясняется проблема поиска специалиста касается любой системы, фреймворков. Цитата: В св... ID: 253

15.08.2020 Получить ID раздела по пользовательскому полю
Как получить ID раздела по пользовательскому полю другого раздела ID: 252

Возврат к списку

© 2015-2020 Web админ
Связаться по WhatsApp