Возможности системного компонента регистрации довольно скромные: нет возможности добавить свои поля, сделать их обязательными для заполнения. Для реализации таких возможностей есть компонент «Настраиваемая регистрация», который позволяет настроить и разместить на сайте свою форму регистрации. В визуальном редакторе компонент расположен по пути: «Служебные • Пользователь • Настраиваемая регистрация».
Пример вызова компонента
Создадим страницу /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. При установке я выбрал «решение для разработчиков».
Сначала добавлю новое пользовательское поле в раздел инфоблока. Тип поля – строка. В системе поддерживаются различные типы пользовательских полей. Например, целое число, дата/время, файл, список и другие. Для своих опытов я выбрал инфоблок «Новости». В добавленном поле я буду хранить какое-нибудь значение, поле назову « 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 нужно удалить.
Если ты хочешь что бы работали только твои шаблоны. Тогда у тебя должно получиться