Небольшой нюанс использования свойства инфоблока типа "Справочник"

Для таких как я, для которых с первого взгляда не очевидно, как реализована связка элементов хайлоад-инфоблока и свойства инфоблока типа "Справочник".

Для таких как я, для которых с первого взгляда не очевидно, как реализована связка элементов хайлоад-инфоблока и свойства инфоблока типа "Справочник". Сразу уточню, что данный пост предназначен для тех, кто пишет свой механизм для заполнения справочников, а не пользуется штатными средствами

Связка осуществляется не по ID элемента хайлоад-инфоблока, а по значению поля UF_XML_ID. Ну а сюда можно вписать что угодно:). Например, для того, чтобы сюда вписать ID текущего элемента справочника, можно прописать такой обработчик в init.php

<? $eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandler("", "SegmentsOnAfterUpdate", "OnAfterSegmentAddUpdateHandler");
$eventManager->addEventHandler("", "SegmentsOnAfterAdd", "OnAfterSegmentAddUpdateHandler");
function OnAfterSegmentAddUpdateHandler(\Bitrix\Main\Entity\Event $event)
{
    static $bHandlerStop;
    if($bHandlerStop===true)
        return;

    $ID = $event->getParameter("id");
    if(is_array($ID))
        $ID = $ID["ID"];
    if(!$ID)
        return;

    $arParameters = $event->getParameters();
    $bHandlerStop = true;
    $event->setParameters($arParameters);

    $arFields = $event->getParameter("fields");

    if(strlen($arFields['UF_XML_ID'])>0){
       return;
    } else {
        $rsData = \Bitrix\Highloadblock\HighloadBlockTable::getList(array('filter'=>array('NAME'=>'LANG')));
        if ( !($arData = $rsData->fetch()) ){
            echo 'Инфоблок не найден';
        }
        $Entity = \Bitrix\Highloadblock\HighloadBlockTable::compileEntity($arData);
        $DataClass = $Entity->getDataClass();
        $result = $DataClass::update($ID, Array("UF_XML_ID"=>$ID));
        if(!$result->isSuccess()){ //произошла ошибка
            return $result->getErrorMessages(); //выведем ошибку
        }
    }


    $bHandlerStop = false;

}

В коде присутсвует:

Segments

Это - название сущности

P.S. Данный код написан "на коленке" и пока не оттестирован. В случае, если вы обнаружили ошибку - напишите мне в обратной связи. Чуть позже выделю время - оттестирую

Количество показов: 5964
25.02.2015

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

Если вам была полезна статья можете отблагодарить автора:
Ethereum:

0x16Df809287333C49D3A237296C6248A6c08702Bc

Разработка сайта

Подайте заявку на разработку сайта на базе готового решения от компании 1С-Битрикс или одного из партнеров компании. Максимально подробно опишите, чему будет посвящен сайт, если это интернет-магазин - что он будет продавать, нужна ли мультиязычность, будут ли разные типы цен (розница, опт, крупный опт), будет ли интеграция с 1С, будет ли выгрузка товаров на различные торговые площадки...

Сопровождение сайта

Вы можете подать заявку на сопровождение вашего сайта на базе 1С-Битрикс. Сопровождение включает в себя: проверка актуальности обновлений сайта, проверка актуальности резервной копии, консультации по сайту. Опишите в заявке, какие еще объемы планируются на сопровождении и на какой срок вы планируете заключить договор на сопровождение - мы подберем подходящий вам бюджет на сопровождение

Работы по сайту

Вы можете подать заявку на выполнение определенного объема работ по сайту. Опишите в заявке объем работ. Это может быть разработка какого-то нового функционала, доработки по имеющемуся функционалу, доработки под требования сео-специалистов. На основании заявки вам будет сформирован бюджет работ, а также названы сроки на выполнение тех или иных работ.