Меню Закрыть

Bitrix system field edit

Возможности системного компонента регистрации довольно скромные: нет возможности добавить свои поля, сделать их обязательными для заполнения. Для реализации таких возможностей есть компонент «Настраиваемая регистрация», который позволяет настроить и разместить на сайте свою форму регистрации. В визуальном редакторе компонент расположен по пути: «Служебные • Пользователь • Настраиваемая регистрация».

Пример вызова компонента

Создадим страницу /auth/register.php , разместим на ней вызов компонента «Настраиваемая регистрация». В настройках компонента выберем поля, которые надо показывать:

  • [EMAIL] E-mail
  • [NAME] Имя
  • [LAST_NAME] Фамилия
  • [PERSONAL_PHONE] Телефон
  • [WORK_COMPANY] Наименование компании
  • [WORK_PHONE] Телефон (рабочий)

И укажем поля, обязательные для заполнения:

  • [EMAIL] E-mail
  • [NAME] Имя
  • [LAST_NAME] Фамилия
  • [PERSONAL_PHONE] Телефон

После этого страница /auth/register.php содержит следующий код:

И имеет такой вид:

Теперь нам надо кастомизировать форму регистрации под наш дизайн. Для этого копируем шаблон компонента:

  • откуда: bitrix/components/bitrix/main.register/templates/.default
  • куда: local/templates/.default/components/bitrix/main.register/.default

После внесения изменений получилось так:

И вот что получилось в итоге:

Тут есть еще один важный момент. Что будет, если на эту страницу попадает авторизованный пользователь? Ему показывается малоинформативное сообщение, что он зарегистрирован и авторизован.

Есть смысл перенаправить его на страницу личного кабинета или на страницу профиля:

Пользовательские поля

Хотя Битрикс предлагает большой набор предопределенных полей, их все-таки может не хватить. Тогда остается только создавать свои поля. Это можно сделать в панели управления: «Настройки • Настройки продукта • Пользовательские поля»:

Я добавил поле «Мое поле», тип «Строка», в настройках компонента указал, что это поле надо показывать:

Теперь форма регистрации имеет вид:

Порядок полей

Для настройки порядка следования полей в форме, создадим файл local/templates/.default/components/bitrix/main.register/.default/result_modifier.php :

В результате чего форма примет вид:

Авторизация по E-mail

Давайте уберем поле LOGIN , как отживший свое пережиток прошлого. Без этого поля регистрацию пользователь не пройдет, поэтому будем создавать LOGIN из EMAIL . Добавляем в init.php следующий код:

Читайте также:  Создать временный номер телефона для получения смс

Чтобы форма регистрации не выдавала ошибок «Не заполнено обязательное поле логин», внесем изменение в шаблон компонента:

Еще раз изменим порядок следования полей в форме и сделаем поле LOGIN первым, чтобы можно было его скрыть, обратившись с помощью :first-of-type :

Теперь скроем поле LOGIN :

Но есть еще одна проблема — у нас теперь две формы регистрации с разным составом полей:

  • первая формируется системным компонентом system.auth.registration и доступна по адресу /auth/?register=yes
  • вторая формируется компонентом bitrix:main.register и доступна по адресу /auth/register.php

Давайте это исправим. Удалим весь код из шаблона компонента system.auth.registration , и поместим в него вызов компонента bitrix:main.register из файла /auth/register.php :

А файл /auth/register.php просто удалим. Можно еще удалить лишний код из шаблона компонента bitrix:main.register , который никогда не будет выполнен. Системный компонент system.auth.registration вызывается где-то глубоко в недрах Битрикс только в том случае, если пользователь не авторизован. И еще одна проверка в шаблоне «Пользователь авторизован?» просто не нужна.

Не забываем изменить другие системные компоненты:

Есть еще один момент, о котором есть смысл упомянуть. Если при изменении пароля не заполнить поле «E-mail», появляется сообщение об ошибке «Логин должен быть не менее 3 символов». Где это изменить, я не нашел, видимо где-то в недрах ядра Битрикс. Поэтому небольшой хак:

В системе «1С-Битрикс» есть очень полезная «фишка» под названием «Пользовательские поля». Этот функционал позволяет добавлять объектам дополнительные поля, которые не предусмотрены в системе по умолчанию. Объектами могут быть: пользователи, сообщения блога или комментарии к ним, инфоблоки и их разделы и кое-что еще. С полным списком объектов можно ознакомиться на странице курса «Разработчик Bitrix Framework» . В этой статье я опишу процесс добавления и получения данных из пользовательского поля. Все действия я буду проводить над демо-версией сайта под управлением CMS «1С-Битрикс. Управление сайтом» версии 12.0.3. При установке я выбрал «решение для разработчиков».

Читайте также:  Asus radeon rx 560 rx560 4g

Сначала добавлю новое пользовательское поле в раздел инфоблока. Тип поля – строка. В системе поддерживаются различные типы пользовательских полей. Например, целое число, дата/время, файл, список и другие. Для своих опытов я выбрал инфоблок «Новости». В добавленном поле я буду хранить какое-нибудь значение, поле назову « UF_MY_FIELD ».

Вообще добавить новое пользовательское поле можно в разделе настроек административной части сайта: Настройки → Настройки продукта → Пользовательские поля , но правильнее будет это сделать на закладке «Доп. свойства» любого раздела определенного инфоблока, в случае если поле добавляется разделу.

Теперь заполню одно из полей у раздела с >bitrix:catalog.section.list ).

Сначала создадим в корне сайта новую страницу с именем test.php . Разместим на ней компонент bitrix:catalog.section.list и сделаем настройки.

Далее скопируем шаблон компонента в папку нашего шаблона сайта. Назовем новый шаблон “test_fields”. Создадим в папке «нового» шаблона файл result_modifier.php . В нем мы будем «обходить» массив $arResult и добавлять в него данные из пользовательских полей разделов, если они не пустые. В файле будет содержаться следующий код:

Для проверки можно вывести измененный массив с помощью print_r() .

В коде используется функция CAllUserTypeManager::GetUserFields() , она возвращает массив с информацией о значении пользовательского поля.

CAllUserTypeManager::GetUserFields(
string entityID,
int ElemID,
string fieldName)

entityID — имя объекта пользовательского поля;
ElemID — идентификатор элемента (вероятно, ID элемента, свойство которого мы сохраняем или получаем. в нашем случае, это ID комментария);
fieldName — имя пользовательского поля (по умолчанию false);
Функция возвращает массив с информацией о значении пользовательского поля.
Код функции находится в файле — /bitrix/modules/main/classes/general/usertype.php

Теперь, когда значение пользовательского поля находится в массиве $arResult , можно вывести его в шаблоне компонента. Например, я выведу значение элемента массива $arSection[“UF_MY_FIELD”] после названия раздела. Для этого изменим код в шаблоне компонента:

Читайте также:  Где находится будильник в айфоне

И получим результат:

Несмотря на то, что показанный в статье пример не особо полезен, тем не менее, он показывает как можно получить доступ к значению пользовательских полей в шаблоне компонента.

Николай, попробуйте сделать вот так

возможно проблема в том, что шаблон компонента устанавливается вот так

а переменная при выводе будет иметь вид custom-select. А ковычек нет. Возможно в этом глюк?

Николай, я сейчас проверил у себя в проекте.

у меня есть шаблон меню /public_html/bitrix/templates/.default/components/bitrix/menu/bottom

я вызываю компонент

все срабатывает. Проверьте тогда условие.

Возможно тут ошибка и просто не заходит в условие?

Николай, Ну конечно =))) Я так и думал =))) Я сам попадался на эту ловушку =))) Смотри. Что бы всё заработало у тебя в папке /public_html/bitrix/templates/.default/components/bitrix/system.field.edit должно получиться следующее:

/public_html/bitrix/templates/.default/components/bitrix/system.field.edit/*название твоего шаблона*/template.php

все остальные файлы и папки ты должен удалить.

Посмотри на свой скрин. Видешь у тебя все шаблоны лежат в папке templates, а это не правильно. Все эти шаблоны нужно кинуть в system.field.edit. А файлы component.php и script.js, script.map.js и script.min.js нужно удалить.

Если ты хочешь что бы работали только твои шаблоны. Тогда у тебя должно получиться

Рекомендуем к прочтению

Добавить комментарий

Ваш адрес email не будет опубликован.