jeudi 4 février 2010

Corriger le bug Zend Dojo Editor sous firefox

Après mes péripéties sous IE avec le Zend_Dojo_Editor, voilà que j'en ai avec Firefox. Impossible de rendre le champs descriptif (éditeur de texte) obligatoire sous Firefox.  J'ai donc fais un debug des variables que me transmet le formulaire lorsque je laisse le champs vide dans le formulaire. Sous IE, Chrome, Safari j'ai :

Array (1)(
[descriptif] =>  string(0) ""
)
Sous Firefox j'ai eu la surprise de voir :
Array (1)(
[descriptif] =>  string(36) "<br _moz_editor_bogus_node="TRUE" />"
)
C'est quoi ce bordel ! Pour reprendre mon exemple précédent, voici ce que j'avais au départ :
class Default_Form_Demande extends Zend_Dojo_Form
{
//...

/**
*
* @see    http://framework.zend.com/manual/en/zend.form.html
* @return void
*/
public function init()
{
//...
$this->descriptif = new Zend_Dojo_Form_Element_Editor('descriptif');
$this->descriptif->setLabel('Descriptif de la demande')
->setRequired(true)
->setFilters(array('StringTrim'))
->setEditActionInterval(2)
->setHeight('250px');
$this->addElement($this->descriptif);
//...
}
//...
}  
Pour corriger ce problème lier à Firefox j'ai donc ajouter un filtre sur le champs descriptif. Maintenant j'ai :
class Default_Form_Demande extends Zend_Dojo_Form
{
//...

/**
*
* @see    http://framework.zend.com/manual/en/zend.form.html
* @return void
*/
public function init()
{
//...
$this->descriptif = new Zend_Dojo_Form_Element_Editor('descriptif');
$this->descriptif->setLabel('Descriptif de la demande')
->setRequired(true)
->setFilters(array('StringTrim',
                        array('PregReplace',array('#<br _moz_editor_bogus_node="TRUE" \/>#i',''))
            ))
->setEditActionInterval(2)
->setHeight('250px');
$this->addElement($this->descriptif);
//...
}
//...
}
Après l'ajout de ce petit filtre :
array('PregReplace',array('#<br _moz_editor_bogus_node="TRUE" \/>#i',''))
Le formulaire reprend son fonctionnement normal, et les champs Zend_Dojo_Form_Element_Editor qui sont requis redeviennent obligatoires.