O próximo exemplo irá começar onde o anterior parou, ele nos mostrará a habilidade natural dessa biblioteca de "agrupar" os elementos do form.
Carregue o código do link abaixo no seu browser:
E você terá a seguinte tela:
Para aprender mais sobre o agrupamento de elementos do formulário de uma analisada no código a seguir:
<?php
// snip
// Creates a group of text inputs
$obj_first_name = &HTML_QuickForm::createElement('text', '', '', array('size' => 30, 'maxlength' => 30));
$obj_last_name = &HTML_QuickForm::createElement('text', '', '', array('size' => 30, 'maxlength' => 30));
$obj_registration_form->addGroup(array($obj_first_name, $obj_last_name), 'txtFullName', 'Full Name:', ' ');
// snip
?>
No primeiro exemplo utilizei apenas um campo para o nome completo, seria interessante que pudéssemos exibir dois campos, um para o primeiro nome e outro para o último nome e assim melhorar a formatação do form. Essa habilidade do HTML_QuickForm() de exibir dois campos e os tratar como uma única entidade é muito útil.
O agrupamento dos campos "primeiro nome" e "último nome" é apenas um dos possíveis exemplos, outro exemplo interessante seria para a entrada de número de cartão de crédito. O usuário irá entrar com os número em grupos de 4, assim como eles se apresentam no próprio cartão, facilitando a usabilidade do formulário.
Voltando ao script, eu chamei o método estático createElement() para criar uma instância do objeto HTML_QuickForm(). Os parâmetros desse método imitam as do método addElement(), e a natureza do elemento a ser criado depende da palavra chave enviada no método.
Uma vez que eu defini todos os elementos de um "grupo particular," eu invoco o método do addGroup() do objeto de HTML_QuickForm() e passo um array, contendo os elementos, junto com um "nome" e uma "label" para o grupo.
O quarto parâmetro representa o separador utilizado entre os elementos do grupo - eu passei somente um espaço em branco e deixei os campos na mesma linha.
Agora deixe-me levar a sua atenção para os outros agrupamentos que criei nesse exemplo.
<?php
// snip
// create a checkbox group
$obj_genre[] = &HTML_QuickForm::createElement('checkbox', 'Alternative', null, 'Alternative');
$obj_genre[] = &HTML_QuickForm::createElement('checkbox', 'Hip-Hop', null, 'Hip-Hop');
$obj_genre[] = &HTML_QuickForm::createElement('checkbox', 'Other', null, 'Other');
$obj_registration_form->addGroup($obj_genre, 'chkGenre', 'Group Genre:', '<br />');
// create a radio button group
$obj_type[] = &HTML_QuickForm::createElement('radio', NULL, NULL, 'Male Solo', 'Male_Solo');
$obj_type[] = &HTML_QuickForm::createElement('radio', NULL, NULL, 'Female Solo', 'Female_Solo');
$obj_registration_form->addGroup($obj_type, 'radGroupType', 'Group Type:');
// create a multiple select drop down
$obj_registration_form->addElement('select', 'ddlLookingFor', 'Looking For:', array ("Publishing_Deal" => "Publishing Deal", "Label_Deal" => "Label Deal","Management_Deal" => "Management Deal", "Other" => "Other"), array("size" => "3", "multiple"));
// snip
?>
Aqui eu criei um grupo de checkbox e outro de radiobuttons usando o método estático createElement().Nesse caso eu atribuí os objetos resultantes do elemento em uma disposição. Em seguida, eu passei esta disposição dos objetos diretamente como a entrada ao método do addGroup() para renderizá-los no browser. Note o uso de quebra de linha - <BR> - , como um separador para o elemento "checkbox" - isto indica cada checkbox em uma linha nova.
<?php
// snip
// create a multiple select drop down
$obj_registration_form->addElement('select', 'ddlLookingFor', 'Looking For:', array ("Publishing_Deal" => "Publishing Deal", "Label_Deal" => "Label Deal","Management_Deal" => "Management Deal", "Other" => "Other"), array("size" => "3", "multiple"));
// snip
// add a hidden value
$obj_registration_form->addElement('hidden', 'txtReferrer', 'http://www.mysite.com');
// snip
?>
Em seguida eu adicionei um <SELECT> múltiplo, e isso e muito fácil, pois basta passar valores nos parâmetros size e múltiplo no método addElement().
Vimos também no código acima elemento oculto <HIDDEN>.
<?php
// snip
// creates a group of buttons to be displayed at the bottom of the form
$obj_submit[] = &HTML_QuickForm::createElement('submit', 'btnSubmit', 'Register');
$obj_submit[] = &HTML_QuickForm::createElement('reset', 'btnReset', 'Start Again');
$obj_registration_form->addGroup($obj_submit, '', '', '  ');
// snip
?>
No código acima coloquei dois elementos agrupados sendo exibidos na mesma linha.
Iremos agora para a validação que é uma parte fundamental para a segurança e consistência de nosso formulário. Já vimos como renderizar os elementos HTML, agora veremos como validar os dados que são enviados através desses elementos.