Задача: выводить информацию, полученную из БД на другом сервере, в карточке компании |
Поставила модуль d2mg.ufhtml, который поддерживает html поле https://marketplace.1c-bitrix.ru/solutions/d2mg.ufhtml/ Важно! в Пxп 8 модуль d2mg.ufhtml перестает работать! его надо допиливать (ниже написано как) |
создаем пользовательское свойство через админку UF_COMPANY_MAIN_INFO с данным типом
\Bitrix\Main\EventManager::getInstance()->addEventHandler('main', 'onGetUserFieldValues', function(\Bitrix\Main\Event $event){ $result = new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS); $entityId = $event->getParameter('entityId'); if($entityId === 'CRM_COMPANY'){ $userFields = $event->getParameter('userFields'); $companyId = $event->getParameter('value'); if(isset($userFields["UF_COMPANY_MAIN_INFO"]) && CModule::IncludeModule('crm')){ $arSelect = ["ID"]; foreach ($userFields as $key => $value) { $arSelect[] = $key; } $arFilter = array("ID"=>intval($companyId),"CHECK_PERMISSIONS"=>"N"); $rsCompany = CCrmCompany::GetList(Array(),$arFilter,$arSelect); if($arComp = $rsCompany->Fetch()){ unset($arComp["ID"]); $values = []; foreach ($arComp as $key => $value) { $values[$key] = $value; } } $info = MyClass::FillCompanyMainInfo($companyId,$values["UF_PA"]); //тут логика получения информации $values["UF_COMPANY_MAIN_INFO"] = $info; $result = new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, [ 'values' => $values, ]); } } return $result; }); |
- /local/templates/.default/components/bitrix/system.field.edit/customhtml/template.php
- /local/templates/.default/components/bitrix/system.field.view/customhtml/template.php
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?> <?=html_entity_decode($arResult["VALUE"][0])??""?> |
для пхп 8 допилила /bitrix/modules/d2mg.ufhtml/classes/general/customtypehtml.php
но не работает нормально со множественными значениями
функция function OnBeforeSave($arUserField, $value) кривая
<? IncludeModuleLangFile(__FILE__); class CCustomTypeHtml extends \Bitrix\Main\UserField\Types\StringType { public static function getUserTypeDescription(): array { return array( "USER_TYPE_ID" => "customhtml", "CLASS_NAME" => "CCustomTypeHtml", "DESCRIPTION" => GetMessage("PPROP_NAME"), "BASE_TYPE" => "string", ); } public static function getEditFormHtml(array $userField, ?array $additionalParameters): string { if($arUserField["ENTITY_VALUE_ID"]<1 && strlen($arUserField["SETTINGS"]["DEFAULT_VALUE"])>0) $additionalParameters["VALUE"] = htmlspecialcharsbx($arUserField["SETTINGS"]["DEFAULT_VALUE"]); if($arUserField["SETTINGS"]["ROWS"] < 8) $arUserField["SETTINGS"]["ROWS"] = 8; if($arUserField['MULTIPLE'] == 'Y') $name = preg_replace("/[\[\]]/i", "_", $additionalParameters["NAME"]); else $name = $additionalParameters["NAME"]; ob_start(); CFileMan::AddHTMLEditorFrame( $name, $additionalParameters["VALUE"], $name."_TYPE", strlen($additionalParameters["VALUE"])?"html":"text", array( 'height' => $arUserField['SETTINGS']['ROWS']*10, ), ); if($arUserField['MULTIPLE'] == 'Y') echo '<input type="hidden" name="'.$additionalParameters["NAME"].'" >'; $html = ob_get_contents(); ob_end_clean(); return $html; } /*function OnBeforeSave($arUserField, $value) { if($arUserField['MULTIPLE'] == 'Y') { foreach($_POST as $key => $val) { if( preg_match("/".$arUserField['FIELD_NAME']."_([0-9]+)_$/i", $key, $m) ) { $value = $val; unset($_POST[$key]); break; } } } return $value; }*/ } ?> |