Комментарии

Форма ввода и редактирования подписок
( 0 Голосов )

При воспроизведении формы на экране ее компоновка выбирается из файла views/subscription/tmpl/edit.php. Этот файл содержит сценарий, а не объявление класса. Ниже приведена первая часть исходного кода из этого файла компоновки.

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

// прямой доступ отсутствует 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 == 'subscription.cancel' || document.formvalidator.isValid(document.id('subscription-form'))) { <?php echo $this->form->getField('description')->save(); ?> Joomla.submitform(task, document.getElementByld('subscription-form')); } else { alert('<?php echo $this->escape('JText:: ('JGLOBAL VALIDATION FORM FAILED'));?>'); </script>

Как и в предыдущих примерах применения класса JForm, в данную компоновку добавляются два вида поведения: всплывающая подсказка и проверка достоверности формы. Затем определяется сценарий JavaScript, в котором будет производиться проверка достоверности формы при ее передаче на обработку. Более подробно эти вопросы рассматриваются в прошлой статье нашего сайта.

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

<form action="<?php echo JRoute::_('index.php?option=com_joomprosubs&layout=edit&id='.(int) ->$this->item->id); ?>" method="post"  name="adminForm">id="subscription-form"> <div> <fieldset >
<legend><?php echo empty ($this->item->id) ? JText::_('COM_JOOMPROSUBS_NEW_JOOMPROSUB') : JText::sprintf('COM_JOOMPROSUBS_EDIT_JOOMPROSUB',   $this->item->id); ?></legend>
<ul>
<li><?php echo  $this->form->getLabel ('title'); ?></li>
<li><?php echo  $this->form->getInput('title'); ?></li>
<li><?php echo  $this->form->getLabel ('alias'); ?> <?php  echo  $this->form->getInput('alias');   ?></li>
<li><?php echo  $this->form->getLabel ('catid'); ?> <?php echo  $this->form->getInput('catid');   ?></li>
<li><?php echo  $this->form->getLabel ('group_id'); ?> <?php  echo  $this->form->getInput('group_id');   ?></li>
<li><?php echo  $this->form->getLabel ('duration'); ?> <?php echo  $this->form->getInput('duration');   ?></li>
<li><?php echo  $this->form->getLabel ('published'); ?> <?php echo  $this->form->getInput ('published') ;   ?x/li>
<li><?php echo  $this->form->getLabel ('access'); ?> <?php echo  $this->form->getInput('access');   ?></li>
<li><?php echo  $this->form->getLabel (' id'); ?> <?php  echo  $this->form->getInput('id');?></li>
</ul>
<?php echo  $this->form->getLabel('description'); ?> <div></div>
<?php echo  $this->form->getInput('description'); ?> </fieldset> </div>

В этой части исходного кода из файла компоновки формы ввода и редактирования подписок определяется действие для загрузки формы по тому же самому URL, что и прежде, с идентификатором текущего элемента. Затем метод отправки формы, а также имя, идентификатор и класс определяются в соответствующих атрибутах элемента разметки form. Далее первые семь полей формы, размеченные элементами form в коде HTML, выводятся на экран в виде неупорядоченного списка. И в каждом случае из XML-файла разметки формы извлекается метка поля и выводится на экран. Эти поля отображаются в левой части формы.

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

<div>
<?php echo JHtml::_('sliders.start', 'joomprosubs-sliders-'. **>$this->item->id,   array ('useCookie' =>1));   ?>
<?php echo JHtml::_('sliders.panel',JText::_( <*>'JGLOBAL_FIELDSET_PUBLISHING') , 'publishing-details ') ;   ?>
<fieldset> <ul>
<lix?php echo  $this->form->getLabel (' created_by'); ?> <?php echo  $this->form->getInput('created_by'); ?></li>
<lix?php echo  $this->form->getLabel ('created_by_alias'); ?> <?php echo  $this->form->getInput ('created_by_alias ') ; ?></li>
<lix?php echo  $this->form->getLabel ('created'); ?> <?php echo  $this->form->getInput ('created'); ?x/li>
<lix?php echo  $this->form->getLabel('publish_up'); ?> <?php echo  $this->form->getInput('publish_up'); ?></li>
<lix?php echo  $this->form->getLabel('publish_down'); ?> <?php echo  $this->form->getInput('publish_down');   ?></li>
<?php if   ($this->item->modified_by) : ?>
<lix?php echo  $this->form->getLabel ('modified_by') ; ?> <?php echo  $this->form->getInput(*modified_by'); ?></li>
<lix?php echo  $this->form->getLabel ('modified') ; ?> <?php echo  $this->form->getInput('modified'); ?></li> <?php endif;   ?>
</ul>
</fieldset>
<?php echo JHtml::_('sliders.end'); ?>
<input type="hidden" name="task" value="" /> <?php echo JHtml::_('form.token'); ?> </div>
<div></div> </form>

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

А теперь рассмотрим XML-файл models/forms/subscription.xml, из которого выбиралась разметка полей рассматриваемой здесь формы. Ниже приведена первая часть этого файла.

<?xml version="1.0" encoding="utf-8" <form>
<fieldset>
<field name="id" type="text" default="0" label="JGLOBAL_FIELD_ID_LABEL" readonly="true" description='JGLOBAL_FIELD_ID_DESC"/>
<field name="title" type="text" size="40" label="JGLOBAL_TITLE" description="COM_JOOMPROSUBS_FIELD_TITLE_DESC" required="true" />
<field name="alias" type="text" size="40" label="JFIELD_ALIAS_LABEL" description=''COM_JOOMPROSUBS_FIELD_ALIAS_DESC" />
<field name="catid" type="category" extension="com_joomprosubs" label="JCATEGORY" description="COM_JOOMPROSUBS_FIELD_CATEGORY_DESC" class="inputbox" > </field>
<field name="group_id" type="usergroup" label="COM_JOOMPROSUBS_FIELD_USERGROUP_LABEL" description="COM_JOOMPROSUBS_FIELD_USERGROUP_DESC" default="0" size="1" > </field>
<field name="duration" type="integer" filter="integer" first="15" last="90" step="15" default="30" label="COM_JOOMPROSUBS_FIELD_DURATION_LABEL" description="COM_JOOMPROSUBS_FIELD_DURATION_DESC" />
<field name="description" type="editor" buttons="true" hide="pagebreak,readmore" filter="safehtml" label="JGLOBAL_DESCRIPTION" description="COM JOOMPROSUBS FIELD DESCRIPTION DESC" />

В этой части рассматриваемого здесь XML-файла определяются первые семь полей формы ввода и редактирования подписок. В качестве типа для поля идентификатора категории (catid) устанавливается категория (type=" category"), а в качестве расширения указывается имя создаваемого компонента (extension="com_joomprosubs"). Это позволяет сформировать раскрывающийся список из категорий подписок. Аналогичным образом в качестве типа для поля идентификатора группы (groupid) указывается группа пользователей (type="usergroup").

Для поля срока действия подписки (duration) указывается целочисленный (integer) тип и фильтр. Такой тип данного поля позволяет указывать верхний и нижний пределы, а также шаг приращения. В данном случае срок действия подписки начинается с 15 дней и постепенно увеличивается до 90 дней с приращением в 15 дней. А целочисленный фильтр этого поля означает, что даже если злоумышленнику и удастся ввести какие-нибудь другие данные в форму, минуя раскрывающийся список, то эти данные все равно будут преобразованы в целочисленные при сохранении в таблице.

И наконец, для поля описания (description) в качестве типа указан редактор (editor). Это означает, что для редактирования данных в этом поле будет использоваться редактор, выбираемый пользователем по умолчанию. В качестве фильтра для этого поля указывается безопасная разметка (safehtml), чтобы отфильтровать введенные пользователем данные и безопасно воспроизвести их на HTML-странице.

Ниже приведена последняя часть рассматриваемого здесь XML-файла.

<field name="published" type="list" label="JSTATUS" description="COM_JOOMPROSUBS_FIELD_STATE_DESC" class="inputbox" size="1" default="1">
<option value="1">JPUBLISHED</option>
<option value="0">JUNPUBLISHED</option>
<option value="-2">JTRASHED</option>
</field>
<field name="access" type="accesslevel" label="JFIELD_ACCESS__LABEL" description='JFIELD_ACCESS_DESC" size="1" />
<field name="created" type="calendar" label="JGLOBAL_FIELD_CREATED_LABEL" description=JGLOBAL_FIELD_CREATED_DESC" class="inputbox" size="22" format="%Y-%m-%d %H:%M:%S" filter="user_utc" />
<field name="created_by" type="user" label="JGLOBAL_FIELD_CREATED_BY_LABEL" description="JGLOBAL_FIELD_CREATED_BY_Desc" />
<field name="created_by_alias" type="text" label="JGLOBAL_FIELD_CREATED_BY_ALIAS_LABEL" description="JGLOBAL_FIELD_CREATED_BY_ALIAS_DESC" class="inputbox" size="20" />
<field name="modified" type="calendar" label="JGLOBAL_FIELD_MODIFIED_LABEL" description="COM_JOOMPROSUBS_FIELD_MODIFIED_DESC" size="22" readonly="true" format="%Y-%m-%d %H:%M:%S" filter="user_utc" />
<field name="modified_by" type="user" label="JGLOBAL_FIELD_MODIFIED_BY_LABEL" class="readonly" readonly="true" filter="unset" />
<field name="checked_out" type="hidden" filter="unset" />
<field name="checked_out_time" type="hidden" filter="unset" />
<field name="publish_up" type="calendar" label="JGLOBAL_FIELD_PUBLISH_UP_LABEL" description="JGLOBAL_FIELD_PUBLISH_UP_DESC" class="inputbox" format="%Y-%m-%d %H:%M:%S" size="22" filter="user_utc" />
<field name="publish_down" type="calendar" label="JGLOBAL_FIELD_PUBLISH_DOWN_LABEL" description="JGLOBAL_FIELD_PUBLISH_DOWN_DESC" class="inputbox" format="%Y-%m-%d %H:%M:%S" size="22" filter="user_utc" />
</fieldset>
</form>

В этой части рассматриваемого здесь XML-файла определяются последние семь полей формы ввода и редактирования подписок. Обратите внимание на то, что в качестве типа для полей дат указывается календарь (calendar), чтобы предоставить доступ к всплывающей панели с календарем. Здесь также вводятся в форму два скрытых поля для хранения признака снятия с регистрации (checked_out) и времени снятия с регистрации (checked_out_time). Ввести данные в эти поля нельзя непосредственно в форме, поскольку в их атрибуте filter установлено значение "unset". Эти поля специально сделаны недоступными в форме, чтобы злоумышленник не смог ввести в них злонамеренные данные.


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


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


Защитный код