Дополнительные поля в форме регистрации Joomla 3

Недавно у моего клиента возникла потребность в распечатки купонов после регистрации пользователя на сайте. Для того чтобы на купоне отображались данные пользователя понадобилось создать новые поля в форме регистрации. Сайт привязан к движку Джумла поэтому речь пойдёт именно об этой системе управления контентом.

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

В форму регистрации нужно было добавить следующие поля:

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, которая говорит о том, что в базе данных уже есть соответствующие ячейки. Значит код можно закомментировать, либо удалить из индексного файла.




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

Тебе нравится?

Похожие вопросы