@mazzer

Как отобразить несколько элементов в пользовательском типе полей?

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

    public static function OnBeforeSave($arUserField, $value) {
        if(empty($value) || !is_array($value))
            return $value;

        return implode('.', $value);

    }

   public  function onAfterFetch($userfield, $fetched)
   {
       return self::prepareValue($fetched['VALUE']);
   }

    public static function GetPublicView($arUserField, $arAdditionalParameters = array())
    {
        return (!empty($arUserField['VALUE']) ? self::MONTHS[$arUserField['VALUE'][0]] .' '. self::YEARS[$arUserField['VALUE'][1]] : 'не задано');
                       

     //return self::GetPublicEdit($arUserField, $arAdditionalParameters);
    }

    public static function GetPublicEdit($arUserField, $arAdditionalParameters = array())
    {
        $fieldName = static::getFieldName($arUserField, $arAdditionalParameters);
       // Bitrix\Main\Diag\Debug::writeToFile( $fieldValue, '', "/logText23.log");
        $fieldValue = static::getFieldValue($arUserField, $arAdditionalParameters);
        return '<div class="ui-form">
            <div class="ui-form-row-inline">
                <div class="ui-form-row">
                    <div class="ui-form-label">
                        <div class="ui-ctl-label-text">Месяц поставки</div>
                    </div>
                    <div class="ui-form-content">
                        <div class="ui-ctl ui-ctl-after-icon ui-ctl-multiple-select  ui-ctl-w100">
                            <div class="ui-ctl-after ui-ctl-icon-angle"></div>
							'.self::prepareData($fieldName, $fieldValue, self::MONTHS).'
                        </div>
                    </div>
                </div>
                <div class="ui-form-row">
                    <div class="ui-form-label">
                        <div class="ui-ctl-label-text">Год поставки</div>
                    </div>
                    <div class="ui-form-content">
                        <div class="ui-ctl ui-ctl-after-icon ui-ctl-multiple-select ui-ctl-w100">
                            <div class="ui-ctl-after ui-ctl-icon-angle"></div>
                            '.self::prepareData($fieldName, $fieldValue, self::YEARS, 1).'
                        </div>
                    </div>
                </div>		
            </div>
        </div>';
    }

    protected static function prepareValue($value)
    {
        if(empty($value))
            return $value;

        return explode('.', $value);
    }

	protected static function prepareData($fieldName, $fieldValue, $data, $index = 0)
	{   
	    Bitrix\Main\Diag\Debug::writeToFile( $fieldValue, '', "/logText23.log");
		$res = '<select class="ui-ctl-element" multiple name="'.htmlspecialcharsbx($fieldName).'">';
		foreach($data as $key => $value)
		{
			$selected = '';
			if(isset($fieldValue[$index]) && $key == $fieldValue[$index])			
				$selected = ' selected';
			$ddd = $fieldValue[$index] . $fieldValue ;
			Bitrix\Main\Diag\Debug::writeToFile( $arUserField['VALUE'], '', "/logText2366.log");
			$res .= '<option value="'.htmlspecialcharsbx($key).'"'.$selected.'>'.htmlspecialcharsbx($value).'</option>';
		}
		
		$res .= '</select>';
		
		return $res;
	}
}


Заранее спасибо за советы!
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

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