Обновление 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 обновляемой записи
/**/
}
}
}
Ещё статьи:
18.01.2023
Нюансы перехода битрикс на РНР 8.0
С февраля битрикс прекращает поддерживать РНР 7.4 и в битрикс сегменте сайтов начался переход на РНР 8 для получения обновлений.
Но без нюансов и ошибок...
ID: 431
10.01.2023
БУС окончательно всё?
Появилась информация от битрикс, что грубо говоря поддержка по отраслевому медицинскому решению от битрикс будет до 1 февраля 2024 года, а что потом б...
ID: 426
30.08.2022
Типовые претензии к подрядчику и к битрикс
По свежим следам я собрал типовые претензии к подрядчику и к битрикс. Мной был проведён аудит и я увидел, что техническое состояние сайта хорошее, нареканий...
ID: 338
Новые статьи в блоге:
25.01.2023
Ошибка работы веб форм битрикс в аякс режиме
Возникла задача внедрить битрикс формы на сайт битрикс, но нюанс в том, что страница лендинг в HTML без подключения битрикс шаблона.
В целом я не предполагал,...
ID: 434
19.01.2023
Ник ру покупает отзывы, но выше дна не подняться
Самый убогий хостинг провайдер, который ворует домены у клиентов покупает отзывы.
ID: 433
19.01.2023
Ник ру жулики воруют домены
В очередной раз провайдер nic.ru, так зазываемый руцентр и его техподдержка пробили очередное дно, в моём рейтинге это худший провайдер в России. В от...
ID: 432