1С-Битрикс. Вывод формы любого пользовательского свойства главного модуля в любом месте на сайте
Небольшой хак, как показать форму любого пользователького поля, например, на странице своего модуля. Единственное условие: так это надо знать ID инфоблока, у когорого это свойство есть.
Выводить будем «Мульти-текстовые блоки с заголовком».
Код для вывода формы пользовательского поля
//<?php global $USER_FIELD_MANAGER; $iblockId = 1; $ufEntityCode = 'IBLOCK_%s_SECTION'; if ($arUserField = getUserTypeMultiString($ufEntityCode, $iblockId)) { // обзываем любым именем, которое нам будет удобно обработать $arUserField['FIELD_NAME'] = sprintf( 'olegpro_sfm_seo_meta_meta_string_block' ); // добавляем выбранные значения $arUserField['VALUE'] = array_map( function ($value) { return serialize($value); }, array( array('HEADER' => 'header1', 'TEXT' => 'text1'), array('HEADER' => 'header2', 'TEXT' => 'text2'), ) ); // показываем форму echo $USER_FIELD_MANAGER->GetEditFormHTML(false, '', $arUserField); } function getUserTypeMultiString($ufEntityCode, $iblockId) { global $USER_FIELD_MANAGER, $USER; static $result = null; $userId = $USER->GetID(); if ($result === null) { $resProperty = \CUserTypeEntity::GetList( array(), array( 'ENTITY_ID' => sprintf($ufEntityCode, $iblockId), 'USER_TYPE_ID' => 'multi_string_block' ) ); if ($arUserField = $resProperty->Fetch()) { if ($arType = $USER_FIELD_MANAGER->GetUserType($arUserField['USER_TYPE_ID'])) { if ( $userId !== 0 && is_callable(array($arType['CLASS_NAME'], 'checkpermission')) ) { if (!call_user_func_array( array($arType['CLASS_NAME'], 'checkpermission'), array($arUserField, $userId) ) ) { return false; } } $arUserField['USER_TYPE'] = $arType; $arUserField['VALUE'] = false; if (!is_array($arUserField['SETTINGS']) || empty($arUserField['SETTINGS'])) { $arUserField['SETTINGS'] = $USER_FIELD_MANAGER->PrepareSettings(0, $arUserField); } } $entityUserTypeLang = \Bitrix\Main\Entity\Base::compileEntity( 'TableUserTypeLang', array( 'USER_FIELD_ID' => array('data_type' => 'integer'), 'LANGUAGE_ID' => array('data_type' => 'string'), 'EDIT_FORM_LABEL' => array('data_type' => 'string'), 'LIST_COLUMN_LABEL' => array('data_type' => 'string'), 'LIST_FILTER_LABEL' => array('data_type' => 'string'), ), array('table_name' => sprintf('b_user_field_lang')) ); $userTypeLangClass = $entityUserTypeLang->getDataClass(); $userTypeLangIterator = $userTypeLangClass::getList(array( 'select' => array( 'EDIT_FORM_LABEL', 'LIST_COLUMN_LABEL', 'LIST_FILTER_LABEL', ), 'filter' => array( 'USER_FIELD_ID' => $arUserField['ID'], 'LANGUAGE_ID' => 'ru', ) )); if ($userTypeLang = $userTypeLangIterator->fetch()) { $arUserField = array_merge($arUserField, $userTypeLang); } $arUserField['VALUE'] = ''; $result = $arUserField; } } return $result; }