Les widgets qui dérivent de Pxxo_Widget_Input sont des champs de formulaires (Text, Textarea, Captcha …).
Pxxo_Widget_Input est un widget particulier, c'est une classe abstraite, il ne peut pas être instancié directement. Il propose une interface générique qui devra être respectée par tous les widgets qui en dérivent (Text,Textarea,Password…). Nous obtenons ainsi une série de widgets homogènes qui permet alors au widget Form de construire des formulaires complets constitués de ces widgets.
Tous ces paramètres sont communs à tous les types de champs (Text, Textarea, Password, …) :
| Nom | Type | Valeur par défaut | Description |
|---|---|---|---|
| id | String | null | L'identifiant du champ. Indiquer une valeur permet de retrouver plus facilement ses petits lorsque l'on récupère les résultats du formulaire (facultatif : si aucun identifiant n'est indiqué, un entier généré automatiquement sera utilisé en guise d'identifiant) |
| type | String | null | Le type du champ (obligatoire si le paramètre 'class' n'est pas indiqué) |
| value | Mixed | null | La valeur initiale du champ (son format dépend du type du champ considéré). |
| label | String | ”” | Le texte descriptif du champ. Il sera en général affiché sur sa gauche. ATTENTION : uniquement valable si l'input est utilisé par le Widget Form. |
| size | Mixed | null | La taille du champ (son format dépend du type du champ considéré, certains champs ignorent ce paramètre). |
| required | Bool | false | Permet d'indiquer qu'un champ est obligatoire |
| disabled | Bool | false | Permet d'indiquer qu'un champ est désactivé (grisé) |
| readonly | Bool | false | Permet d'indiquer qu'un champ est en lecture seule (très semblable à disabled mais le texte reste sélectionnable) |
| validate_callback | callback | null | Permet d'indiquer une callback qui se chargera de valider le champ lors de sa soumission. Son premier paramètre est un tableau contenant les paramètres du champ (la clé “result” sera particulièrement utile). Son second paramètre (facultatif) est une référence vers l'instance du formulaire parent. Les éventuelles erreurs doivent être retournées par la callback sous la forme d'un tableau de chaînes de caractères. |
| class | String | null | Le nom de la classe de l'input (obligatoire si 'type' n'est pas indiqué). Ce paramètre est utilisé pour instancier un champ personnalisé (spécifique pour votre application). (cf exemple ci-dessous) |
Remarque : il existe un attribut result qui est rempli automatiquement par le widget input. Il contient la valeur soumise par l'utilisateur.
Un exemple d'intégration de champs Text avec validation personnalisée dans un formulaire :
require_once "Pxxo/Widget/Form.php"; $params = array(); $params['inputs'][] = array('id' => 'id_disabled', 'label' => 'Un input text disabled', 'type' => 'text', 'value' => 'valeur disabled', 'size' => 50, 'required' => true, 'disabled' => true, ); $params['inputs'][] = array('id' => 'id_readonly', 'label' => 'Un input text en lecture seule', 'type' => 'text', 'value' => 'valeur readonly', 'size' => 50, 'required' => true, 'readonly' => true, ); $params['inputs'][] = array('id' => 'id_text_numeric', 'label' => 'Un input avec validation personnalisée', 'type' => 'text', 'validate_callback' => 'numerictext_validate_callback', ); $o = new Pxxo_Widget_Form($params); function numerictext_validate_callback($input) { $errors = array(); if (!is_numeric($input['result'])) $errors[] = 'Ce champ doit impérativement être un nombre'; if (is_numeric($input['result']) && $input['result'] <= 100) $errors[] = 'Ce nombre doit être supérieur à 100'; if (is_numeric($input['result']) && $input['result'] <= 10) $errors[] = 'Ce nombre doit être supérieur à 10'; return $errors; }
Cette procédure explique comment créer un nouveau widget Input.
Pxxo_Widget_Input : class Pxxo_Widget_Input_Text extends Pxxo_Widget_Input
Pxxo_Widget_Input :$value doit être utilisé pour indiquer les valeurs initiales à charger dans le champ à son affichage initiale. C'est ce paramètre que l'utilisateur du widget (le développeur) utilisera pour initialiser le widget.$result sera remplie avec les valeurs soumises du champ. Si l'utilisateur n'a rien modifié, sa valeur sera logiquement identique à celle de $value.$displayed_value doit être utilisée par votre template pour initialiser les données de votre champ. Sa valeur sera soit le contenu de $value, soit le contenu de $result si le formulaire a été soumis. La méthode print_attribut peut-être utilisée dans le cas où la valeur est affichée en tant qu'attribut, exemple :<?php $Self->print_attribut('value', $displayed_value); ?>
hook_validate() peut-être surchargée pour valider plus finement le champ. La méthode renvoie un tableau vide si le champ est valide et un tableau d'erreurs (chaîne de caractères) au cas où le champ n'est pas valide.hook_assign_submitted_value() peut être surchargée pour assigner l'attribut $result avec les données soumises de votre champ. Cette opération est utile lorsque les données du champ ne sont pas directement récupérables de cette façon :$this->result = $this->getInputVar($this->get_name_attribute());
hook_assign_displayed_value_from_result() peut être surchargée pour altérer la valeur de $displayed_value une fois que les données soumises ont été récupéré. Par exemple lorsqu'un mot de passe est soumis on ne désire pas l'afficher après soumission du formulaire pour des raisons de sécurité.hook_assign_displayed_value_from_init_value() peut être surchargée pour altérer la valeur de $displayed_value lorsque le formulaire s'affiche pour la première fois (avant d'être soumis). En général pas besoin de surcharger cette méthode.hook_assign_modified_attribute() peut être surchargée pour calculer et assigner la valeur de l'attribut modified. Cet attribut vaut true lorsque la valeur soumise ($result) est différente de la valeur initiale fournie par le développeur ($value), il vaut false sinon.hook_on_pre_submit() peut être surchargée. Elle sera exécutée par le formulaire au tout début de la procédure de soumission. L'input peut ainsi réaliser des opérations préliminaires juste avant de passer à la validation.hook_on_post_form_submit() peut être surchargée. Elle sera exécutée par le formulaire à la fin de la procédure de soumission si tout s'est bien passé (toutes les validations sont sans erreur). L'input peut ainsi réaliser des opérations post-opératoires dans le cas où tout s'est bien passé.hook_get_onsubmit_javascript() peut être surchargée. Elle doit retourner du code javascript qui sera inséré par le formulaire dans son attribut “onsubmit”.Voici un exemple de création d'un champ spécifique (simple champ texte avec validation de la taille saisie) :
require_once "Pxxo/Widget/Form.php"; require_once "Pxxo/Widget/Input.php"; class my_customized_input extends Pxxo_Widget_Input { /** * @var array paramètres spécifique pour ce type champ * @access private */ var $_params = array('maxlength'); /** * @var taille maximun du texte à saisir * @access public */ var $maxlength = 100; function __construct($params = array()) { parent::__construct($params, __FILE__); } function index() { parent::index(); $this->setTemplateRaw('index', sprintf('<input type="text" %s %s %s %s %s %s />', $this->get_common_attributs(), $this->get_attribut('value', $this->value), $this->get_attribut('size', $this->size), $this->get_attribut('disabled', $this->disabled === true ? 'disabled' : null), $this->get_attribut('readonly', $this->readonly === true ? 'readonly' : null), $this->get_attribut('maxlength', $this->maxlength) ) ); } function hook_validate($submitted_value) { $errors = parent::hook_validate($submitted_value); if (mb_strlen($submitted_value,'UTF8') > $this->maxlength) $errors[] = sprintf('Le texte ne doit pas dépasser %d caractères',$this->maxlength); return $errors; } } $params = array(); $params['inputs'] = array(); $params['inputs'][] = array('id' => 'id_de_mon_test2', 'label' => 'Exemple d\'input personnalise', 'class' => 'my_customized_input', 'size' => 50, 'required' => true, ); $o = new Pxxo_Widget_Form($params); $o->addDecorator('Pxxo_Widget_Decorator_Core'); $o->main(); $o->dump();
©2003-2010 Pxxo
Partenaires : INIST-CNRS | Sourcesup | Web2.0 chat server | Micropolia | Jeux gratuits | Areno