Комментарии

Создание исходного файла РНР для подключаемого модуля
( 0 Голосов )

В листинге ниже приведен исходный код из файла РНР для рассматриваемого здесь подключаемого модуля.

Листинг. Исходный код из файла myregistration2.php

/** Copyright (С) 2012 Mark Dexter and Louis Landry
@license GNU General Public License version 2 or later; see LICENSE.txt */
defined(,JPATH_BASE') or die;
/*
Это класс специального подключаемого модуля регистрации.
В нем проверяется, установил ли пользователь флажки, указывающие
на то, что он согласен с условиями обслуживания и достаточно
взрослый, чтобы пользоваться этим сайтом.
@package Joomla.Plugins
@subpackage User.MyRegistration2
@since 1.0 */
class plgUserMyRegistration2 extends JPlugin
*/
{
/*
Метод для обработки события onContentPrepareForm и внесения изменений в форму регистрации пользователя.
В нем сначала проверяется, является ли подготавливаемая форма той, что выбирается из компонента com_users для регистрации пользователя.
Если это именно такая форма, специальный xml-файл загружается в объект формы для добавления в нее соответствующих полей.
@param JForm $form Изменяемая форма.
@param array $data Данные, связанные с формой.
@return boolean
@since 1.0
*/
public function onContentPrepareForm($form, $data) {
/* если это не регистрационная форма, проигнорировать ее */
/* Усовершенствованный подключаемый модуль для регистрации пользователей */
($form->getName() != 'com_users.registration') { return;
/*
загрузить файл языковой поддержки подключаемого модуля $this->loadLanguage() ;
загрузить специальный xml-файл в форму регистрации пользователя $form->loadFile(dirname(FILE).'/forms/form.xml');
*/

Первая часть приведенного выше исходного кода ничем особенным не отличается от исходного кода рассмотренных ранее подключаемых модулей. Импорт класса JPlugin опирается на автозагрузчик, а далее этот класс расширяется. Получающемуся в итоге классу подключаемого модуля присваивается имя plgUserMyRegistration2 в соответствии с принятыми условными обозначениями.

У данного класса имеется единственный метод onContentPrepareForm (). Событие onContentPrepareForm инициируется в тот момент, когда форма из объекта типа JForm подготовлена, но еще не воспроизведена. Мы можем видоизменить объект типа JForm в рабочей области оперативной памяти, прежде чем воспользоваться им для создания формы. Упомянутому выше методу передаются два аргумента: переменная $f orm, в которой хранится объект типа JForm, а также переменная $data, в которой хранится стандартный объект с любыми данными для заполнения формы.

Затем проверяется, является ли обрабатываемая форма регистрационной. Если она таковой не является, а следовательно, обрабатывается другая форма, происходит возврат из данного метода. С этой целью форма проверяется по ее названию. Если оно не совпадает с именем com_users. registration, происходит возврат из метода без всякой обработки данных.

Итак, мы выяснили, что обрабатываемая форма является регистрационной. Поэтому далее загружается файл языковой поддержки для перевода текста надписей в форме на избранный язык. А вся работа по созданию двух новых полей выполняется в самой последней строке кода. С этой целью вызывается метод loadFile () из класса JForm с файлом form, xml в качестве аргумента. В итоге поля из файла form.xml добавляются в форму, которая уже загружена в рабочую область оперативной памяти из стандартного XML-файла (в данном случае— components/com_users/models/forms/registration. xml). А поскольку оба поля из файла form, xml оказываются новыми для данной формы, т.е. они отличаются своими именами от других полей формы, то они беспрепятственно добавляются в эту форму.

Вот, собственно, и все. Итак, новые поля из файла form. xml добавлены в форму регистрации пользователя, а следовательно, они включаются в общий вывод. Как упоминалось ранее, дополнительный код для проверки факта установки обоих флажков в данной форме не требуется, поскольку в их полях используется атрибут required, предписывающий выполнить такую проверку автоматически средствами класса JForm.


Понравился материал? Пригодилась информация? Плюсани в социалки!


 
Похожие новости