before
-
Ранее были внесены изменения в файлы.
копируем из
components/com_users/views/registration/tmpl/ в
templates/protostar/html/com_users/registration/ файлыdefault.php и default.xml и меняем им названия, к примеру на approval.php и approval.xml
approval.php
<h1><?php echo JText::_('MY_NEW_REGISTRATION'); ?></h1> // здесь большое количество кода // ..... <div class="form-actions"> <fieldset> <legend><?php echo JText::_('TERMS_OF_SERVICE'); ?></legend> <p><input type="checkbox" /> <?php echo JText::_('AGREE'); ?></p> <?php if ($this->params->get('show_age_checkbox')):?> <p><input type="checkbox" /> <?php echo JText::_('AGE'); ?></p> <?php endif; ?> </fieldset> <button type="submit" class="btn btn-primary validate"><?php echo JText::_('JREGISTER');?></button> <a class="btn" href="/<?php echo JRoute::_('');?>" title="<?php echo JText::_('JCANCEL');?>"><?php echo JText::_('JCANCEL');?></a> <input type="hidden" name="option" value="com_users" /> <input type="hidden" name="task" value="registration.register" /> <?php echo JHtml::_('form.token');?> </div>approval.xml
<?xml version="1.0" encoding="utf-8"?> <metadata> <layout title="MY_NEW_REGISTRATION_TITLE" option="COM_USER_REGISTRATION_VIEW_DEFAULT_OPTION"> <help key="JHELP_MENUS_MENU_ITEM_USER_REGISTRATION" /> <message> <![CDATA[COM_USER_REGISTRATION_VIEW_DEFAULT_DESC]]> </message> </layout> <!--Добавляем поля в объект параметров для компоновки--> <fields name="params"> <!--Основные параметры--> <fieldset name="basic" label="COM_MENUS_BASIC_FIELDSET_LABEL"> <field name="show_age_checkbox" type="radio" label="SHOW_AGE_CHECKBOX" description="SHOW_AGE_CHECKBOX_DESCRIPTION" default="0"> <option value="0">AGE_CHECKBOX_DESCRIPTION_HIDE</option> <option value="1">AGE_CHECKBOX_DESCRIPTION_SHOW</option> </field> </fieldset> </fields> </metadata>
Добавлены языковые замещения
фронт
language/overrides/en-GB.override.ini
MY_NEW_REGISTRATION="Registration form with additional fields" TERMS_OF_SERVICE="Terms of service" AGREE="I agree to the terms of use" AGE="I am at least 18 years old"
language/overrides/ru-RU.override.ini
MY_NEW_REGISTRATION="Регистрационная форма с дополнительными параметрами" TERMS_OF_SERVICE="Условия обслуживания" AGREE="Я согласен с условиями обслуживания" AGE="Мне уже есть 18 лет"
бэкенд
administrator/language/overrides/en-GB.override.ini
MY_NEW_REGISTRATION_TITLE="Registration form with additional fields" SHOW_AGE_CHECKBOX="Show Age Checkbox" SHOW_AGE_CHECKBOX_DESCRIPTION="Show or hide the age checkbox" AGE_CHECKBOX_DESCRIPTION_HIDE="Hide" AGE_CHECKBOX_DESCRIPTION_SHOW="Show"
administrator/language/overrides/ru-RU.override.ini
MY_NEW_REGISTRATION_TITLE="Регистрационная форма с дополнительными параметрами" SHOW_AGE_CHECKBOX="Показывать подтверждение <br/>возраста при регистрации" SHOW_AGE_CHECKBOX_DESCRIPTION="Показывать / скрывать подтверждение возраста при регистрации" AGE_CHECKBOX_DESCRIPTION_HIDE="Скрыть" AGE_CHECKBOX_DESCRIPTION_SHOW="Показать"
Для отправки в суперглобальный массив переменных $_REQUEST методом POST значений полей формы необходимо, чтобы у каждого поля был уникальный атрибут name. Дополним поля флажков данным атрибутом в файле approval.php
<fieldset> <legend><?php echo JText::_('TERMS_OF_SERVICE'); ?></legend> <p><input type="checkbox" name="tos_agree" /> <?php echo JText::_('AGREE'); ?></p> <?php if ($this->params->get('show_age_checkbox')):?> <p><input type="checkbox" name="old_enough" /> <?php echo JText::_('AGE'); ?></p> <?php endif; ?> </fieldset> code
-
Теперь перейдем собственно к созданию самого плагина.
Назовем его myregistration. Создадим для него папку plugins/user/myregistration, в ней файлы myregistration.php и myregistration.xml. Не забываем про заглушку index.html
myregistration.xml
<?xml version="1.0" encoding="utf-8"?> <extension version="3.0" type="plugin" group="user"> <name>plg_user_myregistration</name> <author>Mark Dexter and Louis Landry feat Taatshi</author> <creationDate>March 2012</creationDate> <copyright>(C) 2012 Mark Dexter and Louis Landry</copyright> <license>GNU General Public License version 2 or later; See License.txt</license> <authorEmail>admin//dog//joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>2.5.0</version> <description>PLG_USER_MYREGISTRATION_XML_DESCRIPTION</description> <files> <filename plugin="myregistration">myregistration.php</filename> <filename>index.html</filename> <folder>language</folder> </files> <config> </config> </extension>
myregistration.php
<?php defined('JPATH_BASE') or die; /* для joomla 1.5 был необходим импорт родительского класса для подключаемого плагина * jimport('joomla.plugin.plugin'); */ /*Это специальный класс подключаемого плагина регистрации для проверки установки флажков подтверждения согласия с правилами сервиса и достижения возрастного порога в 18 лет. */ class plgUserMyRegistration extends JPlugin { /*Метод для обработки события OnUserBeforeSave и определения достоверности введенных данных - проверяется, сохраняются ли введенные рег данные нового пользователя и установлены ли флажки подтверждения. * В нем используются * @param array $previousData - сохраняемые в настоящий момент рег данные пользователя * @param boolean $isNew - Истинно, если данные сохраняются * @param array $futureData - Вновь сохраняемые рег данные * @return boolean - Истинно, если требуется продолжить сохранение, ложно - если нужно прекратить процесс * @since 1.0 */ function onUserBeforeSave($previousData, $isNew, $futureData) { // Если рег данные не сохраняются - то есть пользователь не новый // или это не пользовательская часть сайта // проводим сохранение без прерывания процесса if (!$isNew || !JFactory::getApplication()->isSite()){ return true; } // загружаем файл языковой поддержки $this->loadLanguauge(); $result = true; // проверить, установлен ли флажок согласия с условиями обслуживания if (!JRequest::getBool('tos_agree')){ JError::raiseWarning(1000, JText::_('PLG_USER_MYREGISTRATION_TOS_AGREE_REQUIRED')); $result = false; } // проверить установку флажка на подтверждение достижения 18 лет if (!JRequest::getBool('old_enough')) { JError::raiseWarning(1000, JText::_('PLG_USER_MYREGISTRATION_OLD_ENOUGH_REQUIRED')); $result = false; } return $result; } }Имя класса указываем в соответствии с принятыми обозначениями
plgUserMyRegistration
plg (подключаемый плагин), User (пользовательский тип подключаемого плагина), MyRegistration (название плагина). Этот класс расширяет класс JPlugin.
У данного класса имеется один метод, обозначаемый по имени обрабатываемого события - onUserBeforeSave(). Данное событие инициируется при попытке сохранить данные нового пользователя в админке или зарегистрировать его в пользовательской части.
JRequest::getBool() вызывается для получения элемента ввода tos_agree или old_enough из суперглобальной переменной $_REQUEST языка PHP. Возвращает false или true.
JError::raiseWarning() - вывод ошибки. В качестве аргументов указываются: код ошибки и текст ошибки. В данном случае код не используется и может быть любым, а текст выводим из файла языковой поддержки плагина.
lang files
-
Файлы языковой поддержки
Предпочтительно создавать их в папке с плагином.Русскоязычные должны быть в кодировке UTF-8 без BOM - иначе система их не подхватит.
Первые предназначены для всех переменных, которые используются на фронте и для вывода настроек самого плагина
plugins\user\myregistration\language\en-Gb\en-Gb.plg_user_myregistration.ini
plugins\user\myregistration\language\ru-RU\ru-RU.plg_user_myregistration.iniВторые используются для вывода названия плагина в менеджере плагинов и вывода сообщения после установки расширения
plugins\user\myregistration\language\en-Gb\en-Gb.plg_user_myregistration.sys.ini
plugins\user\myregistration\language\ru-RU\ru-RU.plg_user_myregistration.sys.iniСодержание файлов для данного плагина
en-Gb.plg_user_myregistration.ini
PLG_USER_MYREGISTRATION_TOS_AGREE_REQUIRED="You must agree to the terms of service" PLG_USER_MYREGISTRATION_OLD_ENOUGH_REQUIRED="You must be at least 18 years old"
en-Gb.plg_user_myregistration.sys.ini
PLG_USER_MYREGISTRATION="User - My Registration" PLG_USER_MYREGISTRATION_XML_DESCRIPTION="Check that the Terms and Age boxes have been checked"
ru-RU.plg_user_myregistration.ini
PLG_USER_MYREGISTRATION_TOS_AGREE_REQUIRED="Вы должны согласиться с условиями обслуживания" PLG_USER_MYREGISTRATION_OLD_ENOUGH_REQUIRED="Вам должно быть не менее 18 лет"
ru-RU.plg_user_myregistration.sys.ini
PLG_USER_MYREGISTRATION="Юзер - Моя регистрация" PLG_USER_MYREGISTRATION_XML_DESCRIPTION="Проверка на согласие с условиями обслуживания и достижения пользователем возраста 18 лет"
stand-alone
-
Полностью автономная версия плагина.
Используется класс JForm для замещения регистрационной формы перед выводом на форму с допполями и проверки достоверности, что избавляет от необходимости иметь альтернативные пункт меню и шаблон вывода модуля.
Имя нового плагина myregistrationall. Состоит:
forms/form.xml
language/en-Gb/en-Gb.plg_user_myregistrationall.ini
language/en-Gb/en-Gb.plg_user_myregistrationall.sys.ini
language/ru-RU/ru-RU.plg_user_myregistrationall.ini
language/ru-RU/ru-RU.plg_user_myregistrationall.sys.ini
myregistrationall.php
myregistrationall.xmlОсновной myregistrationall.xml файл плагина. В разделе конфигурации установлены поля для отображения в настройках плагина
<?xml version="1.0" encoding="utf-8"?> <extension version="3.0" type="plugin" group="user" methid="upgrade"> <name>plg_user_myregistrationall</name> <author>Mark Dexter and Louis Landry feat Taatshi</author> <creationDate>March 2012</creationDate> <copyright>(C) 2012 Mark Dexter and Louis Landry</copyright> <license>GNU General Public License version 2 or later; See License.txt</license> <authorEmail>admin//dog//joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>2.5.0</version> <description>PLG_USER_MYREGISTRATIONALL_XML_DESCRIPTION</description> <files> <filename plugin="myregistrationall">myregistrationall.php</filename> <filename>index.html</filename> <folder>language</folder> <folder>forms</folder> </files> <config> <fields name="params"> <fieldset name="basic"> <field name="show_age_checkbox" type="radio" label="PLG_USER_MYREGISTRATIONALL_SHOW_AGE" description="PLG_USER_MYREGISTRATIONALL_SHOW_AGE_DESC" default="0" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> </fieldset> </fields> </config> </extension>
form.xml
<?xml version="1.0" encoding="utf-8"?> <form> <fieldset name="tos" label="PLG_USER_MYREGISTRATIONALL_TERMS_OF_SERVICE"> <field name="tos_agree" type="checkbox" default="0" filter="bool" label="PLG_USER_MYREGISTRATIONALL_AGREE" required="true" value="1" /> <field name="old_enough" type="checkbox" default="0" filter="bool" label="PLG_USER_MYREGISTRATIONALL_AGE" required="true" value="1" /> </fieldset> </form>
myregistrationall.php
<?php defined('JPATH_BASE') or die; /* *@package Joomla.Plugins *@subpackage User.Myregistrationall *@since 1.0 */ class plgUserMyRegistrationall extends JPlugin { /* Обработка события onContentPrepareForm и внесение изменений в форму регистрации пользователя. * Проверяем, является ли форма регистрационной, и, если да, xml загружается в объект формы для добавления в нее соответствующих полей. *@param JForm $form Изменяемая форма *@param array $data Данные, связанные с формой *@return boolean *@since 1.0 */ public function onContentPrepareForm($form, $data) { // Если это не регистрационная форма - проигнорировать if ($form->getName()!='com_users.registration') { return; } // Загрузить файл языковой поддержки $this->loadLanguage(); // Загрузить xml-файл в форму регистрации пользователя - обратить внимаение - вокруг FILE идет ДВОЙНОЕ ПОДЧЕРКИВАНИЕ $form->loadFile(dirname(__FILE__).'/forms/form.xml'); // Проверка установки параметра показа чекбокса для проверки возраста в настройках плагина if (!$this->params->get('show_age_checkbox', '1')) { $form->removeField('old_enough'); // Если мы захотим сделать поле подтверждения возраста необязательным, достаточно будет добавть строку: // $form->setFieldAttribute('old_enough', 'requried', 'false'); } } }en-Gb.plg_user_myregistrationall.ini
PLG_USER_MYREGISTRATIONALL_TERMS_OF_SERVICE="Added Fields for Terms of Service Agreement" PLG_USER_MYREGISTRATIONALL_AGREE="I agree to the terms" PLG_USER_MYREGISTRATIONALL_AGE="I am at least 18 years old" PLG_USER_MYREGISTRATIONALL_SHOW_AGE="Show Age Checkbox" PLG_USER_MYREGISTRATIONALL_SHOW_AGE_DESC="Whether to Hide or Show the Show Age Check box. If it is shown, it will be required."
ru-RU.plg_user_myregistrationall.ini
PLG_USER_MYREGISTRATIONALL_TERMS_OF_SERVICE="Согласие с правилами обслуживания" PLG_USER_MYREGISTRATIONALL_AGREE="Я согласен с условиями обслуживания" PLG_USER_MYREGISTRATIONALL_AGE="Мне уже есть 18 лет" PLG_USER_MYREGISTRATIONALL_SHOW_AGE="Подтверждение возраста" PLG_USER_MYREGISTRATIONALL_SHOW_AGE_DESC="Показывать или скрывать чекбокс для подтверждения возраста"
en-Gb.plg_user_myregistrationall.sys.ini
PLG_USER_MYREGISTRATIONALL="User - My Registration - stand-alone" PLG_USER_MYREGISTRATIONALL_XML_DESCRIPTION="Check that the Terms and Age boxes have been checked - stand-alone"
ru-RU.plg_user_myregistrationall.sys.ini
PLG_USER_MYREGISTRATIONALL="Юзер - Моя регистрация - автономка" PLG_USER_MYREGISTRATIONALL_XML_DESCRIPTION="Проверка на согласие с условиями обслуживания и достижения пользователем возраста 18 лет - автономка"