@junior_www

Как в Битрикс для раздела добавить поле строка с описанием?

Добрый день! Для элемента инфоблока можно задать поле строка с описанием. Как такое можно реализовать для раздела? Там при добавлении нового поля нет такого типа, только просто "строка"
Пробую добавить новый тип в 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"));
?>


Поле вроде добавляется, в списке типов полей есть, при нажатии добавить вносятся настройки, в списке полей тоже есть, но, в карточке раздела его нет. Подскажите, пожалуйста, что я упустил?
  • Вопрос задан
  • 295 просмотров
Решения вопроса 1
@junior_www Автор вопроса
Нашел решение тут. Вдруг кому пригодится.

https://dev.1c-bitrix.ru/api_d7/bitrix/main/userfi...

Не хватает много методов. Поэтому работает некорректно
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы