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
Portrait de Anonyme21232

Magnifique, juste ce que je

Magnifique, juste ce que je cherchais

Portrait de Jean

Merci beaucoup. J'ai utilisé

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' => '<a  id="testtooltip2" ><img  height="16" width="16" alt="Aide" src="/img/help.png"/></a>')),
         '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
 
 
<div dojoType="dijit.Tooltip" connectId="testtooltip1" position="above">
    un <i>test</i> d'utilisation d'un <b>testtooltip2</b><br>
    codé en dur dans la vue HTML !
</div>

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

Portrait de Jean

Oupps, vous l'aurez corrigé

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

Poster un nouveau commentaire

Le contenu de ce champ ne sera pas montré publiquement. If you have a Gravatar account associated with the e-mail address you provide, it will be used to display your avatar.
CAPTCHA
La vérification ne tient pas compte des minuscules ou des majuscules.
Image CAPTCHA
Enter the characters shown in the image.