use Bitrix\Main\Localization\Loc, Bitrix\Iblock; Loc::loadMessages(__FILE__); class CIBlockPropertyXmlID { const USER_TYPE = 'ElementXmlID'; public static function GetUserTypeDescription() { return array( "PROPERTY_TYPE" => Iblock\PropertyTable::TYPE_STRING, "USER_TYPE" => self::USER_TYPE, "DESCRIPTION" => Loc::getMessage("IBLOCK_PROP_XMLID_DESC"), "GetPublicViewHTML" => array(__CLASS__, "GetPublicViewHTML"), "GetAdminListViewHTML" => array(__CLASS__, "GetAdminListViewHTML"), "GetPropertyFieldHtml" => array(__CLASS__, "GetPropertyFieldHtml"), "GetSettingsHTML" => array(__CLASS__, "GetSettingsHTML"), 'GetUIEntityEditorProperty' => array(__CLASS__, 'GetUIEntityEditorProperty'), 'GetUIEntityEditorPropertyEditHtml' => array(__CLASS__, 'GetUIEntityEditorPropertyEditHtml'), 'GetUIEntityEditorPropertyViewHtml' => array(__CLASS__, 'GetUIEntityEditorPropertyViewHtml'), ); } public static function GetPublicViewHTML($arProperty, $value, $strHTMLControlName) { static $cache = array(); if(isset($strHTMLControlName['MODE']) && $strHTMLControlName["MODE"] == "CSV_EXPORT") { return $value["VALUE"]; } elseif($value["VALUE"] <> '') { if(!isset($cache[$value["VALUE"]])) { $db_res = CIBlockElement::GetList( array(), array("=XML_ID"=>$value["VALUE"], "SHOW_HISTORY"=>"Y"), false, false, array("ID", "IBLOCK_TYPE_ID", "IBLOCK_ID", "NAME", "DETAIL_PAGE_URL") ); $ar_res = $db_res->GetNext(); if($ar_res) $cache[$value["VALUE"]] = $ar_res; else $cache[$value["VALUE"]] = $value["VALUE"]; } if (isset($strHTMLControlName['MODE']) && ($strHTMLControlName["MODE"] == "SIMPLE_TEXT" || $strHTMLControlName["MODE"] == 'ELEMENT_TEMPLATE')) { if (is_array($cache[$value["VALUE"]])) return $cache[$value["VALUE"]]["~NAME"]; else return $cache[$value["VALUE"]]; } else { if (is_array($cache[$value["VALUE"]])) return ''.$cache[$value["VALUE"]]["NAME"].''; else return htmlspecialcharsex($cache[$value["VALUE"]]); } } else { return ''; } } public static function GetAdminListViewHTML($arProperty, $value, $strHTMLControlName) { static $cache = array(); if($value["VALUE"] <> '') { if(!array_key_exists($value["VALUE"], $cache)) { $db_res = CIBlockElement::GetList( array(), array("=XML_ID"=>$value["VALUE"], "SHOW_HISTORY"=>"Y"), false, false, array("ID", "IBLOCK_TYPE_ID", "IBLOCK_ID", "NAME") ); $ar_res = $db_res->GetNext(); if($ar_res) $cache[$value["VALUE"]] = htmlspecialcharsbx($ar_res['NAME']). ' ['.$ar_res['ID'].']'; else $cache[$value["VALUE"]] = htmlspecialcharsbx($value["VALUE"]); } return $cache[$value["VALUE"]]; } else { return ' '; } } //PARAMETERS: //$arProperty - b_iblock_property.* //$value - array("VALUE","DESCRIPTION") -- here comes HTML form value //strHTMLControlName - array("VALUE","DESCRIPTION") //return: //safe html public static function GetPropertyFieldHtml($arProperty, $value, $strHTMLControlName) { $ar_res = false; if($value["VALUE"] <> '') { $db_res = CIBlockElement::GetList( array(), array("=XML_ID" => $value["VALUE"], "SHOW_HISTORY" => "Y"), false, false, array("ID", "IBLOCK_ID", "NAME") ); $ar_res = $db_res->GetNext(); } if(!$ar_res) $ar_res = array("NAME" => ""); $fixIBlock = $arProperty["LINK_IBLOCK_ID"] > 0; $windowTableId = 'iblockprop-'.Iblock\PropertyTable::TYPE_ELEMENT.'-'.$arProperty['ID'].'-'.$arProperty['LINK_IBLOCK_ID']; return ''. ''. ' '.$ar_res['NAME'].''; } public static function GetSettingsHTML($arProperty, $strHTMLControlName, &$arPropertyFields) { $arPropertyFields = array( "HIDE" => array("ROW_COUNT", "COL_COUNT", "WITH_DESCRIPTION"), ); return ''; } public static function GetUIEntityEditorProperty($settings, $value) { return [ 'type' => 'custom', ]; } public static function GetUIEntityEditorPropertyEditHtml(array $params = []) : string { $settings = $params['SETTINGS'] ?? []; \Bitrix\Main\UI\Extension::load(['ui.entity-selector', 'ui.buttons', 'ui.forms']); $fieldName = htmlspecialcharsbx($params['FIELD_NAME']); $containerId = $fieldName . '_container'; $inputsContainerId = $fieldName . '_inputs_container'; $isMultiple = $settings['MULTIPLE'] === 'Y'; $isMultiple = CUtil::PhpToJSObject($isMultiple); if (!is_array($params['VALUE'])) { $params['VALUE'] = (!empty($params['VALUE'])) ? [$params['VALUE']] : []; } $preselectedItems = []; foreach ($params['VALUE'] as $value) { if (!$value) { continue; } $element = self::getElementByXmlId($value); if ($element) { $preselectedItems[] = ['iblock-element-xml', (string)$element['ID']]; } } $preselectedItems = CUtil::PhpToJSObject($preselectedItems); $messages = [ 'NOT_FOUND' => Loc::getMessage('BT_UT_XML_ID_SEARCH_NOT_FOUND'), 'CHANGE_QUERY' => Loc::getMessage('BT_UT_XML_ID_SEARCH_CHANGE_QUERY'), 'ENTER_QUERY' => Loc::getMessage('BT_UT_XML_ID_SEARCH_ENTER_QUERY'), 'ENTER_QUERY_SUBTITLE' => Loc::getMessage('BT_UT_XML_ID_SEARCH_ENTER_QUERY_SUBTITLE'), ]; $propertyType = self::USER_TYPE; return <<
HTML; } public static function GetUIEntityEditorPropertyViewHtml(array $params = []): string { $result = ''; if (empty($params['VALUE'])) { return ''; } if (!is_array($params['VALUE'])) { $params['VALUE'] = [$params['VALUE']]; } foreach ($params['VALUE'] as $value) { $filter = [ 'CHECK_PERMISSIONS' => 'Y', 'MIN_PERMISSION' => 'R', 'XML_ID' => $value, ]; $element = CIBlockElement::GetList( [], $filter, false, false, ['ID', 'XML_ID', 'IBLOCK_ID', 'NAME'] )->Fetch(); $result .= htmlspecialcharsbx($element['NAME']) . '