Добрый день! Для элемента инфоблока можно задать поле строка с описанием. Как такое можно реализовать для раздела? Там при добавлении нового поля нет такого типа, только просто "строка"
Пробую добавить новый тип в init.php
<?php
class PropStringDesc extends CUserTypeString
{
static function getUserTypeDescription()
{
return array(
'USER_TYPE_ID' => 'PropStringDesc',
'CLASS_NAME' => __CLASS__,
'DESCRIPTION' => 'Строка с описанием',
'BASE_TYPE' => 'string'
);
}
/**
* Вывод в админке
*
* @param [type] $arUserField
* @param [type] $arHtmlControl
* @return void
*/
public function getEditFormHTML($arUserField, $arHtmlControl)
{
if (!$arUserField['VALUE']) {
$arHtmlControl['VALUE'] = htmlspecialcharsbx($arUserField["SETTINGS"]["DEFAULT_VALUE"]);
} else {
$arHtmlControl['VALUE'] = $arUserField['VALUE'];
}
$html = '';
$html .= '<table border="0" cellspacing="0" cellpadding="0" width="100%" class="internal">';
$html .= '<tbody>';
$html .= '<tr class="heading">';
$html .= '<td>Строка</td>';
$html .= '<td>Описание</td>';
$html .= '</tr>';
$html .= '<tr>';
$html .= '<td align="center">';
$html .= '<input type="text" name="' . $arHtmlControl["NAME"] . '[NAME]" value="' . $arHtmlControl['VALUE']['NAME'] . '" /></td>';
$html .= '<td align="center">';
$html .= '<input type="text" name="' . $arHtmlControl["NAME"] . '[DESC]" value="' . $arHtmlControl['VALUE']['DESC'] . '" />';
$html .= '</td>';
$html .= '</tr>';
$html .= '</tbody>';
$html .= '</table>';
return $html;
}
/**
* Сохранение в БД
*
* @param [type] $arUserField
* @param [type] $value
* @return string
*/
public function OnBeforeSave($arUserField, $value): string
{
$value = \Bitrix\Main\Web\Json::encode($value);
return $value;
}
/**
* Извлечение из БД
*
* @param [type] $arProperty
* @param [type] $arValue
* @return array
*/
public function onAfterFetch($arProperty, $arValue): array
{
if (!empty($arValue["VALUE"])) {
$arValue = \Bitrix\Main\Web\Json::decode(html_entity_decode($arValue["VALUE"]));
}
return $arValue;
}
}
AddEventHandler("main", "OnUserTypeBuildList", array('PropStringDesc', "getUserTypeDescription"));
?>
Поле вроде добавляется, в списке типов полей есть, при нажатии добавить вносятся настройки, в списке полей тоже есть, но, в карточке раздела его нет. Подскажите, пожалуйста, что я упустил?