[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Классы для быстрого создания форм
glock18
Всем привет.

Давеча решил пустить в общественность свой небольшой вклад. В архиве:

1. два класса для быстрого создания форм.
2. несколько примеров с созданными формами и описанием.

вкратце возможности:
1. определение правил валидации форм в достаточно человекопонятной форме.
2. возможность использования валидации на стороне браузера. для этого необходим плагин jquery.validate.
3. элементы формы и их лэйблы не "склеены вместе". их можно расположить каким угодно образом на странице.
4. создание новой формы - добавление класса, расширяющего класс Form или JsForm. Определение в нем:
  • Список требуемых полей (если эти поля переданы, считается что данные формы были отправлены)
  • Список правил валидации
  • Список правил рендеринга полей (тип поля, текст лэйбла)
5. возможность задания сценариев обработки форм (см. Пример 6 в архиве).
6. возможность фильтрации данныъ перед валидацией и после.
7. использование любого количества форм на одной странице.

наверно, классы еще чего-то умеют, но я этого уже не помню smile.gif
Лицензия у классов RPL, так что использовать их можно как угодно и для чего угодно. Единственное условие - оставить мой копирайт.

Буду рад слышать комментарии по предмету темы.

UPD: перед тем как смотреть примеры. нужно в каждом файле test[1-6].php заменить определение константы WEB_ROOT своим путем из корня хоста ('/' - для корня).



Спустя 12 часов, 57 минут, 7 секунд (30.08.2009 - 10:45) xPoint написал(а):
как мне кажется, если делать генераторы форм, то самое удачное решение - это шаблон Декоратор.
Когда форма выступает в качестве декорируемого объекта и к нему динамично добавляются элементы, например
PHP
$form = new Form();
$form->addElement(new Input($name$width$style$js$value));
$form->addElement(new TextArea($tName,$cols,$rows));
$form->addButton(new SubmitButton($butname$butValue));
$form->setStyle(new MyStyle());
//вывод формы
$form->show();

Спустя 6 минут, 50 секунд (30.08.2009 - 10:52) glock18 написал(а):
Это вариант. Я преследовал, в первую очередь, цель управления валидацией. Плюс, по-моему конфиг достаточно понятен и гибок, чтобы создать большинство форм. Нет работы с ajax правда, но это когда время появится свободное.

Твой вариант я тоже видел много раз. По-моему, единственное его преимущество - возможность менять типы, наборы полей на лету. Зато объем кода для задания обычной формы возрастает.

Как бы то ни было, спасибо за комментарий. На вкус и цвет.. smile.gif

Спустя 44 минуты, 46 секунд (30.08.2009 - 11:37) xPoint написал(а):
Ну валидаторы можно конечно прикрутить и к декоратору. С этим проблем нет.

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

Спустя 34 минуты, 54 секунды (30.08.2009 - 12:12) glock18 написал(а):
xPoint
У нас просто разные взгляды на удобство и простоту smile.gif

Мне вот лень каждый раз писать проверки или объявлять элементы формы отдельно.
С декораторами я наработался, когда имел дело с extjs и phpext. Там очень много на них завязано. Мне они кажутся гораздо менее удобными, чем создавать простейший класс для новой формы. Так в любом месте, где я хочу ее поставить, мне всего то нужно:

PHP
$form = new MessageForm();
    if (
$form->DataPassed() && $form->Validate()) { }



+ вывести форму

Код
<?php echo $form->FormBegin(); ?>
<table>
   <tr>
       <td><?php echo $form->RenderLabel('caption');?></td>
       <td><?php echo $form->RenderInput('caption');?></td>
       <td><?php echo $form->RenderError('caption');?></td>
   </tr>
   <tr>
       <td><?php echo $form->RenderLabel('author');?></td>
       <td><?php echo $form->RenderInput('author');?></td>
       <td><?php echo $form->RenderError('author');?></td>
   </tr>
   <tr>
       <td><?php echo $form->RenderLabel('body');?></td>
       <td><?php echo $form->RenderInput('body', array('rows' => 5, 'cols' => 30));?></td>
       <td><?php echo $form->RenderError('body');?></td>
   </tr>
</table>
<input class="button" type="submit" value="Post" />
<?php echo $form->FormEnd();?>


Очевидный для меня, как программиста знающего css/html, и способного сверстать форму, минус декортаторов в том, что выводят они все предопределенным образом (метод show у тебя).

Все попытки изменить вид вывода приводят к пляскам со стилями и ключевым словом !important. В общем, это достаточно муторно для меня.

Мне проще - одна форма - одна сущность.

Спустя 2 минуты, 18 секунд (30.08.2009 - 12:14) glock18 написал(а):
Цитата
при этом объектами управлять получается намного удобнее, чем писать класс формы для каждого случая.


для меня дальнейшим развитием обоих вариантов было бы их сочетание )) Мне было влом писать для каждого инпута по классу. Еще абстрактный для того, что объединить их... Счел это лишней возней smile.gif В идеале было бы все сделать как раз смесь декоратора и моего подхода - минимум кода, максимум гибкости. я так думаю.

Спустя 28 минут, 39 секунд (30.08.2009 - 12:43) xPoint написал(а):
Цитата
Мне они кажутся гораздо менее удобными, чем создавать простейший класс для новой формы.

ну может быть они не удобны в написании: когда создается вся библиотека, для каждого элемента сложно написать по классу, а то и по нескольку. Но после написания - я не вижу особых неудобств в использовании.

Цитата
что выводят они все предопределенным образом (метод show у тебя).

ты не заметил метод setStyle(), который установит нужные стили - и не нужно никаких плясок

Цитата
Очевидный для меня, как программиста знающего css/html

я вообще-то тоже знаю и css и html, но мне почему-то проще сделать все на классах и абстракциях: один раз написав библиотеку, больше не думать о деталях реализации.

Цитата
В идеале было бы все сделать как раз смесь декоратора и моего подхода - минимум кода, максимум гибкости. я так думаю.

флаг тебе в руки wink.gif

Спустя 16 минут, 47 секунд (30.08.2009 - 12:59) glock18 написал(а):
Сколько людей, столько мнений. smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.