| Задача: выводить информацию, полученную из БД на другом сервере, в карточке компании |
| Поставила модуль 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;
}*/
}
?> |