ФорумПрограммированиеПыхнуть хотите?Готовые решения → Генератор/валидатор формSForms 0.01 beta

Генератор/валидатор формSForms 0.01 beta

  • soul

    Сообщения: 790 Репутация: N Группа: Кто попало

    Spritz 10 февраля 2010 г. 10:54, спустя 8 минут 14 секунд

    Сделал фреймворк валидации/генерации форм для активного юзания в своих проектах.

    Состоит из 3х классов, основной, валидации и построения форм. Жду от вас критики и предложений, как пользоваться классом читать ниже:

    index.php - пример формы с описанием основных элементов, там подробно посмотрите, пример -


    require_once 'SForms/SForm.php';

    $form = new SForm;

    //устанавливаем метод передачи, по умолчанию GET
    $form->set_form_method('post');

    $form->set_form_caption('<h1>Регистрация</h1>');

    $form->addfield(array('name' => 'login',
                                 'caption' => 'Логин',
                                 'pattern' => 'text',
                                 'maxlength' => '32',
                                 'size' => '13',
                                 'css_class' => 'caption',
                                 'is_required' => true)
                       );

    /**
    *  Этот паттерн выводит сразу 2 текстовых поля, которые проверяются
    *  на "равность". можно задать тип показа полей - пароль или обычный текст.
    *  скоро добавлю тип - мыло
    */
    $form->addfield(array('name1' => 'pass1',
                         'name2' => 'pass2',
                         'caption1' => 'Пароль',
                         'caption2' => 'Еще раз',
                         'pattern' => 'confirm',
                         'maxlength' => '30',
                         'type' => 'password',
                         'css_class' => 'caption',
                         'is_required' => true)
                   );

    $form->addfield(array('name' => 'submit',
                         'caption' => 'Послать',
                         'pattern' => 'submit')
                     );

    if ($form->validate($_POST['submit'])) {
       echo 'Форма валидна';
    }

    //строим и выводим форму
    $form->build_Form();


    вот так. пытался сделать упор на простоту, скорость. может получилось и не так просто, но всё же.
    описание всех паттернов в index.php в аттаче.
    жду критики :)
    заодно хочу отправить фреймворк на конкурс валидаторов.

    Скачать: http://bloodtar.ru/SForms_Framework.zip
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 10 февраля 2010 г. 8:28, спустя 21 час 34 минуты 33 секунды

    эх, опередил dudeforms :D
    Сапожник без сапог
  • soul

    Сообщения: 790 Репутация: N Группа: Кто попало

    Spritz 10 февраля 2010 г. 8:37, спустя 8 минут 50 секунд


    эх, опередил dudeforms :D

    зато у тебя название круче))
    главное не кто первей, а кто качественнее))
  • md5

    Сообщения: 11948 Репутация: N Группа: в ухо

    Spritz 10 февраля 2010 г. 8:41, спустя 4 минуты 18 секунд

    это гут, посмотрю завтра
    все умрут, а я изумруд
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 10 февраля 2010 г. 8:46, спустя 4 минуты 14 секунд

    ололо кросавчег

    если бы не приходилось столько атрибутов задавать, было бы лучше. придумай как туда дефолтные значения для типичных случаев забубенить.
    пусть будет 10 вариантов предопределённых полей… addPasswordField(), addSubmitField() или addField(X::TPL_PASSWORD, 'ololopassword')
    меняем только то, что отличается
    ιιlllιlllι унц-унц
  • soul

    Сообщения: 790 Репутация: N Группа: Кто попало

    Spritz 10 февраля 2010 г. 8:51, спустя 4 минуты 57 секунд

    атрибуты не обязательны совсем, есть дефолтные :)
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 10 февраля 2010 г. 8:52, спустя 1 минуту 28 секунд

    ну тогда мегакросавчег
    ιιlllιlllι унц-унц
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 10 февраля 2010 г. 9:49, спустя 56 минут 34 секунды

    Мне не нравиться. Мне нравиться Django, ибо я создаю модель, а уже на ее базе генерирую формы.
    Поэтому нету как таковых филдов для сборки формы….

    Что касается темы:

    1.
    устанавливаем метод передачи, по умолчанию GET

    Нафига, если 90% - всегда post?

    2.

    $form->set_form_method('post');
    $form->set_form_caption('<h1>Регистрация</h1>');

    Это может сразу в конструктор?
    adw/0
  • soul

    Сообщения: 790 Репутация: N Группа: Кто попало

    Spritz 10 февраля 2010 г. 9:56, спустя 7 минут 46 секунд


    Мне не нравиться. Мне нравиться Django, ибо я создаю модель, а уже на ее базе генерирую формы.
    Поэтому нету как таковых филдов для сборки формы….

    Что касается темы:

    1.
    устанавливаем метод передачи, по умолчанию GET

    Нафига, если 90% - всегда post?

    2.

    $form->set_form_method('post');
    $form->set_form_caption('<h1>Регистрация</h1>');

    Это может сразу в конструктор?


    1. Хорошо, учту.
    2. Почему бы и нет, сделаю)
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 10 февраля 2010 г. 10:35, спустя 39 минут 6 секунд

    Мне нравиться Django, ибо я создаю модель, а уже на ее базе генерирую формы.

    а как ты поступаешь в том случае когда у тебя есть какието кастомные филды, которые к модели не относятся ?
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 10 февраля 2010 г. 11:02, спустя 26 минут 53 секунды

    NRG, вот тогда и добавляю, а которые не нужны - добавляю в exclude
    Спустя 292 сек.

    class ShopForm(forms.ModelForm):
       
       def __init__(self, *args, **kwargs):
           super(ShopForm, self).__init__(*args, **kwargs)
           self.fields['rsa_public_key'].widget.attrs['readonly'] = True
           self.fields['rsa_private_key'].widget.attrs['readonly'] = True
           self.fields['rsa_modulo'].widget.attrs['readonly'] = True

       custom_field = forms.CharField(max_length=50)

       class Meta:
           model = Shop
           exclude = ('partner', 'commit_datetime')



    class Shop(models.Model):
       domain = models.CharField(max_length=50)
       ip = models.IPAddressField()  
       rsa_public_key = models.CharField(max_length=50)
       rsa_private_key = models.CharField(max_length=50)
       rsa_modulo = models.CharField(max_length=50)
       partner = models.ForeignKey(Partner)
       commit_datetime = models.DateTimeField(auto_now_add=True)
       
    adw/0
  • soul

    Сообщения: 790 Репутация: N Группа: Кто попало

    Spritz 10 февраля 2010 г. 10:45, спустя 23 часа 43 минуты 7 секунд

    в аттаче не работающий код

    поправленный + основной метод post + название формы в конструкторе по ссылке
    http://bloodtar.ru/SForms_Framework.zip
  • md5

    Сообщения: 11948 Репутация: N Группа: в ухо

    Spritz 10 февраля 2010 г. 10:54, спустя 8 минут 49 секунд


    в аттаче не работающий код

    поправленный + основной метод post + название формы в конструкторе по ссылке
    http://bloodtar.ru/SForms_Framework.zip
    поправил
    все умрут, а я изумруд
  • soul

    Сообщения: 790 Репутация: N Группа: Кто попало

    Spritz 10 февраля 2010 г. 10:57, спустя 3 минуты 12 секунд



    в аттаче не работающий код

    поправленный + основной метод post + название формы в конструкторе по ссылке
    http://bloodtar.ru/SForms_Framework.zip
    поправил


    спасибо, надеюсь хоть этот рабочий))))))))
  • soul

    Сообщения: 790 Репутация: N Группа: Кто попало

    Spritz 11 февраля 2010 г. 18:53, спустя 1 день 7 часов 55 минут

    Версия 0.02 бета
    Скачать: http://bloodtar.ru/SForms_Framework.zip

    0. Протестено каждое из полей формы
    1. Основным методом передачи стал post
    2. Название формы передается через конструктор
    3. Исправлены найденные баги
    4. Добавлены доп. проверки
    5. Теперь куча радиокнопок заменены одной сложной функцией

    $form->addfield(array('name' => 'radio',
    'caption' => 'Опыт работы',
    'pattern' => 'radio',
    'css_class' => 'delimiter',
    'css_title_class' => 'caption',
    'options' => array(array('title' => '1 год', 'value' => '1', 'checked' => false),
    array('title' => '2 годa', 'value' => '2', 'checked' => true),
    array('title' => '3 годa', 'value' => '3', 'checked' => false),
    array('title' => 'более 3х лет', 'value' => '4', 'checked' => false)
    )
    )
    );


    На подходе версия 0.1.0, окончательно дотестенная, с почти полным функционалом релиза, яваскриптовыми подсказками

Пожалуйста, авторизуйтесь, чтобы написать комментарий!