Комментарии

Воспроизведение формы
( 0 Голосов )

На последней стадии рассматриваемого здесь процесса форма воспроизводится в окне браузера. Для этой цели в папке views /weblink/tmpl с файлами компоновки компонента Weblinks имеются файлы edit.php и edit_params.php. В этих файлах форма компонуется с помощью объекта типа JForm. В частности, файл edit.php служит для компоновки основной части формы, тогда как файл edit_params .php, как и следовало ожидать, — для отображения параметров элемента веб-ссылки.

Файл edit.php

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

defined('_JEXEC ) or die;
JHtml::addlncludePath(JPATH__COMPONENT.'/helpers/html');
JHtml::_('behavior.tooltip');
JHtml::_('behavior.formvalidation');
?>

<script type="text/javascript">
Joomla.submitbutton = function(task) { if (task == 'weblink.cancel' | document.formvalidator.isValid(document.id('weblink-form'))) {
<?php echo $this->form->getField('description')->save(); ?> Joomla.submitform(task, document.getElementById('weblink-form')); } else { alert('<?php echo $this->escape; ?> (JText:: ('JGLOBAL VALIDATION FORM FAILED'));?>');
</script>

Как и в компоновку, рассматривавшуюся ранее в этой главе, в данную компоновку включена папка helpers для доступа к специальным методам из класса JHtml. Затем в данную компоновку добавляются два вида поведения: всплывающая подсказка и проверка достоверности формы. В частности, класс JHtmlBehavior содержит методы для вызова функций JavaScript, а метод formvalidation () позволяет запустить сценарий JavaScript для проверки достоверности формы, исходя из атрибутов, установленных в объекте типа JForm.

В следующем кодовом блоке содержится элемент разметки script, в котором вводится сценарий JavaScript, запускаемый для проверки достоверности формы. Более подробно этот код будет обсуждаться в следующей статье сайта. Далее следует приведенный ниже код компоновки, в котором начинается воспроизведение данной формы.

В первой строке приведенного выше фрагмента кода создается элемент form разметки формы в коде HTML с атрибутом action, направляющим по тому же самому URL обратно в исходное место. Здесь же определяется метод отправки для сохранения полей формы в переменной $_REQUEST. Затем создается элемент разметки div, а в нем отображается элемент разметки legend. Если имеется элемент с идентификатором id, то редактируется уже существующая веб-ссылка, в противном случае вводится новая веб-ссылка.

Далее открывается элемент ul разметки неупорядоченного списка. В этом элементе начинается воспроизведение полей формы, каждое из которых отображается в элементе П разметки отдельной позиции в списке. Для каждого поля выводится метка по команде echo, вызывающей метод get Input (), причем обращение к каждому полю осуществляется по его имени. С помощью всего двух строк кода, приходящихся на каждое поле, можно воспроизвести всю форму в любом порядке ее компоновки.

Следует заметить, что для данной компоновки совсем не обязательно знать тип воспроизводимого поля. На рис. 8.3 приведена экранная форма редактирования отдельных веб-ссылок. Заглавие, псевдоним и URL представлены в этой форме полями ввода Title, Alias и URL соответственно и помечены знаком звездочки (*) как данные, обязательные для ввода. А поля категории, состояния, упорядочения и языка представлены раскрывающимися списками Category, Status, Ordering и Language соответственно. В нижней части данной формы, обозначенной меткой Description, представлены кнопки редактора, а также область, в которой пользователь может ввести подробное описание веб-ссылки. Каждое из этих полей объекта типа JForm воспроизводится с помощью тех же самых двух строк кода, в которых вызываются методы getLabel () и getInput ().

В следующей части кода компоновки отображаются так называемые слайдеры, располагаемые в правой части данной формы. Они представляют собой разворачиваемые и сворачиваемые области для показа или сокрытия различных групп полей. В качестве примера ниже приведен код для компоновки области Publishing Options (Параметры публикации) данной формы.

В первой строке приведенного выше фрагмента кода вызывается метод JHtmlSliders::start () для формирования области слайдеров. А в следующей строке вызывается метод JHtmlSliders: :panel () для создания панели со слайдерами. Все поля, размечаемые в элементе fieldset, отображаются в пределах данной панели. Функции слайдеров реализуются средствами JavaScript и MooTools. Но самое замечательное, что все эти функции можно реализовать, вызывая упомянутые выше методы.

Далее создается элемент fieldset для разметки полей, как и прежде. А сами поля воспроизводятся с помощью методов getLabel () и getInput (). Однако для воспроизведения трех последних полей код их разметки помещается в блоке условного оператора if. Но если в этих полях нечего показывать, то они и не отображаются.

После этого в файле компоновки edit. php следует приведенная ниже строка кода.

<?php echo  $this->loadTemplate('params');   ?>

В этой строке кода осуществляется поиск файла компоновки views/weblink/tmpl/editparams.php и затем отображается загружаемая из него компоновка. Открыв этот файл, можно обнаружить следующий фрагмент кода компоновки.

В этом фрагменте кода демонстрируется краткая форма воспроизведения полей из объекта типа JForm. В данном случае все поля воспроизводятся по порядку их следования в неупорядоченном списке. Вместо написания двух строк кода для воспроизведения каждого поля здесь используется циклическое обращение ко всем полям из объекта типа JForm. Для этой цели организуются два цикла. Во внешнем цикле происходит поочередное обращение ко всем элементам разметки fieldsetB массиве, получаемом с помощью метода getFieldSets ('params ') из всех наборов полей объекта типа JForm, сгруппированных под общим названием params. Напомним, что в XML-файле разметки формы, представленной объектом типа JForm, элементы f ieldset можно дополнительно размещать в элементах fields. Так, в файле web link. xml параметры размещаются в элементе разметки fields под названием params. Сначала для каждого набора полей создается панель ползунков с соответствующей меткой и описанием, отображаемым во всплывающей подсказке, а затем открывается элемент разметки f ieldset и вложенные в него элементы разметки ul.

Далее начинается внутренний цикл, где обрабатывается каждое поле. Для получения массива полей данного набора вызывается метод getFieldSet ($name), где $name — атрибут name элемента разметки f ieldset. Затем создается элемент разметки Ни снова по команде echo выводится метка поля и введенное в нем значение. Но в данном случае объект типа JFormField уже содержится в переменной $ field, и поэтому вместо вызова методов getLabel () и getField () из класса JForm используется непосредственное обращение к метке поля $field->label и введенному в нем значению $field->input.

Преимущество организации вложенных друг в друга циклов foreach заключается в том, что в такой код не придется вносить изменения, если потребуется добавить или удалить элементы разметки наборов полей и отдельных полей в XML-файле. Содержимое любых элементов разметки fieldset и field в элементе fields под названием params будет воспроизведено в точном соответствии с их расположением в XML-файле. Таким способом воспроизводятся поля для ввода или выбора параметров модулей, шаблонов, подключаемых модулей и языковых расширений. Аналогичным способом вводятся или выбираются параметры компонентов, только в данном случае каждый элемент разметки f ieldset создает вкладку в режимном окне экранной формы для ввода параметров.

В состав класса JForm входит немало других методов, предназначенных для манипулирования формой. Это дает разработчикам возможность подстраивать форму под отдельных пользователей и разные ситуации.


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


 
Похожие новости
Добавить комментарий


Защитный код