Un decorator pour ajouter un suffixe ou un préfixe à un Zend_Form_Element

Logo Zend Framework

Ce décorateur vous permets d'ajouter du code HTML avant ou après un élément de formulaire.


<?php
class Wiip_Form_Decorator_Html extends Zend_Form_Decorator_Abstract
{
  public function 
render($content) {
    
$placement $this->getPlacement();
    switch (
$placement) {
      case 
self::APPEND:
        return 
$content $this->_options['html'];
        break;
      case 
self::PREPEND:
        return 
$this->_options['html'] . $content;
        break;
    }
  }
}
?>

Exemples d'utilisation

On ajoute un lien Annuler à un bouton :

<?php
$submit 
= new Zend_Form_Element_Submit('create');
$submit->setLabel('Créer le site')
       ->
addPrefixPath('Wiip_Form_Decorator''Wiip/Form/Decorator/''decorator')
       ->
setDecorators(array(
         
'ViewHelper',
         array(
'Html', array('html' => ' ou <a href="/">Annuler</a>'))
       ));
$this->addElement($submit);
?>

On ajoute un suffixe et un préfixe à un champ texte :

<?php
$url 
= new Zend_Form_Element_Text('url');
$url->setLabel('Adresse du site :')
     ->
setDescription('Vous ne devez utiliser que des lettres, des chiffres ou des tirets.')
     ->
setRequired(true)
     ->
addPrefixPath('Wiip_Form_Decorator''Wiip/Form/Decorator/''decorator')
     ->
setDecorators(array(
       
'ViewHelper',
       array(array(
'prefix' => 'Html'), array('html' => 'http://''placement' => 'prepend')),
       array(array(
'suffix' => 'Html'), array('html' => '.microsito.fr''placement' => 'append')),
       
'Description',
       
'Errors',
       array(
'HtmlTag', array('tag' => 'dd')),
       array(
'Label', array('tag' => 'dt'))
     ));
$this->addElement($url);
?>

On peut également l'utiliser pour ajouter le symbole Euro à un champ destiné à recevoir un montant.

Ajout du symbole Euro à un champ de formulaire

Comments

Magnifique, juste ce que je cherchais

Merci beaucoup.

J'ai utilisé ce décorator pour faire une aide de champ. Je voulais qu'à côté d'un champ Zend_Dojo_Form s'affiche une icône. Lorsque l'on survole l'icône avec la souris, un DIJIT TOOLTIP DOJO affiche une jolie aide contextuelle.

Exemple d'utilisation pour un champ d'une form :

// essai d'un décorator sur texte 2
$texte2->addPrefixPath('Wiip_Forms_Decorator','Wiip/Forms/Decorator','decorator')
->setDecorators(array(
'Viewhelper',
//'Label',
// affiche le code HTML après le champ
array('Html',array('html' => '')),
'Errors', // afficher l'erreur APRES le signe '%'
array('HtmlTag', array('tag'=> 'dd')), // les données sont entre dd
array('Label', array('tag'=> 'dt')), // le label entre dt
'Description'
));

La balise "a" ajoutée après le champ possède un id. C'est lui qui appelera le code Javascript de la Dijit Tooltip Dojo.

Pour cela, il faut ajouter dans la vue :

ATTENTION, j'ai du enlever les crochets <> de certaines commandes pour qu'elles figurent dans ce blog...

script
djConfig="parseOnLoad: true";
dojo.require("dijit.Tooltip");
dojo.require("dijit.form.Button");
/script

un test d'utilisation d'un testtooltip2
codé en dur dans la vue HTML !

Ensuite, pour éviter de coder "en dur" dans la vue, adaptez pour que les messages d'aide soient en base de donnée, dans un fichier ini, etc.

Jean

Oupps, vous l'aurez corrigé vous même :

L'id (voir le décorator du formalaire) se nomme testtooltip2, il faut donc que dans la vue, le connectId fasse référence à cet id testooltip2 (et non testtooltip1...)

Jean

Add new comment