Комментарии

Видоизменение форм в динамическом режиме
( 0 Голосов )

Итак, объект типа JForm загружен в оперативную память с помощью метода getFormO из класса WeblinksModelWeblink. А теперь рассмотрим пример того, как можно видоизменить форму в самом коде перед ее отображением. В остальной части исходного кода метода getForm () из класса WeblinksModelWeblink можно обнаружить целый ряд вызовов метода $form->setFieldAttribute (), в том числе и в приведенных ниже строках кода.

//  видоизменить форму, опираясь на средства контроля доступа
(!$this->canEditState((object) $data))    {

// сделать  поля  недоступными для  отображения
$form->setFieldAttribute('ordering', 'disabled', 'true'); $form->setFieldAttribute('state', 'disabled', 'true'); $form->setFieldAttribute('publish_up', 'disabled', 'true'); $form->setFieldAttribute('publish_down', 'disabled', 'true'); // сделать  поля  недоступными при сохранении
//В контроллере уже  проверено, что эту запись  можно править. $form->setFieldAttribute('ordering', 'filter', 'unset'); $form->setFieldAttribute('state', 'filter', 'unset'); $form->setFieldAttribute('publish_up', 'filter', 'unset'); $form->setFieldAttribute('publish_down', 'filter', 'unset'); }

Метод setFieldAttribute () относится к числу самых эффективных методов, предназначенных для видоизменения формы в динамическом режиме.

В приведенном выше фрагменте кода проверяется, разрешено ли пользователю редактировать элемент веб-ссылки, но не изменять его состояние. Изменение состояния элемента означает смену его состояния "опубликовано'* а также видоизменение другой информации, связанной с публикацией данного элемента. В данном случае поля формы должны по-прежнему отображаться, но быть недоступными для пользователя. Так, если пользователю запрещено изменять состояние данного элемента, поля формы следует сделать недоступными, установив логическое значение true в атрибуте disabled разметки этих полей. И при отображении формы эти поля окажутся недоступными для редактирования. Таким образом, значения этих атрибутов, установленные в XML-файле разметки данной формы, переопределяются динамически.

Вторая часть рассматриваемого здесь фрагмента кода имеет отношение к сохранению информации в базе данных. Как следует из приведенных выше примеров, организуя защиту данных, нельзя полагаться на HTML-формы. Ведь злоумышленник может легко отредактировать форму, сделав, например, недоступное поле доступным для редактирования. Поэтому в классе JForm имеется метод фильтрации, вызываемый при установке атрибута filter. В данном случае в этом атрибуте устанавливается значение "unset", что, в свою очередь, приводит к установке пустого значения в данном поле формы. Таким образом, в данном поле используется текущее значение (для существующего элемента веб-ссылки) или устанавливаемое по умолчанию значение.

Подобным способом можно очень просто настраивать формы динамически перед их отображением, а затем и в процессе сохранения. Как упоминалось ранее, такой же способ можно применять и в специальном расширении подключаемого модуля для динамического видоизменения основных форм, используя для этой цели событие onContentPrepareForm.


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


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