Создание плагина Joomla

10.06.2013

Теги: CMSJoomlaWeb-разработка

Давайте посмотрим, как создать плагин Joomla, изменяющий форму для регистрации нового пользователя. Плагин будет добавлять два дополнительных флажка:

  • Я согласен с условиями пользования
  • Мне уже исполнилось 18 лет

Оба флажка должны быть отмечены, чтобы пользователь смог зарегистрироваться. Кроме того, плагином можно будет управлять из административной части сайта: флажок «Мне уже исполнилось 18 лет» можно будет скрыть или показать.

Форма регистрации с флажками

Используя класс JForm и событие onContentPrepareForm мы замещаем форму регистрации в плагине. Кроме того, используем класс JForm для проверки данных формы.

Создадим три файла и две папки:

  • файл index.html
  • файл myregistration.xml
  • файл myregistration.php
  • папка forms
  • папка language

index.html

<!DOCTYPE html><title></title>

myregistration.xml

<?xml version="1.0" encoding="utf-8"?>
<extension version="2.5" type="plugin" group="user" method="upgrade" >
  <name>plg_user_myregistration</name>
  <author>Vasya Pupkin</author>
  <creationDate>June 2013</creationDate>
  <copyright>(C) 2013 Vasya Pupkin. All rights reserved.</copyright>
  <license>GNU General Public License version 2 or later; see LICENSE.txt</license>
  <authorEmail>pupkin.v@mail.ru</authorEmail>
  <authorUrl>www.pupkin.ru</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>forms</folder>
    <folder>language</folder>
  </files>

  <config>
    <fields name="params">
      <fieldset name="basic" >
        <field name="show_age_checkbox" type="radio" label="PLG_USER_MYREGISTRATION_SHOW_AGE"
          description="PLG_USER_MYREGISTRATION_SHOW_AGE_DESC" default="0">
          <option value="0">JHide</option>
          <option value="1">JShow</option>
        </field>
      </fieldset>
    </fields>
  </config>
</extension>

myregistration.php

<?php
/**
 * @copyright    Copyright (C) 2013 Vasya Pupkin. All rights reserved.
 * @license      GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('JPATH_BASE') or die;

class plgUserMyRegistration extends JPlugin
{
  public function onContentPrepareForm($form, $data)
  {
    // если это не регистрационная форма, проигнорировать ее
    if ($form->getName() != 'com_users.registration') {
      return;
    }

    // загрузить файл языковой поддержки
    $this->loadLanguage();
    
    // загрузить специальный xml-файл в форму регистрации пользователя
    $form->loadFile(dirname(__FILE__).'/forms/form.xml');
    if (!$this->params->def('show_age_checkbox', '1')) {
      $form->removeField('old_enough');
    }
    // $form->setFieldAttribute('old_enough', 'required', 'false');
  }
}

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

Затем проверяется, является ли обрабатываемая форма регистрационной. Если она таковой не является, происходит возврат из метода. Далее загружается файл языковой поддержки для перевода текста надписей в форме на избранный язык.

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

Файл form.xml расположен внутри папки forms.

forms/form.xml

<?xml version="1.0" encoding="utf-8"?>
<form>
  <fieldset name="tos"
    label="PLG_USER_MYREGISTRATION_TERMS_OF_SERVICE"
  >
    <field name="tos_agree" type="checkbox"
      default="0"
      filter="bool"
      label="PLG_USER_MYREGISTRATION_AGREE"
      required="true"
      value="1"
    />
    <field name="old_enough" type="checkbox"
      default="0"
      filter="bool"
      label="PLG_USER_MYREGISTRATION_AGE"
      required="true"
      value="1"
    />
  </fieldset>
</form>

У элементов <field> есть атрибуты:

  • default: устанавливаемое по умолчанию значение, если флажок сброшен;
  • filter: фильтр, используемы для проверки данных, введенных в это поле;
  • label: метка поля
  • required: признак, указывающий классу JForm сделать это поле обязательным для заполнения;
  • value: значение, задаваемое в форме при установке флажка.

Атрибуты label и value являются стандартными для элементов формы. Атрибут filter вынуждает класс JForm отфильтровать поле ввода данных, используя одно из стандартных значений класса JForm. В нашем случае должны отфильтровываться толко логические значения true и false.

Атрибут default определяет значение, передаваемое при условии, что данные не введены (в нашем случае не установлен флажок). В качестве значения по умолчанию указан ноль, который преобразуется в логическое значение false.

Атрибут required указывает классу JForm на то, что поле должно быть заполнено обязательно (в нашем случае установлен флажок). Класс JForm не даст пользователю возможность зарегистрироваться, если он не установол флажок.

Папка language будет содержать две подпапки: en-GB и ru-RU. Внутри папки en-GB два файла:

  • en-GB.plg_user_myregistration.ini
  • en-GB.plg_user_myregistration.sys.ini

Внутри папки ru-RU два файла:

  • ru-RU.plg_user_myregistration.ini
  • ru-RU.plg_user_myregistration.sys.ini

language/en-GB/en-GB.plg_user_myregistration.ini

PLG_USER_MYREGISTRATION_TERMS_OF_SERVICE="Terms of Service Agreement"
PLG_USER_MYREGISTRATION_AGREE="I agree to the terms"
PLG_USER_MYREGISTRATION_AGE="I am at least 18 years old"
PLG_USER_MYREGISTRATION_SHOW_AGE="Show Age Checkbox"
PLG_USER_MYREGISTRATION_SHOW_AGE_DESC="Show or Hide the Show Age checkbox. If it is shown, it will be required."

language/en-GB/en-GB.plg_user_myregistration.sys.ini

PLG_USER_MYREGISTRATION="User - My Registration"
PLG_USER_MYREGISTRATION_XML_DESCRIPTION="Checks that terms and age boxes have been checked"

language/ru-RU/ru-RU.plg_user_myregistration.ini

PLG_USER_MYREGISTRATION_TERMS_OF_SERVICE="Условия пользования сайтом"
PLG_USER_MYREGISTRATION_AGREE="Я согласен с условиями пользования"
PLG_USER_MYREGISTRATION_AGE="Мне уже исполнилось 18 лет"
PLG_USER_MYREGISTRATION_SHOW_AGE="Показывать флажок «Мне уже исполнилось 18 лет»"
PLG_USER_MYREGISTRATION_SHOW_AGE_DESC="Позволяет показывать или скрывать флажок «Мне уже исполнилось 18 лет». Если флажок виден, он обязателен для заполнения."

language/ru-RU/ru-RU.plg_user_myregistration.sys.ini

PLG_USER_MYREGISTRATION="Пользователи - Моя регистрация"
PLG_USER_MYREGISTRATION_XML_DESCRIPTION="Проверяет, чтобы флажки «Я согласен с условиями пользования» и «Мне уже исполнилось 18 лет» были отмечены"]

Теперь нам оставлось только заархивировать все файлы и папки, установить наш плагин штатными средствами Joomla, активировать его и проверить результат.

Настройка формы регистрации

Поиск: CMS • Joomla • Web-разработка

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.