Создание дополнительных полей для профиля пользователя на сайте фриланс-биржи на Cotonti. Экстраполя.
Очень часто при работе с сайтом на Cotonti возникает задача создания дополнительных полей для заполнения пользователями в своем профиле. Принцип работы с экстраполями.
пример профиля с дополнительными полями (экстраполями)
Допустим, перед нами стоит задача создать поля: Название компании, Адрес, Телефон.
1) Для начала надо уяснить для себя, что в Cotonti данные пользователей хранятся в таблице базы данных, которая называется cot_users (Префикс cot_ может быть другим. например во фриланс-бирже префикс по-умолчанию имеет значение flance_). Чтобы создать экстраполе для этой таблицы, нам нужно перейти в админке в раздел Экстраполя и выбрать нашу таблицу.
2) На странице будет выводиться форма создания экстраполя, а также список уже созданных экстраполей (если они уже были созданы ранее). Итак, чтобы создать экстраполе нам понадобится выбрать для них код и название. Код экстраполя должен состоять только из латинских символов, а название может быть написано на русском.
В нашем случае мы определим значения таким образом:
company - Название компании
addr - Адрес
phone - Телефон
Также для экстраполя можно установить тип поля и другие значения, если например поле будет в виде селекта или другого множественного элемента веб-формы. По-умолчанию тип поля устанавливается в виде простого инпута.
3) После того как мы создали наши экстраполя, нам необходимо разместить их в соответствующих шаблонах пользователя: профиль (users.profile.tpl) и страница пользователя (users.details.tpl).
В профиле пользователь может редактировать свои данные, то есть этот шаблон (users.profile.tpl) содержит форму. Форматы тэгов в ней имеют такой вид: {USERS_PROFILE_НАЗВАНИЕПОЛЯ}
В нашем случае в этот шаблон нужно прописать такие тэги:
Поле "Название компании":
{USERS_PROFILE_COMPANY} - само поле
{USERS_PROFILE_COMPANY_TITLE} - название поля
Поле "Адрес":
{USERS_PROFILE_ADDR} - само поле
{USERS_PROFILE_ADDR_TITLE} - название поля
Поле "Телефон":
{USERS_PROFILE_PHONE} - само поле
{USERS_PROFILE_PHONE_TITLE} - название поля
Аналогичным образом прописываются значения этих полей на странице пользователя для вывода информации, но формат тэгов уже должен быть иным {USERS_DETAILS_НАЗВАНИЕПОЛЯ}:
Поле "Название компании":
{USERS_DETAILS_COMPANY} - значение поля
{USERS_DETAILS_COMPANY_TITLE} - название поля
Поле "Адрес":
{USERS_DETAILS_ADDR} - значение поля
{USERS_DETAILS_ADDR_TITLE} - название поля
Поле "Телефон":
{USERS_DETAILS_PHONE} - значение поля
{USERS_DETAILS_PHONE_TITLE} - название поля
Для шаблона users.edit.tpl:
Поле "Название компании":
{USERS_EDIT_COMPANY} - значение поля
{USERS_EDIT_COMPANY_TITLE} - название поля
Поле "Адрес":
{USERS_EDIT_ADDR} - значение поля
{USERS_EDIT_ADDR_TITLE} - название поля
Поле "Телефон":
{USERS_EDIT_PHONE} - значение поля
{USERS_EDIT_PHONE_TITLE} - название поля
Обратите внимание, для каждого раздела в Cotonti структура тэгов экстраполей имеет разный формат. Чтобы определить этот формат, рекомендуется смотреть шаблоны соответствующих разделов.
Чтобы поле было обязательным только на определенной странице, например в настройках профиля - в экстраполе чекбокс снимаем "обязательное", а HTML-код поля в самом шаблоне .TPL должен включать атрибут required
примерно так в шаблон users.profile.tpl
{USERS_PROFILE_PHONE_CONTACT|cot_rc_modify($this, 'placeholder="Телефон" required="required"')}
или даже вот так
<!-- IF {USERS_PROFILE_PHONE_CONTACT} --> <div> <div class="uk-card uk-card-default uk-padding-small uk-border-rounded"> <label class="uk-form-label">{USERS_PROFILE_PHONE_CONTACT_TITLE}</label> <div class="uk-form-controls"> {USERS_PROFILE_PHONE_CONTACT|cot_rc_modify($this, 'placeholder="Телефон" required="required"')} </div> </div> </div> <!-- ENDIF -->