Дополнительные поля в форме регистрации Joomla 3
Недавно у моего клиента возникла потребность в распечатки купонов после регистрации пользователя на сайте. Для того чтобы на купоне отображались данные пользователя понадобилось создать новые поля в форме регистрации. Сайт привязан к движку Джумла поэтому речь пойдёт именно об этой системе управления контентом.
Компонент регистрации пользователей по умолчанию предлагает очень мало полей, а дополнительный модуль "Профиль" предоставляет совсем ни те поля. Конечно можно из этих полей создать все необходимые, но я решил пойти немножко другим способом.
В форму регистрации нужно было добавить следующие поля:
1. Название организации
2. Фамилия
3. Отчество
4. Телефон
Прежде чем начать работу с файлами, рекомендую сделать бекап, и конечно соединиться по протоколу FTP, или править файлы с помощью файл-менеджера панели вашего хостера.
Добавляем поля в форму регистрации.
В движке Джумла, в качестве конструктора форм служат XML файлы, именно в них находятся все поля, будь это профиль, форма авторизации, или регистрации.
Данные файлы находятся по адресу /public_html/components/com_users/models/forms/. В этой папке лежат такие файлы как:
В файл registration.xml будем добавлять 4 новых поля. Обратите внимание, что каждое поле это конструкция вида:
<field name="org" type="text"
description="COM_USERS_PROFILE_NAME_DESC"
filter="string"
label="COM_USERS_REGISTER_ORG_LABEL"
required="true"
size="30"
/>
Что означают каждые атрибуты тега field?
name - имя ячейки в таблице базы данных а так же пост имя
description - не обязательное поле
filter - оставляем string если это текстовое значение и int если это число
label - Название,выводимое рядом с полем. В моём случае используется константа, прописанный в файле RU локализации
required - проверка поля. trrue - обязательно для заполнения, false не обязательно
А теперь добавим все 4 поля в файл registration.xml
<field name="org" type="text"
description="COM_USERS_PROFILE_NAME_DESC"
filter="string"
label="COM_USERS_REGISTER_ORG_LABEL"
required="true"
size="30"
/>
<field name="family" type="text"
description="Family"
filter="string"
label="COM_USERS_REGISTER_FAMILY_LABEL"
required="false"
size="30"
/>
<field name="otch" type="text"
description="Otch"
filter="string"
label="COM_USERS_REGISTER_OTCH_LABEL"
required="false"
size="30"
/>
<field name="tel" type="text"
description="Tel"
filter="int"
label="COM_USERS_REGISTER_TEL_LABEL"
required="true"
size="30"
/>
Если строчки добавлены правильно, в форме регистрации появятся новые поля.

Добавляем поля в форму профиля.
В файл profile.xml добавляем те же самые строки,что и в файл registration.xml
В итоге в форме профиля пользователя будут добавлены новые поля как на картинке.

Добавляем поля в админ панель
По ftp или другим возможным способом заходим по адресу /public_html/administrator/components/com_users/models/forms/users.xml. Как соедниться по ftp и редактировать файлы читайте в отдельной статье.
Добавляем текст в файл локализации
Если сайт использует кодировку Windows 1251 можно просто прописать Русские названия полей в XML файл атрибута label, иначе придётся создать новые константы.Русский файл локалицзации отвечающий за компонент "Пользователей " находится в папке /public_html/language/ru-RU/ru-RU.com_users.ini. В самый верх добавляем следующие константы:
COM_USERS_REGISTER_ORG_LABEL="Название организации";
COM_USERS_REGISTER_FAMILY_LABEL="Фамилия";
COM_USERS_REGISTER_OTCH_LABEL="Отчество";
COM_USERS_REGISTER_TEL_LABEL="Телефон";
Ещё раз напомню если у вас кодировка сайта отличная от UTF-8, вместо квказябриков пишем Русские имена (Название Организации, Фамилия, Отчество, Телефон).Обратите внимание эти константы прописаны в xml файле атрибута label:
<field name="tel" label="COM_USERS_REGISTER_TEL_LABEL" required="true"size="30" />
Почему не сохраняются данные доп.полей в базе данных?
Теперь пришло время создать те самые поля в базе данных. Для этой цели можно воспользоваться phpmyadmin, и выполнить sql запрос в таблице пользоватлей lkmtp_users. Доступ к phpmyadmin можно спросить у вашего хостера.

lkmtp - префикс таблиц в базе данных, в вашем случае он будет другой, поменяйте в запросе `lkmtp_users` на `префикс ваших таблиц_users`. А затем в разделе sql вставлем скопированный ниже код и выполняем его.
ALTER TABLE `lkmtp_users` ADD `org` VARCHAR(255) NOT NULL, ADD `family` VARCHAR(255) NOT NULL, ADD `otch` VARCHAR(255) NOT NULL, ADD `tel` VARCHAR(255) NOT NULL;

Данный sql запрос добавляет в таблицу 4 новых поля, в которых будут храниться данные дополнительных полей зарегистрированного пользователя. Если нет достпа к phpmyadmin, можно выполнить запрос с помощью php, для этого нужно открыть файл index.php , и добавить следующий код в самый низ файла:
<?php
$query="ALTER TABLE `lkmtp_users` ADD `org` VARCHAR(255) NOT NULL, ADD `family` VARCHAR(255) NOT NULL, ADD `otch` VARCHAR(255) NOT NULL, ADD `tel` VARCHAR(255) NOT NULL";
$db =JFactory::getDBO();
if($db->setQuery($query)) echo 'ok'; else echo 'error';
?>

Если скрипт выполнен успешно на экране появится соответствующее сообщение, или ошибка 1060 Duplicate column, которая говорит о том, что в базе данных уже есть соответствующие ячейки. Значит код можно закомментировать, либо удалить из индексного файла.

Существует множество плагинов которые повзоляют сделать подобные веши, но каждому своё, и я пошёл наверно самым сложным путём. Если кому-то интересно как сделать после регистрации купон с надписью регистрационных данных, обращайтесь, буду дописывать статью, ну а купон выглядит следующим образом.
Компонент регистрации пользователей по умолчанию предлагает очень мало полей, а дополнительный модуль "Профиль" предоставляет совсем ни те поля. Конечно можно из этих полей создать все необходимые, но я решил пойти немножко другим способом.
В форму регистрации нужно было добавить следующие поля:
1. Название организации
2. Фамилия
3. Отчество
4. Телефон
Прежде чем начать работу с файлами, рекомендую сделать бекап, и конечно соединиться по протоколу FTP, или править файлы с помощью файл-менеджера панели вашего хостера.
Добавляем поля в форму регистрации.
В движке Джумла, в качестве конструктора форм служат XML файлы, именно в них находятся все поля, будь это профиль, форма авторизации, или регистрации.
Данные файлы находятся по адресу /public_html/components/com_users/models/forms/. В этой папке лежат такие файлы как:
- registration.xml отвечающий за поля в форме регистрации
- profile.xml отвечающий за поля в профиле пользователя
- Другие XML файлы
В файл registration.xml будем добавлять 4 новых поля. Обратите внимание, что каждое поле это конструкция вида:
<field name="org" type="text"
description="COM_USERS_PROFILE_NAME_DESC"
filter="string"
label="COM_USERS_REGISTER_ORG_LABEL"
required="true"
size="30"
/>
Что означают каждые атрибуты тега field?
name - имя ячейки в таблице базы данных а так же пост имя
description - не обязательное поле
filter - оставляем string если это текстовое значение и int если это число
label - Название,выводимое рядом с полем. В моём случае используется константа, прописанный в файле RU локализации
required - проверка поля. trrue - обязательно для заполнения, false не обязательно
А теперь добавим все 4 поля в файл registration.xml
<field name="org" type="text"
description="COM_USERS_PROFILE_NAME_DESC"
filter="string"
label="COM_USERS_REGISTER_ORG_LABEL"
required="true"
size="30"
/>
<field name="family" type="text"
description="Family"
filter="string"
label="COM_USERS_REGISTER_FAMILY_LABEL"
required="false"
size="30"
/>
<field name="otch" type="text"
description="Otch"
filter="string"
label="COM_USERS_REGISTER_OTCH_LABEL"
required="false"
size="30"
/>
<field name="tel" type="text"
description="Tel"
filter="int"
label="COM_USERS_REGISTER_TEL_LABEL"
required="true"
size="30"
/>
Если строчки добавлены правильно, в форме регистрации появятся новые поля.

Добавляем поля в форму профиля.
В файл profile.xml добавляем те же самые строки,что и в файл registration.xml
В итоге в форме профиля пользователя будут добавлены новые поля как на картинке.

Добавляем поля в админ панель
По ftp или другим возможным способом заходим по адресу /public_html/administrator/components/com_users/models/forms/users.xml. Как соедниться по ftp и редактировать файлы читайте в отдельной статье.
Добавляем текст в файл локализации
Если сайт использует кодировку Windows 1251 можно просто прописать Русские названия полей в XML файл атрибута label, иначе придётся создать новые константы.Русский файл локалицзации отвечающий за компонент "Пользователей " находится в папке /public_html/language/ru-RU/ru-RU.com_users.ini. В самый верх добавляем следующие константы:
COM_USERS_REGISTER_ORG_LABEL="Название организации";
COM_USERS_REGISTER_FAMILY_LABEL="Фамилия";
COM_USERS_REGISTER_OTCH_LABEL="Отчество";
COM_USERS_REGISTER_TEL_LABEL="Телефон";
Ещё раз напомню если у вас кодировка сайта отличная от UTF-8, вместо квказябриков пишем Русские имена (Название Организации, Фамилия, Отчество, Телефон).Обратите внимание эти константы прописаны в xml файле атрибута label:
<field name="tel" label="COM_USERS_REGISTER_TEL_LABEL" required="true"size="30" />
Почему не сохраняются данные доп.полей в базе данных?
Теперь пришло время создать те самые поля в базе данных. Для этой цели можно воспользоваться phpmyadmin, и выполнить sql запрос в таблице пользоватлей lkmtp_users. Доступ к phpmyadmin можно спросить у вашего хостера.

lkmtp - префикс таблиц в базе данных, в вашем случае он будет другой, поменяйте в запросе `lkmtp_users` на `префикс ваших таблиц_users`. А затем в разделе sql вставлем скопированный ниже код и выполняем его.
ALTER TABLE `lkmtp_users` ADD `org` VARCHAR(255) NOT NULL, ADD `family` VARCHAR(255) NOT NULL, ADD `otch` VARCHAR(255) NOT NULL, ADD `tel` VARCHAR(255) NOT NULL;

Данный sql запрос добавляет в таблицу 4 новых поля, в которых будут храниться данные дополнительных полей зарегистрированного пользователя. Если нет достпа к phpmyadmin, можно выполнить запрос с помощью php, для этого нужно открыть файл index.php , и добавить следующий код в самый низ файла:
<?php
$query="ALTER TABLE `lkmtp_users` ADD `org` VARCHAR(255) NOT NULL, ADD `family` VARCHAR(255) NOT NULL, ADD `otch` VARCHAR(255) NOT NULL, ADD `tel` VARCHAR(255) NOT NULL";
$db =JFactory::getDBO();
if($db->setQuery($query)) echo 'ok'; else echo 'error';
?>

Если скрипт выполнен успешно на экране появится соответствующее сообщение, или ошибка 1060 Duplicate column, которая говорит о том, что в базе данных уже есть соответствующие ячейки. Значит код можно закомментировать, либо удалить из индексного файла.

Существует множество плагинов которые повзоляют сделать подобные веши, но каждому своё, и я пошёл наверно самым сложным путём. Если кому-то интересно как сделать после регистрации купон с надписью регистрационных данных, обращайтесь, буду дописывать статью, ну а купон выглядит следующим образом.
Тебе нравится?