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

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

1011
25.02.2015

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

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

Связка осуществляется не по 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. Данный код написан "на коленке" и пока не оттестирован. В случае, если вы обнаружили ошибку - напишите мне в обратной связи. Чуть позже выделю время - оттестирую


Источник: http://dev.1c-bitrix.ru/community/webdev/user/60622/blog/13038/


Благодарю за внимание! Делитесь вашими замечаниями в комментариях ниже.


P.S. Обращайтесь ко мне за приобретением лицензий и продлений на 1C-Битрикс "Управление сайтом", лицензий на облачную и коробочную версии Битрикс 24 а также за приобретением и внедрением готовых решений на базе 1С-Битрикс от партнеров. За более подробной информацией свяжитесь со мной любым удобным для вас способом


Комментарии

Еще никто не комментировал данную публикацию. Будьте первыми!

Добавить комментарий

captcha

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