Поддержка серверов

CUserTypeEnum::getPublicEdit: метод Битрикс

Постоянная ссылка: http://bxapi.ru/src/?id=422391

<?php 
//    /bitrix/modules/main/classes/general/usertypeenum.phpCUserTypeEnum::getPublicEdit()
//    766:

    
public function getPublicEdit($arUserField$arAdditionalParameters = array())
    {
        static::
getEnumList($arUserField$arAdditionalParameters);

        
$fieldName = static::getFieldName($arUserField$arAdditionalParameters);
        
$value = static::getFieldValue($arUserField$arAdditionalParameters);

        
$bWasSelect false;

        
$html '';

        if(
$arUserField["SETTINGS"]["DISPLAY"] == "UI")
        {
            
$html .= '<input type="hidden" name="'.htmlspecialcharsbx($fieldName).'" value="" id="'.htmlspecialcharsbx($arUserField['FIELD_NAME']).'_default" />';

            \
CJSCore::Init('ui');

            
$startValue = array();
            
$itemList = array();

            foreach(
$arUserField['USER_TYPE']['FIELDS'] as $key => $val)
            {
                if(
$key === '' && $arUserField['MULTIPLE'] === 'Y')
                {
                    continue;
                }

                
$item = array(
                    
'NAME' => $val,
                    
'VALUE' => $key,
                );

                if(
in_array($key$value))
                {
                    
$startValue[] = $item;
                }

                
$itemList[] = $item;
            }

            
$params = \Bitrix\Main\Web\Json::encode(array(
                
'isMulti' => $arUserField['MULTIPLE'] === 'Y',
                
'fieldName' => $arUserField['FIELD_NAME']
            ));

            
$result '';

            
$suffix strtolower(RandString(4));
            
$controlNodeId $arUserField['FIELD_NAME'].'_control_'.$suffix;
            
$valueContainerId $arUserField['FIELD_NAME'].'_value_'.$suffix;

            
$attrList = array(
                
'id' => $valueContainerId,
                
'style' => 'display: none'
            
);

            
$result .= '<span '.static::buildTagAttributes($attrList).'>';

            for(
$i 0$n count($startValue); $i $n$i++)
            {
                
$attrList = array(
                    
'type' => 'hidden',
                    
'name' => $fieldName,
                    
'value' => $startValue[$i]['VALUE'],
                );

                
$result .= '<input '.static::buildTagAttributes($attrList).' />';
            }

            
$result .= '</span>';

            if(
$arUserField['MULTIPLE'] !== 'Y')
            {
                
$startValue $startValue[0];
            }

            
$items = \Bitrix\Main\Web\Json::encode($itemList);
            
$currentValue = \Bitrix\Main\Web\Json::encode($startValue);

            
$fieldNameJS = \CUtil::JSEscape($arUserField['FIELD_NAME']);
            
$htmlFieldNameJS = \CUtil::JSEscape($fieldName);
            
$controlNodeIdJS = \CUtil::JSEscape($controlNodeId);
            
$valueContainerIdJS = \CUtil::JSEscape($valueContainerId);
            
$block $arUserField['MULTIPLE'] === 'Y' 'main-ui-multi-select' 'main-ui-select';

            
$result .= <<<EOT
<span id="{$controlNodeId}"></span>
<script>
function changeHandler_
{$fieldNameJS}(controlObject, value)
{
    if(controlObject.params.fieldName === '
{$fieldNameJS}' && !!BX('{$valueContainerIdJS}'))
    {
        var currentValue = JSON.parse(controlObject.node.getAttribute('data-value'));

        var s = '';
        if(!BX.type.isArray(currentValue))
        {
            if(currentValue === null)
            {
                currentValue = [{VALUE:''}];
            }
            else
            {
                currentValue = [currentValue];
            }
        }

        if(currentValue.length > 0)
        {
            for(var i = 0; i < currentValue.length; i++)
            {
                s += '<input type="hidden" name="
{$htmlFieldNameJS}" value="'+BX.util.htmlspecialchars(currentValue[i].VALUE)+'" />';
            }
        }
        else
        {
            s += '<input type="hidden" name="
{$htmlFieldNameJS}" value="" />';
        }

        BX('
{$valueContainerIdJS}').innerHTML = s;
        BX.fireEvent(BX('
{$fieldNameJS}_default'), 'change');
    }
}

BX.ready(function(){

    var params = 
{$params};

    BX('
{$controlNodeIdJS}').appendChild(BX.decl({
        block: '
{$block}',
        name: '
{$fieldNameJS}',
        items: 
{$items},
        value: 
{$currentValue},
        params: params,
        valueDelete: false
    }));

    BX.addCustomEvent(
        window,
        'UI::Select::change',
        changeHandler_
{$fieldNameJS}
    );

    BX.bind(BX('
{$controlNodeIdJS}'), 'click', BX.defer(function(){
        changeHandler_
{$fieldNameJS}(
        {
            params: params,
            node: BX('
{$controlNodeIdJS}').firstChild
        });
    }));
});
</script>
EOT;

            
$html .= static::getHelper()->wrapSingleField($result);
        }
        elseif(
$arUserField["SETTINGS"]["DISPLAY"] == "CHECKBOX")
        {
            
$first true;
            if(
$arUserField['MULTIPLE'] === 'Y')
            {
                
$html .= '<input '.static::buildTagAttributes([
                        
'type' => 'hidden',
                        
'name' => $fieldName,
                        
'value' => ''
                    
]).' />';
            }

            foreach(
$arUserField["USER_TYPE"]["FIELDS"] as $key => $val)
            {
                
$tag '';

                if(
$first)
                {
                    
$first false;
                }
                else
                {
                    
$tag .= static::getHelper()->getMultipleValuesSeparator();
                }

                
$bSelected in_array($key$value) && (
                        (!
$bWasSelect) ||
                        (
$arUserField["MULTIPLE"] == "Y")
                    );
                
$bWasSelect $bWasSelect || $bSelected;

                
$attrList = array(
                    
'type' => $arUserField['MULTIPLE'] === 'Y' 'checkbox' 'radio',
                    
'value' => $key,
                    
'name' => $fieldName,
                );

                if(
$bSelected)
                {
                    
$attrList['checked'] = 'checked';
                }

                
$attrList['tabindex'] = '0';

                
$tag .= '<label><input '.static::buildTagAttributes($attrList).'>'.htmlspecialcharsbx($val).'</label><br />';
                
$html .= static::getHelper()->wrapSingleField($tag, array(static::USER_TYPE_ID.'-checkbox'));
            }
        }
        else
        {
            
$attrList = array(
                
'name' => $fieldName,
                
'tabindex' => '0',
            );

            if(
$arUserField["SETTINGS"]["LIST_HEIGHT"] > 1)
            {
                
$attrList['size'] = $arUserField["SETTINGS"]["LIST_HEIGHT"];
            }

            if(
$arUserField["MULTIPLE"] == "Y")
            {
                
$attrList['multiple'] = 'multiple';
            }

            
$tag '<select '.static::buildTagAttributes($attrList).'>';

            foreach(
$arUserField["USER_TYPE"]["FIELDS"] as $key => $val)
            {
                
$bSelected in_array($key$value) && (
                        (!
$bWasSelect) ||
                        (
$arUserField["MULTIPLE"] == "Y")
                    );
                
$bWasSelect $bWasSelect || $bSelected;

                
$attrList = array(
                    
'value' => $key,
                );

                if(
$bSelected)
                {
                    
$attrList['selected'] = 'selected';
                }

                
$tag .= '<option '.static::buildTagAttributes($attrList).'>'.htmlspecialcharsbx($val).'</option>';
            }
            
$tag .= '</select>';

            
$html .= static::getHelper()->wrapSingleField($tag, array(static::USER_TYPE_ID.($arUserField['MULTIPLE'] === 'Y' '-multiselect' '-select')));
        }

        static::
initDisplay();

        return static::
getHelper()->wrapDisplayResult($html);
    }

Блог разработчика

9 Августа 2016 ResizeImageGet и простой водяной знак налету

Сегодня поговорим о том как проще всего воткнуть водяной знак на картинки в Битрикс. Например, на все изображения каталога.

21 Июля 2016 Добавление вкладки в CRM коробки Битрикс24

В этом посте я покажу, как легко и просто добавить вкладку в сущность CRM. И не просто добавить, а вывести там свой контент.

21 Июля 2016 Как просто обращаться из коробки Битрикс24 на сайт на базе Битрикс

К примеру вам хочется внутренним скриптом дернуть с сайта-магазина информацию, которая там, в свою очередь, закрыта некоторыми правами. Например, админскими. Можно конечно мутить свой REST, или иной формат общения, но проще всего воспользоваться штатным инструментом:

Текст сообщения*
Загрузить изображение