Артём Мáлков

Свой шаблон system.field.edit для пользовательских свойств (полей) 1C-Bitrix

17 июл0 комм

Если вам, как в своё время и мне, необходимо доработать или разработать новую регистрацию или, например, личный кабинет пользователя (профиль), то перед вами может стоять задача изменения вида (вёрстки) редактируемых пользовательских свойств (полей). У меня был опыт изменения вида того или иного элемента (поля) без затрагивания вёрстки. Делал я всё исключительно на CSS, что, подразумеваю, могли пробовать и вы, но в некоторых случаях всё же стоит прибегнуть к изменению HTML-кода.

По традиции, в этом посте поделюсь с вами тем, что пробовал я и что, в конечном итоге, дало желаемый результат.

Итак, предположим, что я сделал свою страницу регистрации с использованием компонента настраиваемой регистрации bitrix:main.register. Набор полей стандартный, но я создал и вывел своё поле (свойство) с типом «Строка»:

Свой шаблон system.field.edit для пользовательских свойств (полей) 1C-Bitrix

И сейчас мне нужно изменить вёрстку этого поля. Что я пробовал? Первое, и как бы правильное с точки зрения правил (рекомендаций) кастомизации CMS 1C-Bitrix, это то, что я создал в папке темы сайта подпапки /components/bitrix/system.field.edit/ с соответствующей вложенностью и скопировал в неё папку string из пути /bitrix/components/bitrix/system.field.edit/templates/. После я внёс правки в файл template.php, и, как вы думаете, что произошло? Правильно, ничего.

Чтобы проверить, в чём может быть дело, я отредактировал оригинальный файл вёрстки template.php по пути /bitrix/components/bitrix/system.field.edit/templates/, и это также не дало никакого результата. Что интересно, вёрстка в файле и на сайте не совпадают (как минимум разные классы). Значит, вёрстка для этого типа полей берётся из другого места. Хорошо, подумал я (хотя не хорошо), и попробовал сменить стандартное название шаблона поля string.

Для этого я отредактировал шаблон компонента настраиваемой регистрации bitrix:main.register. В нём нас интересует часть, похожая на:

<?$APPLICATION->IncludeComponent(
	'bitrix:system.field.edit',
	$arUserField['USER_TYPE']['USER_TYPE_ID'],
	array(
		'bVarsFromForm' => $arResult['bVarsFromForm'],
		'arUserField' => $arUserField,
		'form_name' => 'regform'
	),
	null,
	array(
		'HIDE_ICONS'=>'Y'
	)
);?>

Заменил её на:

<?$APPLICATION->IncludeComponent(
	'bitrix:system.field.edit',
	$field_type,
	array(
		'bVarsFromForm' => $arResult['bVarsFromForm'],
		'arUserField' => $arUserField,
		'form_name' => 'regform'
	),
	null,
	array(
		'HIDE_ICONS'=>'Y'
	)
);?>

и до неё добавил:

<?

	$field_type = $arUserField['USER_TYPE']['USER_TYPE_ID'];

	if($field_type == 'string') {

		$field_type = 'custom-string';

	}

?>

И переименовал папку «string» из пути /папка темы/components/bitrix/system.field.edit/ в «custom-string».

Нерезультативное действие. Почему? Потому что ранее мы (я) уже выяснили, что вёрстка созданного поля берётся не из этого места в принципе.

Поискав информацию на этот счёт в Интернете, я встретил сообщения о том, что у некоторых сработали эти способы, но, к сожалению, не у меня. Помимо этого нашёл одно интересное замечание, в котором говорится, что если исследовать массив пользовательских полей $arUserField['USER_TYPE'] в переобходе foreach:

<?foreach ($arResult["USER_PROPERTIES"]["DATA"] as $FIELD_NAME => $arUserField):?>

	<?var_dump($arUserField['USER_TYPE']);?>

то можно обнаружить элемент с ключом USE_FIELD_COMPONENT, имеющий значение true. Сменим его на false:

<?foreach ($arResult["USER_PROPERTIES"]["DATA"] as $FIELD_NAME => $arUserField):?>

	<?$arUserField['USER_TYPE']['USE_FIELD_COMPONENT'] = false;?>

var_dump() при этом нужно удалить. Тогда подключится шаблон полей уже из папки string (в моём случае) по пути /папка темы/components/bitrix/system.field.edit/. А вот это уже то, что нам нужно. Помимо этого, здесь начинает работать (при изменении кода компонента) и условие смены стандартного названия темы (папки) поля из описанного примера выше.

Вроде бы всё. Если остались вопросы – милости прошу в комментарии. Всем интересных разработок!

Рекомендуем к просмотру
Ошибка активации (подтверждения) аккаунта в 1C-Bitrix
Посты
Экспорт (выгрузка) пользовательских полей заказа из 1C-Bitrix в retailCRM
Хаки
Как создать и вывести пользовательское поле раздела в 1C-Bitrix?
Статьи и советы
0
комментариев
Форма комментирования этого поста скрыта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.
Подняться наверх
«Pandoge» - помощник вебмастера