PEAR::HTML_QuickForm 3.0 наконец вышел

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
PEAR::HTML_QuickForm 3.0 наконец вышел

... после полутора месяцев упорного beta-тестирования.

страница на сайте PEAR: http://pear.php.net/package-info.php?pacid=58
мануал (не вполне готовый): http://www.appelsiini.net/~tuupola/php/peardoc2/package.html.html#package.html.html-quickform

пакет предназначен для облегчения процесса создания, проверки и вывода форм. в частности, отвечает на следующие часто задаваемые здесь вопросы:
  • как мне заполнить select значениями из базы?
  • как мне вывести форму с данными, введёнными пользователем?

версия 3.0 включает возможность вывода форм посредством шаблонов (к реализации которой я и приложил руку). Есть средства и примеры для работы с HTML_Template_Sigma (HTML_Template_IT) из PEAR и с Smarty.

Пример использования:
PHP:
require_once 'HTML/QuickForm.php';

$form =& new HTML_QuickForm('example', 'post');
$form->setDefaults(array(
    'login' => 'vasya_poopkin'
));
$form->addElement('text', 'login', 'Имя пользователя:');
$form->addElement('password', 'passwd', 'Пароль');
$form->addElement('submit', null, 'Послать!');

$form->applyFilter('__ALL__', 'trim');

$form->addRule('login', 'Введите имя пользователя', 'required');
$form->addRule('password', 'Введите пароль', 'required');

if ($form->validate()) {
   $values = $form->getSubmitValues();
  // проверяем правильность пароля, логинимся...

}

$form->display();
 

Verk

Guest
мечты сбываются ! :)

PS. QuickForm_example7.php варнинг выдает

Warning: Missing argument 1 for process() in d:\Web\dmitry\office_includes\HTML\QuickForm.php on line 1665
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Verk
PS. QuickForm_example7.php варнинг выдает

Warning: Missing argument 1 for process() in d:\Web\dmitry\office_includes\HTML\QuickForm.php on line 1665
Пасиб, поправлю.

PPS. и ссылка на ман не открывается ..
И правда. :(
При этом я в интернете свежей версии не нашёл, везде доки старые, где QuickForm'а ещё не было. Если не ломает, можешь из CVS вытащить и сам HTML собрать. Если ломает, то я в понедельник текущую версию вот сюда выложу:
http://oc.cs.msu.su/peardoc/package.html.html#package.html.html-quickform
 

Verk

Guest
Да и без мана хорошо, примеров вполне достаточно
 

young

Новичок
Понравилось, но хотелось бы услышать отзывы.

и первый вопрос?
Надпись "denotes required field" можно как-то сменить?!
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума

Verk

Guest
Баг ?
Рисуем такую форму :

PHP:
//bug.php

	require_once 'HTML/QuickForm.php';
	
	$form =& new HTML_QuickForm('details', 'get');
	$defaultValues['StartTime']   = explode (":","hh:mm");
	$defaultValues['saturday']   = true;
	$form->setDefaults($defaultValues);
	$Hours = &HTML_QuickForm::createElement('text', '');
	$Hours->setSize(2);
	$Hours->setMaxLength(2);
	$Minutes = &HTML_QuickForm::createElement('text', '');
	$Minutes ->setSize(2);
	$Minutes->setMaxLength(2);
	$form->addGroup(array($Hours, $Minutes), 'StartTime', 'StartTime (hh:mm)', ': ');

	$form->addElement('checkbox', 'saturday', 'saturday:');

	$form->addElement('submit', 'save', ' Save ');

	if ($form->validate()) {
	   	$values = $form->getSubmitValues();
	}
	$form->display();
Форма типа get, с полями input и checkbox, которым присваиваются дефолтовые значения.
Сохраняем в файл bug.php и смотрим результат в браузере. Сейчас все ок.
Если же передать какой-нибудь параметр, например вызвать bug.php?bug=true станет видно что поля ведут себя по-разному. input остался со значением по дефаулту, а чекбокс ждет одноименного get параметра. checkbox определяется если запустить bug.php?saturday=true или сделать форму типа post.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Verk
Если же передать какой-нибудь параметр, например вызвать bug.php?bug=true станет видно что поля ведут себя по-разному. input остался со значением по дефаулту, а чекбокс ждет одноименного get параметра. checkbox определяется если запустить bug.php?saturday=true или сделать форму типа post.
Это не баг, это так и должно быть...
Проблема в следующем: если форма была отправлена, но checkbox не был отмечен, то $_REQUEST['checkbox_name'] не будет определён вообще. Поэтому для выбора того как его выводить, проверяется непустота массива $_GET/$_POST. Отсюда и такое поведение...
Можешь ещё advcheckbox попробовать.
 
Сверху