Для таких как я, для которых с первого взгляда не очевидно, как реализована связка элементов хайлоад-инфоблока и свойства инфоблока типа "Справочник".
Для таких как я, для которых с первого взгляда не очевидно, как реализована связка элементов хайлоад-инфоблока и свойства инфоблока типа "Справочник". Сразу уточню, что данный пост предназначен для тех, кто пишет свой механизм для заполнения справочников, а не пользуется штатными средствами
Связка осуществляется не по 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. Данный код написан "на коленке" и пока не оттестирован. В случае, если вы обнаружили ошибку - напишите мне в обратной связи. Чуть позже выделю время - оттестирую
Разработка сайта
Подайте заявку на разработку сайта на базе готового решения от компании 1С-Битрикс или одного из партнеров компании. Максимально подробно опишите, чему будет посвящен сайт, если это интернет-магазин - что он будет продавать, нужна ли мультиязычность, будут ли разные типы цен (розница, опт, крупный опт), будет ли интеграция с 1С, будет ли выгрузка товаров на различные торговые площадки...
Сопровождение сайта
Вы можете подать заявку на сопровождение вашего сайта на базе 1С-Битрикс. Сопровождение включает в себя: проверка актуальности обновлений сайта, проверка актуальности резервной копии, консультации по сайту. Опишите в заявке, какие еще объемы планируются на сопровождении и на какой срок вы планируете заключить договор на сопровождение - мы подберем подходящий вам бюджет на сопровождение
Работы по сайту
Вы можете подать заявку на выполнение определенного объема работ по сайту. Опишите в заявке объем работ. Это может быть разработка какого-то нового функционала, доработки по имеющемуся функционалу, доработки под требования сео-специалистов. На основании заявки вам будет сформирован бюджет работ, а также названы сроки на выполнение тех или иных работ.