[ZF2] Système de mask automatique sur les éléments de formulaires.

Explication pour le système de mask mis en place.

Le système est celui présent sur ce projet github : https://github.com/RobinHerbots/jquery.inputmask

Pour que le système fonctionne, il faut que les fichiers suivant soit charger avant la fermeture du body (et dans cette ordre):

  • jquery.inputmask/jquery.inputmask.js : le plugin jquery
  • PW/my.mask.js : mes mask perso qui sont utilisé (par exemple le mask pour le champ de type téléphone)

Un mask peut être précisé pour chaque élément de formulaire en le précisant comme attribue de cette élément. Par exemple, dans un abstractForm, on déclare des élément :

Certains éléments perso (que j’ai créé) ont des masques par défaut. Pour désactiver le mask par défaut il faut passé l’attribue ‘mask’ de l’élément à false. Comme si dessous :

 

 Créer un nouvel élément perso utilisant un mask

Créons par exemple un élément de type tel. Il faut créer un fichier Tel.php dans le dossier vendor/Pw/Form/Element/.

Comme nous pouvons le voir, l’ajout d’un mask ce fait simplement en ajoutant un attribue ‘mask’ aux attribues par défaut de l’élément. Ici mask à pour valeur ‘tel’ (‘mask’ => ‘tel’).

En faite, lorsque l’on ajoute un élément au formulaire et que l’on modifie l’attribue mask de l’élément, on modifie ce mask (qui est le mask par défaut de l’élément).

Pensez à ajouter la déclaration de ce nouvel élément à votre autoload :

 /module/Common/autoload_classmap.php

 

Si vous désirer ajouter un nouveau type de mask par défaut, il faut le déclarer dans PW/my.mask.js . Pour la documentation des mask et comment cela fonctionne, rendez-vous à l’adresse du plugin présente en haut de page.

 

Voila, c’est tous ce qu’il y a à faire pour ajouter un élément personnalisé ayant un mask par défaut. Il peut parfois être utile de personnaliser l’affichage d’un élément, pour cela, créer un view helper dans vendor/Pw/View/Helper/Element/ et suivez le model des élément déjà existant. Ne pas oublier de déclarer dans le fichier module.cong du module Common

 

 Comment ça marche ?

Explication sur le fonctionnement. Le mask permet à mes composants étendu de Zend de générer automatiquement le javascript qui permet d’ajouter les masks aux élément du formulaire.

Pour cela, j’avais déjà créer ma Classe FormElement qui étant la classe du même nom de ZF2. Tous les view/Helper des élément de zend (et les miens) sont étendu de cette class. Donc, au moment du rendu tous les éléments sont ‘parser’ par cette classe.

Voici la classe que j’ai étendu de Zend :

La partie qui nous intéresse pour ce module est au début de la méthode render. On teste si l’élément à un attribue mask, si c’est le cas on récupère notre classe qui gère les masks (un singleton) et on lui dit de traiter cette élément.

Pour que ma classe soit prise en compte au lieu de celle de zend il faut déclarer que l’on souhaite l’utiliser comme view_helper. Dans le fichier module.conf.php de l’un de vos module :

Ici nous indiquons que le heleper Pw\Form\View\Helper\FormElement doit être utilisé lorsque l’aide de vue  form_element est appeler. On court-circuite donc celle de zend.

 

Voyons maintenant comme fonctionne notre classe mask.php

La class est un singleton. En effet, il ne peut y en avoir qu’une à la fois, ainsi elle regroupe tous le javascript nécessaire pour un formulaire. Une autre solution aurait été de créer une instance de la class mask pour chaque formulaire. Ainsi chaque formulaire aurait eu sa propre gestion des mask, mais j’ai fait au plus rapide.

Cette class comporte deux méthodes :

  • traitementElement : elle génère le javascript nécessaire à l’ajout du mask sur l’élément. Dans un premier temps on regarde si l’élément à un ID, s’il n’en a pas on en génère un unique (cela permet de gérer les mask pour chaque éléments). Ensuite on appelle la fonction inputmask sur l’élément en question (reconnu par son id) avec pour argument le mask préciser pour l’élément.
  • getScript : Cette fonction retourne le javascript pour activer le mask sur tous les éléments du formulaire qui possède un mask. Elle vide également le javascript actuelement stocké dans le singleton (pour le réutiliser pour un autre formulaire par exemple)

 

A ce stade nous avons donc le code nécessaire à l’activation des mask dans notre singleton mask. Il nous reste à l’ajouter à la vue. J’ai choisie de l’ajouter à la fin de mon formulaire en passant par la méthode closeTag que j’appelle pour afficher le tag de fermeture de mon formulaire. Attention ! si vous affichez vos balises form manuellement, le système de mask ne fonctionnera pas.

Pour cela j’ai donc surchargé l’aide de vue \Zend\form\View\Helper\Form . Voici mon fichier \Pw\Form\View\Helper\Form :

Comme vous pouvez le voir, je ne surcharge que la méthode closeTag. En plus d’afficher la balise de fermeture, elle récupère le script de l’objet mask et l’affiche.

Comme précédemment, pour que Zend utilise notre helper au lieu du sien, il faut le lui dire dans un fichier module.conf.php (dans mon cas dans le fichier du module Common). Ce fichier devient donc :

 

 

Voila, il n’y a plus qu’a créer de nouveaux mask et de nouveaux éléments !

 

 

 

Tags:, ,

Ajouter un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *