Обновление HL записи инфоблока
При создании языковых версий битрикс сайта возникла необходимость часть общего контента, который не переводится, но от него зависит функционал, вынести как-то хранение отдельно чтобы изменения в основной версии сайта автоматически менялись у других. В результате было принято решение хранить такие данные в 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 обновляемой записи
/**/
}
}
}
Ещё статьи:
01.12.2020
Свершилось, битрикс перестал поддерживать mbstring.func_overload
Теперь для обновления на версию v20.100.0 требуется удаление опции mbstring.func_overload. Эта опция более не требуется и не поддерживается платформой...
ID: 313
13.08.2020
Получить id элемента привязки к пользователю битрикс
Получить id элемента, который добавлен в свойство привязки к пользователю битрикс
ID: 250
22.06.2020
Дубли внешнего кода не грузятся при импорте Битрикс
При копировании штатными средствами элементов (кнопка копировать) обнаружил такой момент, что при XML экспорте и последующим XML импорте не вс...
ID: 243
Новые статьи в блоге:
07.01.2021
Почему в битрикс автоматически отключаются пользователи
На сайте с определённой периодичностью происходила деактивация аккаунтов пользователей. Логин становился неактивным и зайти на сайт не получалось.
ID: 314
07.01.2021
Ошибка сокетов
Бывает выскакивает такая ошибка в битрикс "Работа с сокетами Ошибка! Не работает", "Замечание. Не удалось провер...
ID: 315
26.11.2020
Вывод свойств фильтра картинками
Кастомный вид свойства в умном фильтре. Стандартных видов в виде списка, радиокнопок и выпадающих списков обычно недостаточно
ID: 312