PEAR HTML QuickForm

From Triangle Wiki

Jump to: navigation, search

Contents

Introduction

The HTML_Quickform package massively reduces the amount of HTML code needed to ouput and validate a form.

Elements

AdvCheckbox

$form->addElement(
 'advcheckbox',
 string element-name,  // name of advcheckbox
 string element-label, // label output before advcheckbox
 string text,          // label output after advcheckbox
 mixed attributes,     // string or array of attributes
 mixed values);        // see below

If values is omitted then the value returned is an empty string if not checked, and '1' if checked. If a string value is passed then the return value is empty string/supplied string, and if an array of two strings is passed they are taken as the unchecked/checked values to return.

Button

addElement('button',
 string element-name, // name of button
 string value,        // text of button
 mixed attributes);   // string or array of attributes

Checkbox

$form->addElement(
 'checkbox',
 string element-name,  // name of checkbox
 string element-label, // label output before checkbox
 string text,          // label output after checkbox
 mixed attributes);    // string or array of attributes

Date

addElement('date',
  string element-name,  // name of date
  string element-label, // label output before date
  array options,        // see below
  mixed attributes);    // string or array of attributes

Let QuickForm worry about multiple date entries, i.e. for setting up a simple credit card check use the following example;

$custom_name = 'Ian Warner';
$cc_account = 'Personal';
$cc_type = 'AMEX';
$cc_expm = '9';
$cc_expy = '2008';
$type_of_account =
 array('Office' => 'Office',
       'Personal' => 'Personal'
 );
$type_of_cards   =
 array('VISA' => 'VISA',
       'MASTERCARD' => 'MASTERCARD',
       'AMEX' => 'AMEX'
 );
$form->setDefaults(
 array( 'custom_name' => $custom_name,
        'cc_account' => $cc_account,
        'cc_type' => $cc_type,
        'CCexpiry' => array('F' => $cc_expm, 'Y' => $cc_expy)));
$form->addElement('text', 'custom_name', 'Custom Name',
  array('size' => 50, 'maxlength' => 255));
$form->addElement('select', 'cc_account', 'Type of Account',
  $type_of_account);
$form->addElement('select', 'cc_type', 'Type of Card',
 $type_of_cards);
$form->addElement('date', 'CCexpiry', 'Credit Card Expiration',
 array('format' => 'F-Y',
       'minYear' => date('Y'),
       'maxYear' => date('Y') + 10));

Hidden

addElement('hidden',
  string element-name, // name of hidden element
  string value,        // value of hidden element
  mixed attributes);   // string or array of attributes

HierSelect

addElement('hierselect',
  string element-name, // name of hierselect element
  string label,        // text label
  mixed attributes);   // string or array of attributes
$sel =& $form->addElement('hierselect', 'category',
  'Category', null, ' - ');
$mainOptions = array(1 => 'TV Shows', 2 => 'Movies');
$secOptions  = array(1 => array(1 => 'Stargate Atlantis'),
                     2 => array(1 => 'Romance'));
$sel->setOptions(array($mainOptions, $secOptions));

Image

addElement('image',
  string element-name, // name for image
  string src,          // source file of image
  mixed attributes);   // string or array of attributes

Radio

addElement('radio',
  string element-name, // name for radio button
  string label,        // text to display before button
  string text,         // text to display after button
  int value,           // the value returned
  mixed attributes);   // string or array of attributes

Select

addElement('select',
  string element-name, // name of select
  string label,        // label for select
  mixed data,          // data for select; see earlier text
  mixed attributes);   // string or array of attributes
$form->addElement('select', 'type', 'Message Type',
  array('SMS'=>'Normal SMS', 'FlashSMS'=>'Flash SMS'));

Static

addElement('static',
  string label, // label to display
  string text); // text to display

Submit

addElement('submit',
  string element-name, // name of submit
  string value,        // text of button
  mixed attributes);   // string or array of attributes
 $form->addElement('submit', null, 'Submit');

Text

 addElement('text',
  string element-name, // name of text box
  string label,        // label
  mixed attributes);   // string or array of attributes
 $form->addElement('text', 'service', 'Title',
   array('size'=>30, 'maxlength'=>100));

Textarea

 $form->addElement('textarea', 'message', 'Message',
   array('cols'=>30, 'rows'=>5));

Rules

$form->addRule('userfile', 'You must select a file',
  'required', null, 'client');

Callback rule example to check for duplicate Username:

/**
 * Function to check whether the username is already taken.
 *
 * @param  string $username Check username is unique
 * @return
 */
function checkUnique($username)
{
    // Connect to Database

    // Select to see if there is a username already taken

    // Return the count 

    if ($result > 0) {
        return false;
    } else {
        return true;
    }
}

$form->registerRule('checkusername', 'callback', 'checkUnique');
$form->addRule('usernmae', 'Username is duplicated please select another', 'checkusername');

Groups

A group allows for elements to be displayed on the same line, and also for rules to be defined for the group

$group[] =& HTML_QuickForm::createElement('text', 'first', 'First');
$group[] =& HTML_QuickForm::createElement('text', 'last', 'Last');
$form->addGroup($group, 'name', 'Name:', ', ');

Group rules as an example only:

$rule['first'][] = array('First is required', 'required');
$rule['first'][] = array('First contains only letters', 'lettersonly');
$rule['last'][] = array('Last is required', 'required');
$rule['last'][] = array('Last contains numbers only', 'regex', '/^\d+$/');
$form->addGroupRule('name', $rule);

Display Form

With Renderer

 $form->accept($renderer);
 echo $renderer->toHtml();

External Sites

Personal tools