Так и не нашел как включить стандартный тип, написал на скорую руку велосипед на основе выбора элемента инфоблока, может кому пригодиться.
| Код |
|---|
use Bitrix\Highloadblock as HL;
use Bitrix\Highloadblock\HighloadBlockTable as HLT;
use Bitrix\Main\Entity;
CModule::IncludeModule("iblock");
class CUserTypeIBlockHighloadElement extends CUserTypeEnum{
function GetUserTypeDescription(){
return array(
"USER_TYPE_ID" => "hiblock_element",
"CLASS_NAME" => "CUserTypeIBlockHighloadElement",
"DESCRIPTION" => 'Cправочник',
"BASE_TYPE" => "int",
);
}
function PrepareSettings($arUserField){
$hl_iblock_id = intval($arUserField["SETTINGS"]["HL_IBLOCK_ID"]);
if($hl_iblock_id <= 0)
$hl_iblock_id = "";
return array(
"HL_IBLOCK_ID" => $hl_iblock_id,
);
}
function GetSettingsHTML($arUserField = false, $arHtmlControl, $bVarsFromForm){
$result = '';
if($bVarsFromForm){
$hl_iblock_id = $GLOBALS[$arHtmlControl["NAME"]]["HL_IBLOCK_ID"];
}elseif(is_array($arUserField)){
$hl_iblock_id = $arUserField["SETTINGS"]["HL_IBLOCK_ID"];
}else{
$hl_iblock_id = "";
}
if(CModule::IncludeModule('highloadblock')){
$result .= '
<tr>
<td>Выберите справочник:</td>
<td>
'.self::GetHighloadListHtml($arHtmlControl["NAME"],$hl_iblock_id).'
</td>
</tr>
';
}
else{
$result .= '
<tr>
<td>Введите id справочника:</td>
<td>
<input type="text" size="6" name="'.$arHtmlControl["NAME"].'[HL_IBLOCK_ID]" value="'.htmlspecialcharsbx($hl_iblock_id).'">
</td>
</tr>
';
}
return $result;
}
function GetHighloadListHtml($name,$selected_value){
if(CModule::IncludeModule('highloadblock')){
$list_html='<select name="'.$name.'"><option value="">Выберите справочник</option>';
$hl_list_obj = HL\HighloadBlockTable::getList();
while($hl_elm = $hl_list_obj->fetch()){
$list_html.='<option value="'.$hl_elm['ID'].'"';
if($selected_value==$hl_elm['ID']){
$list_html.=' selected="selected"';
}
$list_html.='>'.$hl_elm['NAME'].'</option>';
}
$list_html.='<select>';
}
return $list_html;
}
function CheckFields($arUserField, $value)
{
$aMsg = array();
return $aMsg;
}
function GetEditFormHTML($arUserField,$arHtmlControl){
$rsElement = false;
if(CModule::IncludeModule('highloadblock')&&isset($arUserField["SETTINGS"]["HL_IBLOCK_ID"])){
$hl_block=HLT::getById($arUserField["SETTINGS"]["HL_IBLOCK_ID"])->fetch();
if($hl_block){
$hl_entity = HLT::compileEntity($hl_block);
$hl_entity_class = $hl_entity->getDataClass();
$hl_obj=$hl_entity_class::getList();
$rsElement='<select name="'.$arUserField["FIELD_NAME"].'"><option value="">Выберите элемент справочника</option>';
while($hl_elm = $hl_obj->fetch()){
$rsElement.='<option value="'.$hl_elm['ID'].'"';
if($arUserField["VALUE"]==$hl_elm['ID']){
$rsElement.=' selected="selected"';
}
$rsElement.='>'.$hl_elm['UF_NAME'].'</option>';
}
$rsElement.='</select>';
}
}
return $rsElement;
}
}
AddEventHandler("main", "OnUserTypeBuildList", array("CUserTypeIBlockHighloadElement", "GetUserTypeDescription")); |
Может не идеал, но работает. У меня, по крайней мере
