Добрый день! <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`.