Accueil > > > CLASS DE FORMULAIRE HTML
CLASS DE FORMULAIRE HTML
Information sur la source
Description
Cette classe permet de créer un formulaire HTML, d'y ajouter des composants et de l'afficher. Possibilité de coupler ce script à une feuille CSS et à des fonctions javascript
Source
- <?php
-
- /**
- * Project:
- * File:
- * Classes: Component, Button, Text, List, Check, Option, Form
- *
- * This file contains a set of class used to create and handle a xhtml form.
- *
- * @author Jean Poldeux <jean_poldeux@hotmail.com>
- * @date July 27th, 2005
- * @version 2.1
- */
-
- /**
- * This class is used to create any form component.
- */
- class Component
-
- {
-
- /**
- * Constructor that creates a form object with a name and a default value
- * @param name Component name (STRING)
- * @param default Default value - default="" (STRING)
- */
- function Component($name, $default = "")
-
- {
-
- $this->att["name"] = $name;
-
- $this->att["default"] = $default;
-
- }
-
- /**
- * Set the default value (STRING)
- * @param default Default value - default="" (STRING)
- */
-
- function setDefault($default = "")
-
- {
-
- $this->att["default"] = $default;
-
- }
-
- /**
- * Set the class attribute of the component xhtml tag
- * @param class The value of class attribute - default="" (STRING)
- */
-
- function setClass($class = "")
-
- {
-
- $this->att["class"] = $class;
-
- }
-
- /**
- * Set the id attribute of the component xhtml tag
- * @param id The value of id attribute - default="" (STRING)
- */
-
- function setId($id = "")
-
- {
-
- $this->att["id"] = $id;
-
- }
-
- /**
- * Add a new attribute of the component xhtml tag
- * @param name The name of the new attribute (STRING)
- * @param value The value of this attribute - default = "" (STRING)
- * @return (BOOLEAN) TRUE if the new attribute has correctly been added - FALSE if it already exits or an error occured
- */
-
- function addAtt($name, $value = "")
-
- {
- if(!array_key_exists($name, $this->att) && strlen($value) != 0 )
- {
- $this->att[$name] = $value;
- return true;
- }
- else
- return false;
-
- }
-
- /**
- * Set a new value to xhtml attribute given as parameter
- * @param attribute The name of the attribute (STRING)
- * @param value The value of this attribute - default = "" (STRING)
- * @return (BOOLEAN) TRUE if the attribute has correctly been changed - FALSE if it doesn't exits or an error occured
- */
-
- function setAtt($name, $value = "")
-
- {
- if(array_key_exists($name, $this->att) && strlen($value) != 0 )
- {
- $this->att[$name] = $value;
- return true;
- }
- else
- return false;
-
- }
-
- /**
- * Remove a xhtml attribute of this component
- * @param attribute The name of the attribute (STRING)
- * @return (BOOLEAN) TRUE if the attribute has correctly been removed - FALSE if it doesn't exits or an error occured
- */
-
- function removeAtt($name)
-
- {
- if(array_key_exists($name, $this->att))
- {
- //Find the place of this element
- $index = array_search($name, array_keys($this->att));
- //remove the attribute
- array_splice($this->att, $index, 1);
- //return true
- return true;
- }
- else
- return false;
-
- }
-
- /**
- * This function makes you able to display the component within a form object
- */
-
- function display()
-
- {
- //Initialise the display string var
- $var = "";
-
- //Point to the first element of the attribute array
- reset($this->att);
-
- //Loop through the array and extract the key and value
- while(list($attribute, $value) = each($this->att))
- {
- //check if the attribute is not empty
- if(isset($value) && strlen($value) != 0)
- {
- $var = $attribute."=\"".$value."\" ";
- }
- }
- //display the obtained string
- echo $var;
-
- }
-
- /**
- * @var att An indexed array that contains the xhtml attribute as key and
- * the xhtml value as value
- */
- var $att = array();
-
- }
-
-
- /**
- * This class is used to create a button within a form object
- */
-
- class Button extends Component
-
- {
- /**
- * Constructor that initializes the button with compulsory values
- * @param name Name of this button. Be careful that this name have to be unique within a single form (STRING)
- * @param type (INTEGER)
- * <ul>
- * <li>1 => a text submit button (the default value)</li>
- * <li>2 => a text reset button</li>
- * <li>3 => a text button (It calls the javascript contained in js_func var)</li>
- * <li>4 => a image button(It calls the javascript contained in js_func var)</li>
- * </ul>
- * @param size The button size in pixels (INTEGER)
- * @param caption The button caption (STRING)
- * @param image The absolute filename of the image displayed on the button (STRING)
- * @param js_func The javascript function that should be called when the button is clicked. (STRING)
- * Set its name if it's defined in xhtml header or the all function definition.
- */
-
- function Button($name = "button", $type = 1, $size = 75, $caption = "", $image = "", $js_func = "")
-
- {
- //call the super constructor
-
- $this->Component($name,"");
-
- //Set the button type and add the new attributes in relation with this type
- switch($type)
- {
- case 2:
- $this->att["type"] = "reset";
- if(strlen($caption) != 0)
- {
- $this->att["value"] = htmlentities($caption, ENT_QUOTES);
- }
- else
- {
- $this->att["value"] = "Cancel";
- }
- break;
- case 3:
- $this->att["type"] = "button";
- if(strlen($caption) != 0)
- {
- $this->att["value"] = htmlentities($caption, ENT_QUOTES);
- }
- else
- {
- $this->att["value"] = htmlentities("Click here", ENT_QUOTES);
- }
- $this->att["OnClick()"] = $js_func;
- break;
- case 4:
- $this->att["type"] = "button";
- if(strlen($image) != 0)
- {
- $this->att["src"] = $image;
- }
- else
- {
- $this->att["src"] = "";
- }
- $this->att["OnClick()"] = $js_func;
- break;
- default:
- $this->att["type"] = "submit";
- if(strlen($caption) != 0)
- {
- $this->att["value"] = htmlentities($caption, ENT_QUOTES);
- }
- else
- {
- $this->att["value"] = "Submit";
- }
- break;
- }
-
- //Add the specific attributes to the new button
- $this->att["size"] = $taille." px";
-
- }
-
-
-
- /**
- * Set the button caption
- * @param caption The caption (STRING)
- * @return (BOOLEAN) True if the caption has been changed - FALSE if this is
- * image button and has no caption
- */
-
- function setCaption($caption = "")
-
- {
- if (strcmp($this->att["type"], "submit") == 0)
- {
- if(strlen($caption) != 0)
- {
- $this->att["value"] = $caption;
- }
- else
- {
- $this->att["value"] = "Submit";
- }
- return true;
- }
- elseif (strcmp($this->att["type"], "reset") == 0)
- {
- if(strlen($caption) != 0)
- {
- $this->att["value"] = $caption;
- }
- else
- {
- $this->att["value"] = "Cancel";
- }
- return true;
- }
- elseif ( strcmp($this->att["type"], "button") == 0 && (!isset($this->["src"]) || strlen($this->["src"]) == 0) )
- {
- if(strlen($caption) != 0)
- {
- $this->att["value"] = $caption;
- }
- else
- {
- $this->att["value"] = "Submit";
- }
- return true;
- }
-
- else
- {
- return false;
- }
-
- }
-
-
- /**
- * Set the button image
- * @param image The absolute filename of the image (STRING)
- * @return (BOOLEAN) True if the image has been changed - FALSE if this is
- * text, cancel or submit button and has a caption
- */
-
- function setImage($image = "")
-
- {
-
- if ( strcmp($this->att["type"], "button") == 0 && (!isset($this->["value"]) || strlen($this->["value"]) == 0) )
- {
- if(strlen($image) != 0)
- {
- $this->att["src"] = $caption;
- }
- else
- {
- $this->att["src"] = "";
- }
- return true;
- }
-
- else
- {
- return false;
- }
-
- }
-
- /**
- * Set the button size
- * @param size The button size in pixels (INTEGER)
- */
-
- function setSize($size)
-
- {
-
- $this->att["size"] = $size." px";
-
- }
-
-
-
- /**
- * Set the javascript function name or the all function definition called when
- * the button is clicked.
- * @param js_func The javascript function call or definition (STRING)
- * @return (BOOLEAN) True if the function has been changed - FALSE if this is
- * cancel or submit button and has a caption
- */
-
- function setJsFunc($js_func)
-
- {
- if(strcmp($this->att["type"], "button") == 0)
- {
-
- $this->att["OnClick"] = $js_func;
- return true;
- }
- else
-
- {
-
- return false;
- }
- }
-
-
- /**
- * Display the button within the form.
- */
-
- function display()
-
- {
-
- echo "<input ";
-
- Composant::affiche();
-
- echo "/>\n";
-
- }
-
- }
-
-
-
- /**
- * This class is used to create a textbox, a password box or a text area
- */
-
- class Text extends Component
-
- {
-
- /**
- * Constructor that initializes the text component with compulsory values
- * @param name Name of this component. Be careful that this name have to be unique within a single form (STRING)
- * @param type (INTEGER)
- * <ul>
- * <li>1 => a textbox </li>
- * <li>2 => a textarea </li>
- * <li>3 => a textbox used for password ('*' are insered during completion)</li>
- * <li>4 => an hidden textbox</li>
- * </ul>
- * @param default The default value (STRING)
- */
- function Text($name = "text", $type = 1, $default)
-
- {
- //Call the super constructor
-
- $this->Component($name, $default);
-
- //Choose the type and the specific attribute
- switch($type)
- {
- case 2:
- $this->box_or_area = "textarea";
- break;
- case 3:
- $this->box_or_area = "input";
- $this->att["type"] = "password";
- case 4:
- $this->box_or_area = "input";
- $this->att["type"] = "hidden";
- default:
- $this->box_or_area = "input";
- $this->att["type"] = "text";
- }
-
- }
-
- /**
- * Set the textbox size. This function can only be used with textbox or password
- * @param size The textbox size in pixels (INTEGER)
- * @return (BOOLEAN) True if the size has been changed - False if it's not the
- * right type.
- */
-
- function setSize($size = 75)
-
- {
-
- if (strcmp($this->box_or_area, "textarea") != 0)
-
- {
-
- if(strcmp($this->att["type"], "hidden") != 0)
- {
- this->att["size"] = $size." px";
- return true;
- }
- else
- return false;
-
- }
- else
- return false;
-
- }
-
- /**
- * Set the maximum number of characters that a text box can contain.
- * This function can only be used with textbox or password
- * @param nb_char The maximum number of characters (INTEGER)
- * @return (BOOLEAN) True if the number has been changed - False if it's not the
- * right type.
- */
- function setMax($nbChar)
-
- {
-
- if (strcmp($this->box_or_area, "textarea") != 0)
-
- {
-
- if(strcmp($this->att["type"], "hidden") != 0)
- {
- this->att["maxlength"] = $nbChar;
- return true;
- }
- else
- return false;
-
- }
- else
- return false;
-
- }
-
-
- /**
- * Set the text area size in number of rows X number of columns.
- * @param rows The number of rows (INTEGER)
- * @param cols The number of columns (INTEGER)
- * @return (BOOLEAN) True if the size has been changed - False if it's not the
- * right type.
- */
-
- function setDimension($rows, $cols)
-
- {
-
- if (strcmp($this->box_or_area, "textarea") == 0)
-
- {
- this->att["rows"] = $rows;
-
- this->att["cols"] = $cols;
- return true;
- }
- else
- return false;
-
- }
-
- /**
- * Set the way new line character is handled. It only works for text area
- * @param new_line This parameter can take these values :
- * <ul>
- * <li>1 => The text area doesn't accept new line </li>
- * <li>2 => The text area accepts new line but they are not sent </li>
- * <li>3 => The text area accepts new line and these are sent</li>
- * </ul>
- * @return (BOOLEAN) True if the method has been changed - False if it's not the
- * right type.
- */
-
- function newLineHandling($new_line)
- {
- if (strcmp($this->box_or_area, "textarea") == 0)
-
- {
- switch($new_line)
- {
- case 1:
- $this->att["wrap"] = "off";
- case 3:
- $this->att["wrap"] = "physical";
- default:
- $this->att["wrap"] = "virtual";
- }
- return true;
- }
- else
- return false;
- }
-
- /**
- * Display the textbox within the form.
- */
-
- function display()
-
- {
-
- echo "<".$this->box_or_area." ";
-
- Composant::affiche();
-
- echo "/>\n";
-
- }
-
- /**
- * @var box_or_area Used to store if this object is a <input/> xhtml tag or
- * an <textarea> tag.
- */
-
- var $box_or_area;
-
- }
-
-
-
-
-
- /**
- * This class is used to create a radio button. In opposition with other
- * components, you can have more than one option button with the same name.
- * In that case, the value sent to the server will be the one contained in
- * $data_sent of the selected radio button.
- */
- class Option extends Component
-
- {
-
- /**
- * Constructor that initializes the button with compulsory values
- * @param name Name of this button. (STRING)
- * @param caption The caption displayed near the radio button (STRING)
- * @param data_sent The string that's sent when the form is submited if the option is selected.
- */
-
- function Option($name = "option", $caption="Option", $data_sent="Option selected")
-
- {
-
- $this->Component($name);
- $this->att["type"] = "radio";
- $this->att["value"] = $data_sent;
- $this->caption = $caption;
-
- }
-
-
- /**
- * Set the button which will be selected by default among all the buttons
- * that have the same name.
- * @param $selected True if the button has to be selected - False if not (BOOLEAN)
- */
- function selected($selected = true)
-
- {
- if($selected)
-
- $this->selected = "checked";
- else
- $this->selected = "";
-
- }
-
-
- /**
- * Set the data which will be sent if the button is selected
- * @param data_sent The data that 'll be sent to the server (STRING)
- */
- function setDataSent($data_sent)
-
- {
-
- $this->att["value"] = $data_sent;
-
- }
-
- /**
- * Display the radio button within the form.
- */
-
- function display()
-
- {
-
- echo "<input ";
-
- Composant::affiche();
-
- echo $this->selected." /> ".$this->caption."\n";
-
- }
-
-
- /**
- * @var caption The text value that follows the radio button. (STRING)
- */
-
- var $caption;
-
-
- /**
- * @var caption Flag if the radio button must be selected by default. (STRING)
- */
-
- var $selected;
-
- }
-
-
-
- /**
- * This class is used to create a check button.
- */
- class Check extends Component
-
- {
-
- /**
- * Constructor that initializes the button with compulsory values
- * @param name Name of this button. Be careful that this name have to be unique within a single form (STRING)
- * @param caption The caption displayed near the check button (STRING)
- * @param data_sent The string that's sent when the form is submited if the option is checked.
- */
-
- function Check($name = "check", $caption="Check", $data_sent="Option Checked")
-
- {
-
- $this->Component($name);
- $this->att["type"] = "checkbox";
- $this->att["value"] = $data_sent;
- $this->caption = $caption;
-
- }
-
-
- /**
- * Check or Uncheck the button
- * @param $selected True if the button has to be checked - False if not (BOOLEAN)
- */
- function checked($checked = true)
-
- {
- if($checked)
-
- $this->checked = "checked";
- else
- $this->checked = "";
-
- }
-
-
- /**
- * Set the data which will be sent if the button is checked
- * @param data_sent The data that 'll be sent to the server (STRING)
- */
- function setDataSent($data_sent)
-
- {
-
- $this->att["value"] = $data_sent;
-
- }
-
- /**
- * Display the check button within the form.
- */
-
- function display()
-
- {
-
- echo "<input ";
-
- Composant::affiche();
-
- echo $this->checked." /> ".$this->caption."\n";
-
- }
-
-
- /**
- * @var caption The text value that follows the radio button. (STRING)
- */
-
- var $caption;
-
-
- /**
- * @var caption Flag if the radio button must be selected by default. (STRING)
- */
-
- var $selected;
-
- }
-
-
-
-
- /**
- * This class is used to create a dropdown list
- */
- class Listbox extends Component
-
- {
-
- /**
- * Constructor that initializes all the compulsory attributes.
- * @param name The dropdown list name. Be careful that this name have to be unique within a single form (STRING)
- * @param width The dropdown list width. It's given in pixels (INTEGER)
- * @param options The list of options contained in the list (KEYED ARRAY of STRING)
- * where the key is the text contained in the list and the value is the one that
- * will be sent to the server.
- * @param displayed_options The number of list items that will be shown to the user. (INTEGER)
- * @param multiple True if the selection can be multiple - False if not (BOOLEAN)
- */
- function Listbox($name = "list", $width= 75, $options = array(), $displayed_options = 5, $multiple = "false")
-
- {
-
- $this->Composant($name);
-
- $this->options = $options;
- $this->att["size"] = $displayed_options;
- $this->multiple = $multiple;
- $this->width = $width." px";
-
- }
-
- /**
- * Set the different items contained in the dropdown list.
- * @param options The list of options contained in the list (KEYED ARRAY of STRING)
- * where the key is the text contained in the list and the value is the one that
- * will be sent to the server.
- */
-
- function setOptions($options = array())
- {
- $this->options = $options;
- }
-
- /**
- * Set the list item that will be selected when the form is displayed.
- * @param index The index number of the option that should be selected. (INTEGER)
- * @return (BOOLEAN) True if the item index has been found - False if the index is out of bounds.
- */
-
- function setSelectedItem($index = 0)
-
- {
-
- if(is_array($this->options))
-
- {
-
- if ($index>=1 && $index<=count($this->options))
-
- {
-
- $this->default = $index;
- return true;
-
- }
- else
- return false;
-
- }
- else
- return false;
-
- }
-
- /**
- * Set if the user can select more than one item in the list or not.
- * @param multiple True if the selection can be multiple - False if not (BOOLEAN)
- */
-
- function setMultiple($multiple = "false")
-
- {
-
- $this->multiple = $multiple;
-
- }
-
- /**
- * Set the number of item that are shown to the user when the list is displayed.
- * @param displayed_options The number of list items (INTEGER)
- */
-
- function setDisplayedOptions($displayed_options = 5)
-
- {
-
- $this->att["size"] = $displayed_options;
-
- }
-
- /**
- * Set the list width.
- * @param width The dropdown list width. It's given in pixels (INTEGER)
- */
-
- function setWidth($width = 75)
-
- {
-
- $this->width = $width." px";
-
- }
-
-
-
- /**
- * Display the dropdown list.
- */
-
- function display()
-
- {
-
- //Display the <select> xhtml tag
-
- echo "<select ";
- //Display the component attributes
- Component::display();
-
- if($this->multiple)
-
- {
-
- echo "multiple ";
-
- }
-
- echo ">\n";
-
-
-
- //Display all the options
-
- if(is_array($this->options))
-
- {
- //Point to the first element
- reset($this->options);
- //Set the pointer position to start
- $pos = 0;
- //Loop through the array
- while(list($text, $value) = each($options))
- {
- //Display the xhtml <option> tag
- echo "<option value=\"".$value."\" width=\"".$this->width."\" ";
- //If the current position in the array is the default option, write it down.
- if($this->default == $pos)
- {
- echo "selected ";
- }
- echo ">\n";
- //Increment the position counter
- $pos++;
- //Display the option caption
- echo $text."\n";
- echo "</option>\n";
- }
- }
- //Display the closing xhtml tag.
-
- echo "</select>\n";
-
- }
-
-
- /**
- * @var multiple True if the selection can be mutliple - False if not (BOOLEAN)
- */
-
- var $multiple;
-
-
- /**
- * @var options The list of options contained in the list (KEYED ARRAY of STRING)
- */
-
- var $options = array();
-
-
- /**
- * @var default The option that will be selected by default when the list is displayed (INTEGER)
- */
-
- var $default;
-
-
- /**
- * @var width The dropdown list width. It's given in pixels (INTEGER)
- */
-
- var $width;
-
- }
-
-
- /**
- * This class is used to create a form. Every component can be added to this form.
- */
-
- class Form extends Component
-
- {
-
- /**
- * Constructor that initializes the form with compulsory values
- * @param name Name of this button. Be careful that this name have to be unique within a single page (STRING)
- * @param type (INTEGER)
- * <ul>
- * <li>
- * 1 => the method used to send the form data is POST. (Default)
- * These values can be used with $_POST["name"] = value
- * </li>
- * <li>
- * 2 => the method used to send the form data is GET. The data are
- * send through the URL.
- * These values can be used with $_GET["name"] = value
- * </li>
- * </ul>
- * @param script The absolute or relative path to the script that will handle the form data (STRING)
- */
-
- function Form($name, $type, $script)
-
- {
- $this->Component($name);
-
- $this->components = array();
- switch($type)
- {
- case 2:
- $this->att["method"] = "get"
- default:
- $this->att["method"] = "post"
- }
-
- $this->att["action"] = $script;
-
- }
-
- /**
- * Add a component to the form.
- * @param component A Component object (Button, Listbox, etc.) (COMPONENT CLASS)
- * @param br True if a newline character should be displayed just after this component - False if not (BOOLEAN)
- * @return (BOOLEAN) True if the component has been added - False if an error has occured
- */
-
- function addComponent($component, $br)
- {
- if(isset($component))
- {
- if($br)
- $comp = array($component, "<br/>");
- else
- $comp = array($component, "");
- $this->components = array_push($this->components, $comp);
- return true;
- }
- else
- return false;
- }
-
-
- /**
- * Remove a component from the form.
- * @param index The index number of the componant that should be removed. (INTEGER)
- * @return (BOOLEAN) True if the component has been removed - False if an error has occured
- */
-
- function removeComponent($index)
- {
- if(isset($index) && $index >= 1 && $index<=count($this->components))
- {
- array_splice($this->components, $index-1, 1);
- return true;
- }
- else
- return false;
- }
-
- /**
- * Remove all components from the form.
- */
-
- function removeComponents()
- {
- this->components = array();
- }
-
- /**
- * Display the form
- */
- function display()
-
- {
-
- echo "<form ";
- Component::display();
-
- echo ">\n";
-
- for($i=0; $i<count($this->components); $i++)
-
- {
-
- $this->components[$i][0]->display();
-
- if($this->composants[$i][1])
-
- {
-
- echo "<br/>\n";
-
- }
-
- }
-
- echo "</form>\n";
-
- }
-
- }
-
-
-
- ?>
<?php
/**
* Project:
* File:
* Classes: Component, Button, Text, List, Check, Option, Form
*
* This file contains a set of class used to create and handle a xhtml form.
*
* @author Jean Poldeux <jean_poldeux@hotmail.com>
* @date July 27th, 2005
* @version 2.1
*/
/**
* This class is used to create any form component.
*/
class Component
{
/**
* Constructor that creates a form object with a name and a default value
* @param name Component name (STRING)
* @param default Default value - default="" (STRING)
*/
function Component($name, $default = "")
{
$this->att["name"] = $name;
$this->att["default"] = $default;
}
/**
* Set the default value (STRING)
* @param default Default value - default="" (STRING)
*/
function setDefault($default = "")
{
$this->att["default"] = $default;
}
/**
* Set the class attribute of the component xhtml tag
* @param class The value of class attribute - default="" (STRING)
*/
function setClass($class = "")
{
$this->att["class"] = $class;
}
/**
* Set the id attribute of the component xhtml tag
* @param id The value of id attribute - default="" (STRING)
*/
function setId($id = "")
{
$this->att["id"] = $id;
}
/**
* Add a new attribute of the component xhtml tag
* @param name The name of the new attribute (STRING)
* @param value The value of this attribute - default = "" (STRING)
* @return (BOOLEAN) TRUE if the new attribute has correctly been added - FALSE if it already exits or an error occured
*/
function addAtt($name, $value = "")
{
if(!array_key_exists($name, $this->att) && strlen($value) != 0 )
{
$this->att[$name] = $value;
return true;
}
else
return false;
}
/**
* Set a new value to xhtml attribute given as parameter
* @param attribute The name of the attribute (STRING)
* @param value The value of this attribute - default = "" (STRING)
* @return (BOOLEAN) TRUE if the attribute has correctly been changed - FALSE if it doesn't exits or an error occured
*/
function setAtt($name, $value = "")
{
if(array_key_exists($name, $this->att) && strlen($value) != 0 )
{
$this->att[$name] = $value;
return true;
}
else
return false;
}
/**
* Remove a xhtml attribute of this component
* @param attribute The name of the attribute (STRING)
* @return (BOOLEAN) TRUE if the attribute has correctly been removed - FALSE if it doesn't exits or an error occured
*/
function removeAtt($name)
{
if(array_key_exists($name, $this->att))
{
//Find the place of this element
$index = array_search($name, array_keys($this->att));
//remove the attribute
array_splice($this->att, $index, 1);
//return true
return true;
}
else
return false;
}
/**
* This function makes you able to display the component within a form object
*/
function display()
{
//Initialise the display string var
$var = "";
//Point to the first element of the attribute array
reset($this->att);
//Loop through the array and extract the key and value
while(list($attribute, $value) = each($this->att))
{
//check if the attribute is not empty
if(isset($value) && strlen($value) != 0)
{
$var = $attribute."=\"".$value."\" ";
}
}
//display the obtained string
echo $var;
}
/**
* @var att An indexed array that contains the xhtml attribute as key and
* the xhtml value as value
*/
var $att = array();
}
/**
* This class is used to create a button within a form object
*/
class Button extends Component
{
/**
* Constructor that initializes the button with compulsory values
* @param name Name of this button. Be careful that this name have to be unique within a single form (STRING)
* @param type (INTEGER)
* <ul>
* <li>1 => a text submit button (the default value)</li>
* <li>2 => a text reset button</li>
* <li>3 => a text button (It calls the javascript contained in js_func var)</li>
* <li>4 => a image button(It calls the javascript contained in js_func var)</li>
* </ul>
* @param size The button size in pixels (INTEGER)
* @param caption The button caption (STRING)
* @param image The absolute filename of the image displayed on the button (STRING)
* @param js_func The javascript function that should be called when the button is clicked. (STRING)
* Set its name if it's defined in xhtml header or the all function definition.
*/
function Button($name = "button", $type = 1, $size = 75, $caption = "", $image = "", $js_func = "")
{
//call the super constructor
$this->Component($name,"");
//Set the button type and add the new attributes in relation with this type
switch($type)
{
case 2:
$this->att["type"] = "reset";
if(strlen($caption) != 0)
{
$this->att["value"] = htmlentities($caption, ENT_QUOTES);
}
else
{
$this->att["value"] = "Cancel";
}
break;
case 3:
$this->att["type"] = "button";
if(strlen($caption) != 0)
{
$this->att["value"] = htmlentities($caption, ENT_QUOTES);
}
else
{
$this->att["value"] = htmlentities("Click here", ENT_QUOTES);
}
$this->att["OnClick()"] = $js_func;
break;
case 4:
$this->att["type"] = "button";
if(strlen($image) != 0)
{
$this->att["src"] = $image;
}
else
{
$this->att["src"] = "";
}
$this->att["OnClick()"] = $js_func;
break;
default:
$this->att["type"] = "submit";
if(strlen($caption) != 0)
{
$this->att["value"] = htmlentities($caption, ENT_QUOTES);
}
else
{
$this->att["value"] = "Submit";
}
break;
}
//Add the specific attributes to the new button
$this->att["size"] = $taille." px";
}
/**
* Set the button caption
* @param caption The caption (STRING)
* @return (BOOLEAN) True if the caption has been changed - FALSE if this is
* image button and has no caption
*/
function setCaption($caption = "")
{
if (strcmp($this->att["type"], "submit") == 0)
{
if(strlen($caption) != 0)
{
$this->att["value"] = $caption;
}
else
{
$this->att["value"] = "Submit";
}
return true;
}
elseif (strcmp($this->att["type"], "reset") == 0)
{
if(strlen($caption) != 0)
{
$this->att["value"] = $caption;
}
else
{
$this->att["value"] = "Cancel";
}
return true;
}
elseif ( strcmp($this->att["type"], "button") == 0 && (!isset($this->["src"]) || strlen($this->["src"]) == 0) )
{
if(strlen($caption) != 0)
{
$this->att["value"] = $caption;
}
else
{
$this->att["value"] = "Submit";
}
return true;
}
else
{
return false;
}
}
/**
* Set the button image
* @param image The absolute filename of the image (STRING)
* @return (BOOLEAN) True if the image has been changed - FALSE if this is
* text, cancel or submit button and has a caption
*/
function setImage($image = "")
{
if ( strcmp($this->att["type"], "button") == 0 && (!isset($this->["value"]) || strlen($this->["value"]) == 0) )
{
if(strlen($image) != 0)
{
$this->att["src"] = $caption;
}
else
{
$this->att["src"] = "";
}
return true;
}
else
{
return false;
}
}
/**
* Set the button size
* @param size The button size in pixels (INTEGER)
*/
function setSize($size)
{
$this->att["size"] = $size." px";
}
/**
* Set the javascript function name or the all function definition called when
* the button is clicked.
* @param js_func The javascript function call or definition (STRING)
* @return (BOOLEAN) True if the function has been changed - FALSE if this is
* cancel or submit button and has a caption
*/
function setJsFunc($js_func)
{
if(strcmp($this->att["type"], "button") == 0)
{
$this->att["OnClick"] = $js_func;
return true;
}
else
{
return false;
}
}
/**
* Display the button within the form.
*/
function display()
{
echo "<input ";
Composant::affiche();
echo "/>\n";
}
}
/**
* This class is used to create a textbox, a password box or a text area
*/
class Text extends Component
{
/**
* Constructor that initializes the text component with compulsory values
* @param name Name of this component. Be careful that this name have to be unique within a single form (STRING)
* @param type (INTEGER)
* <ul>
* <li>1 => a textbox </li>
* <li>2 => a textarea </li>
* <li>3 => a textbox used for password ('*' are insered during completion)</li>
* <li>4 => an hidden textbox</li>
* </ul>
* @param default The default value (STRING)
*/
function Text($name = "text", $type = 1, $default)
{
//Call the super constructor
$this->Component($name, $default);
//Choose the type and the specific attribute
switch($type)
{
case 2:
$this->box_or_area = "textarea";
break;
case 3:
$this->box_or_area = "input";
$this->att["type"] = "password";
case 4:
$this->box_or_area = "input";
$this->att["type"] = "hidden";
default:
$this->box_or_area = "input";
$this->att["type"] = "text";
}
}
/**
* Set the textbox size. This function can only be used with textbox or password
* @param size The textbox size in pixels (INTEGER)
* @return (BOOLEAN) True if the size has been changed - False if it's not the
* right type.
*/
function setSize($size = 75)
{
if (strcmp($this->box_or_area, "textarea") != 0)
{
if(strcmp($this->att["type"], "hidden") != 0)
{
this->att["size"] = $size." px";
return true;
}
else
return false;
}
else
return false;
}
/**
* Set the maximum number of characters that a text box can contain.
* This function can only be used with textbox or password
* @param nb_char The maximum number of characters (INTEGER)
* @return (BOOLEAN) True if the number has been changed - False if it's not the
* right type.
*/
function setMax($nbChar)
{
if (strcmp($this->box_or_area, "textarea") != 0)
{
if(strcmp($this->att["type"], "hidden") != 0)
{
this->att["maxlength"] = $nbChar;
return true;
}
else
return false;
}
else
return false;
}
/**
* Set the text area size in number of rows X number of columns.
* @param rows The number of rows (INTEGER)
* @param cols The number of columns (INTEGER)
* @return (BOOLEAN) True if the size has been changed - False if it's not the
* right type.
*/
function setDimension($rows, $cols)
{
if (strcmp($this->box_or_area, "textarea") == 0)
{
this->att["rows"] = $rows;
this->att["cols"] = $cols;
return true;
}
else
return false;
}
/**
* Set the way new line character is handled. It only works for text area
* @param new_line This parameter can take these values :
* <ul>
* <li>1 => The text area doesn't accept new line </li>
* <li>2 => The text area accepts new line but they are not sent </li>
* <li>3 => The text area accepts new line and these are sent</li>
* </ul>
* @return (BOOLEAN) True if the method has been changed - False if it's not the
* right type.
*/
function newLineHandling($new_line)
{
if (strcmp($this->box_or_area, "textarea") == 0)
{
switch($new_line)
{
case 1:
$this->att["wrap"] = "off";
case 3:
$this->att["wrap"] = "physical";
default:
$this->att["wrap"] = "virtual";
}
return true;
}
else
return false;
}
/**
* Display the textbox within the form.
*/
function display()
{
echo "<".$this->box_or_area." ";
Composant::affiche();
echo "/>\n";
}
/**
* @var box_or_area Used to store if this object is a <input/> xhtml tag or
* an <textarea> tag.
*/
var $box_or_area;
}
/**
* This class is used to create a radio button. In opposition with other
* components, you can have more than one option button with the same name.
* In that case, the value sent to the server will be the one contained in
* $data_sent of the selected radio button.
*/
class Option extends Component
{
/**
* Constructor that initializes the button with compulsory values
* @param name Name of this button. (STRING)
* @param caption The caption displayed near the radio button (STRING)
* @param data_sent The string that's sent when the form is submited if the option is selected.
*/
function Option($name = "option", $caption="Option", $data_sent="Option selected")
{
$this->Component($name);
$this->att["type"] = "radio";
$this->att["value"] = $data_sent;
$this->caption = $caption;
}
/**
* Set the button which will be selected by default among all the buttons
* that have the same name.
* @param $selected True if the button has to be selected - False if not (BOOLEAN)
*/
function selected($selected = true)
{
if($selected)
$this->selected = "checked";
else
$this->selected = "";
}
/**
* Set the data which will be sent if the button is selected
* @param data_sent The data that 'll be sent to the server (STRING)
*/
function setDataSent($data_sent)
{
$this->att["value"] = $data_sent;
}
/**
* Display the radio button within the form.
*/
function display()
{
echo "<input ";
Composant::affiche();
echo $this->selected." /> ".$this->caption."\n";
}
/**
* @var caption The text value that follows the radio button. (STRING)
*/
var $caption;
/**
* @var caption Flag if the radio button must be selected by default. (STRING)
*/
var $selected;
}
/**
* This class is used to create a check button.
*/
class Check extends Component
{
/**
* Constructor that initializes the button with compulsory values
* @param name Name of this button. Be careful that this name have to be unique within a single form (STRING)
* @param caption The caption displayed near the check button (STRING)
* @param data_sent The string that's sent when the form is submited if the option is checked.
*/
function Check($name = "check", $caption="Check", $data_sent="Option Checked")
{
$this->Component($name);
$this->att["type"] = "checkbox";
$this->att["value"] = $data_sent;
$this->caption = $caption;
}
/**
* Check or Uncheck the button
* @param $selected True if the button has to be checked - False if not (BOOLEAN)
*/
function checked($checked = true)
{
if($checked)
$this->checked = "checked";
else
$this->checked = "";
}
/**
* Set the data which will be sent if the button is checked
* @param data_sent The data that 'll be sent to the server (STRING)
*/
function setDataSent($data_sent)
{
$this->att["value"] = $data_sent;
}
/**
* Display the check button within the form.
*/
function display()
{
echo "<input ";
Composant::affiche();
echo $this->checked." /> ".$this->caption."\n";
}
/**
* @var caption The text value that follows the radio button. (STRING)
*/
var $caption;
/**
* @var caption Flag if the radio button must be selected by default. (STRING)
*/
var $selected;
}
/**
* This class is used to create a dropdown list
*/
class Listbox extends Component
{
/**
* Constructor that initializes all the compulsory attributes.
* @param name The dropdown list name. Be careful that this name have to be unique within a single form (STRING)
* @param width The dropdown list width. It's given in pixels (INTEGER)
* @param options The list of options contained in the list (KEYED ARRAY of STRING)
* where the key is the text contained in the list and the value is the one that
* will be sent to the server.
* @param displayed_options The number of list items that will be shown to the user. (INTEGER)
* @param multiple True if the selection can be multiple - False if not (BOOLEAN)
*/
function Listbox($name = "list", $width= 75, $options = array(), $displayed_options = 5, $multiple = "false")
{
$this->Composant($name);
$this->options = $options;
$this->att["size"] = $displayed_options;
$this->multiple = $multiple;
$this->width = $width." px";
}
/**
* Set the different items contained in the dropdown list.
* @param options The list of options contained in the list (KEYED ARRAY of STRING)
* where the key is the text contained in the list and the value is the one that
* will be sent to the server.
*/
function setOptions($options = array())
{
$this->options = $options;
}
/**
* Set the list item that will be selected when the form is displayed.
* @param index The index number of the option that should be selected. (INTEGER)
* @return (BOOLEAN) True if the item index has been found - False if the index is out of bounds.
*/
function setSelectedItem($index = 0)
{
if(is_array($this->options))
{
if ($index>=1 && $index<=count($this->options))
{
$this->default = $index;
return true;
}
else
return false;
}
else
return false;
}
/**
* Set if the user can select more than one item in the list or not.
* @param multiple True if the selection can be multiple - False if not (BOOLEAN)
*/
function setMultiple($multiple = "false")
{
$this->multiple = $multiple;
}
/**
* Set the number of item that are shown to the user when the list is displayed.
* @param displayed_options The number of list items (INTEGER)
*/
function setDisplayedOptions($displayed_options = 5)
{
$this->att["size"] = $displayed_options;
}
/**
* Set the list width.
* @param width The dropdown list width. It's given in pixels (INTEGER)
*/
function setWidth($width = 75)
{
$this->width = $width." px";
}
/**
* Display the dropdown list.
*/
function display()
{
//Display the <select> xhtml tag
echo "<select ";
//Display the component attributes
Component::display();
if($this->multiple)
{
echo "multiple ";
}
echo ">\n";
//Display all the options
if(is_array($this->options))
{
//Point to the first element
reset($this->options);
//Set the pointer position to start
$pos = 0;
//Loop through the array
while(list($text, $value) = each($options))
{
//Display the xhtml <option> tag
echo "<option value=\"".$value."\" width=\"".$this->width."\" ";
//If the current position in the array is the default option, write it down.
if($this->default == $pos)
{
echo "selected ";
}
echo ">\n";
//Increment the position counter
$pos++;
//Display the option caption
echo $text."\n";
echo "</option>\n";
}
}
//Display the closing xhtml tag.
echo "</select>\n";
}
/**
* @var multiple True if the selection can be mutliple - False if not (BOOLEAN)
*/
var $multiple;
/**
* @var options The list of options contained in the list (KEYED ARRAY of STRING)
*/
var $options = array();
/**
* @var default The option that will be selected by default when the list is displayed (INTEGER)
*/
var $default;
/**
* @var width The dropdown list width. It's given in pixels (INTEGER)
*/
var $width;
}
/**
* This class is used to create a form. Every component can be added to this form.
*/
class Form extends Component
{
/**
* Constructor that initializes the form with compulsory values
* @param name Name of this button. Be careful that this name have to be unique within a single page (STRING)
* @param type (INTEGER)
* <ul>
* <li>
* 1 => the method used to send the form data is POST. (Default)
* These values can be used with $_POST["name"] = value
* </li>
* <li>
* 2 => the method used to send the form data is GET. The data are
* send through the URL.
* These values can be used with $_GET["name"] = value
* </li>
* </ul>
* @param script The absolute or relative path to the script that will handle the form data (STRING)
*/
function Form($name, $type, $script)
{
$this->Component($name);
$this->components = array();
switch($type)
{
case 2:
$this->att["method"] = "get"
default:
$this->att["method"] = "post"
}
$this->att["action"] = $script;
}
/**
* Add a component to the form.
* @param component A Component object (Button, Listbox, etc.) (COMPONENT CLASS)
* @param br True if a newline character should be displayed just after this component - False if not (BOOLEAN)
* @return (BOOLEAN) True if the component has been added - False if an error has occured
*/
function addComponent($component, $br)
{
if(isset($component))
{
if($br)
$comp = array($component, "<br/>");
else
$comp = array($component, "");
$this->components = array_push($this->components, $comp);
return true;
}
else
return false;
}
/**
* Remove a component from the form.
* @param index The index number of the componant that should be removed. (INTEGER)
* @return (BOOLEAN) True if the component has been removed - False if an error has occured
*/
function removeComponent($index)
{
if(isset($index) && $index >= 1 && $index<=count($this->components))
{
array_splice($this->components, $index-1, 1);
return true;
}
else
return false;
}
/**
* Remove all components from the form.
*/
function removeComponents()
{
this->components = array();
}
/**
* Display the form
*/
function display()
{
echo "<form ";
Component::display();
echo ">\n";
for($i=0; $i<count($this->components); $i++)
{
$this->components[$i][0]->display();
if($this->composants[$i][1])
{
echo "<br/>\n";
}
}
echo "</form>\n";
}
}
?>
Conclusion
Cette version n'a pas encore été testée en production. Peut contenir certains légers bugs. Merci de m'en faire part si vous en rencontrez.
La possibilité d'insérer des procédures de validations soit via javascript, soit via php sont pour l'instant à l'étude.
Historique
- 28 juillet 2005 20:09:58 :
- Refonte totale de cette source. Parmi les améliorations, on peut noter :
* Meilleure gestion des attributs des tags HTML
* Possibilités d'ajout et de suppression d'attributs non gérés en standart
* Simplification profonde de la classe Form
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|