Добрый день! <br/> Я создал пользовательский тип поля и настроил его как множественный. Как можно отобразить выбранные значения в функции GetPublicView для множественного выбора? <br/> Код: <br/> <pre><code class="php">defined('B_PROLOG_INCLUDED') || die; use Bitrix\Main\EventManager; use Bitrix\Main\UI\Extension; use Bitrix\Main\UserField\TypeBase; Extension::load('ui.forms'); $eventManager = EventManager::getInstance(); $eventManager->addEventHandlerCompatible('main', 'OnUserTypeBuildList', array('MyUserType', 'GetUserTypeDescription')); class MyUserType extends TypeBase { const USER_TYPE_ID = 'YEARSMONTH'; const MONTHS = [ '', 'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь', ]; const YEARS = [ 2024 => 2024, 2025 => 2025, 2026 => 2026, 2027 => 2027, 2028 => 2028, ]; public static function GetUserTypeDescription() { return array( 'USER_TYPE_ID' => static::USER_TYPE_ID, 'CLASS_NAME' => __CLASS__, 'DESCRIPTION' => 'Год и месяц поставки', 'BASE_TYPE' => \CUserTypeManager::BASE_TYPE_STRING, 'EDIT_CALLBACK' => array(__CLASS__, 'GetPublicEdit'), 'VIEW_CALLBACK' => array(__CLASS__, 'GetPublicView'), ); } public static function GetDBColumnType($arUserField) { global $DB; switch(strtolower($DB->type)) { case "mysql": return "varchar(32)"; case "oracle": return "varchar2(32 char)"; case "mssql": return "varchar(32)"
Для отображения выбранных значений в функции `GetPublicView` в вашем пользовательском типе поля, который вы настроили как множественный, вам необходимо сначала убедиться, что значения, выбранные пользователем, правильно сохраняются в базе данных (в виде массива, например, JSON или через запятую). В функции `GetPublicView`, вам нужно обработать данные, чтобы отобразить их в нужном формате. Предположим, что значения хранятся в формате JSON, и вы хотите отобразить каждый месяц и год в удобочитаемом виде. Пример кода для функции `GetPublicView` может выглядеть так: ```php public static function GetPublicView($arUserField, $value, $strHTMLControlName) { // Проверяем, что значение не пустое if (empty($value)) { return ''; } // Предположим, что значения хранятся в виде JSON $monthsAndYears = json_decode($value, true); // Проверяем, что декодирование прошло успешно if (!is_array($monthsAndYears)) { return htmlspecialcharsbx($value); } $result = []; // Формируем массив для отображения foreach ($monthsAndYears as $yearMonth) { $year = $yearMonth['year']; $month = $yearMonth['month']; // Проверяем, что месяц и год корректные if (isset(self::MONTHS[$month]) && isset(self::YEARS[$year])) { $result[] = self::MONTHS[$month] . ' ' . $year; } } // Возвращаем строку с выбранными значениями return implode(', ', $result); } ``` В этом коде: - `json_decode($value, true)` используется для преобразования JSON-строки обратно в массив. - Мы проверяем, корректно ли распарсены данные. - Для каждого элемента в массиве `monthsAndYears`, мы извлекаем значение года и месяца и получаем соответствующее название месяца из константы `MONTHS`. - В результате возвращается строка с перечисленными месяцами и годами, разделенными запятыми. Убедитесь, что вы корректно сохраняете данные в формате, совместимом с тем, как вы их обрабатываете в методе `GetPublicView`.