Комментарии

Добавление параметров в подключаемый модуль
( 0 Голосов )

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

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

Поле параметра добавляется в объект класса JForm таким же образом, как это делалось раньше из файла form.xml. Ниже приведен код разметки элемента config, исправленный с учетом добавленного поля параметра.

Этот код подобен коду разметки параметров шаблона, рассматривавшегося ранее в статье сайта. С его помощью варианты выбора вводятся при редактировании данного подключаемого модуля. В этом коде сначала создается элемент разметки fields с атрибутом name, которому присваивается значение "params", а в нем — элементы разметки f ieldset и field с атрибутами, описывающими поле параметра, причем все они вложены в элемент разметки config.

Элемент разметки fields с атрибутом name должен непременно присутствовать в XML-файле, иначе варианты выбора не появятся на экране редактирования подключаемого модуля. Дело в том, что в файле компоновки, используемом для создания формы редактирования подключаемых модулей (administrator/components/comjplugins/views/plugin/tmpl/edit_options.php), осуществляется поиск элемента разметки fields со значением "params" его атрибута name, и при его обнаружении вложенные в него элементы разметки fieldsetn field включаются со всеми своими атрибутами в форму. Если же элемент разметки fields отсутствует в XML-файле, варианты выбора не появятся на экране редактирования подключаемого модуля. Это же относится и к компонентам, модулям и шаблонам. Следует, однако, иметь в виду, что элемент разметки fields раньше был не нужен при создании файла form. xml. А теперь он потребовался нам, поскольку мы добавляем параметры в XML-файл установки для расширения возможностей подключаемого модуля.

В элементе fieldset определяется новое поле типа кнопки-переключателя (radio) с двумя вариантами выбора: Hide (Скрыть) с нулевым значением и Show (Показать) с единичным значением. Обратите внимание на то, что эти варианты выбора обозначаются языковыми ключами JHIDE и JSHOW как отдельные элементы. Подобного рода стандартные языковые ключи повсеместно применяются в Joomla, и поэтому их не нужно вводить в файл языковой поддержки подключаемого модуля. В тех полях, где предоставляется несколько вариантов выбора в виде списка, как, например, в кнопках-переключателях, используются элементы разметки option по одному на каждый элемент списка.

Далее необходимо ввести два новых ключа в файл языковой поддержки. Эти ключи вводятся в основной файл en-GB. plug_user_myregistration2.ini, а не в системный файл (с расширением .sys.ini), поскольку они используются при редактировании отдельного подключаемого модуля в компоненте Plugin Manager. Значение атрибута label должно быть коротким, потому что оно будет использоваться для пометки поля. В то же время значение атрибута description может быть длинным. Оно будет появляться в подсказке, всплывающей при наведении курсора мыши на поле.

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

PLG_USER_MYREGISTRATION2_SHOW_AGE="Show Age  Checkbox" 
PLG_USER_MYREGISTRATI0N2_SH0W_AGE_DESC="Whether to Hide or Show the Show Age check box. If it is shown, will be required."

Выше показаны две символьные строки на избранном языке, отображаемые в форме компонента Plugin Manager. Следует, однако, иметь в виду, что для отображения вокруг текстовых полей сдвоенных знаков звездочки (**), указывающих на правильность перевода текста, необходимо активизировать режим Debug Language по команде Global Configuration ^ System.

И наконец, необходимо внести изменения в исходный код подключаемого модуля, чтобы проверить воздействие на него нового параметра. Ниже приведен исправленный исходный код метода onContentPrepareForm (), где внесенные изменения выделены полужирным.

Единственным нововведением является блок условного оператора i f в конце данного метода. В этом блоке сначала получается новый параметр, который затем используется в качестве логического значения при проверке условия в операторе if. Так, если выбран вариант Show, параметр будет иметь логическое значение true. Но поскольку в операторе if проверяется обратное условие вследствие применения оператора отрицания (!), то строка кода в блоке условного оператора if не будет выполняться, если параметр имеет логическое значение true. Следовательно, при выборе варианта Show вся форма

регистрации пользователя показывается полностью, поскольку кодовый блок условного оператора if пропускается.

Если же выбран вариант Hide, кодовый блок условного оператора if выполняется, как показано ниже.

$form->removeField('old_enough');

В приведенной выше строке кода вызывается метод remove Field () из класса JForm для удаления поля old_enough из формы. И это все, что нужно сделать. После внесения упомянутых выше изменений проверьте, насколько правильно действует новый параметр.

В классе JForm имеются и другие полезные методы, с помощью которых можно видоизменять формы в подключаемом модуле. Допустим, требуется предоставить пользователю возможность сделать поле обязательным или необязательным для заполнения. Так, если требуется сделать поле old_enough необязательным для заполнения, достаточно ввести следующую строку кода:

$form->setFieldAttribute('old_enough', 'reguired', 'false');

Очень важно иметь в виду следующее обстоятельство: используя событие onContent Prepare Form, можно перехватить объект типа JForm еще до отображения формы, а затем добавить, удалить или изменить поля формы методами из класса JForm. Это позволяет настраивать форму под конкретные потребности.


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


Теги:
 
Похожие новости