class Default_Form_Demande extends Zend_Dojo_FormSeulement voilà lorsque je suis passé aux tests, j'ai eu une drôle de surprise. En fonction du navigateur, le formulaire ne retourne pas la même structure de donnée. Sous IE6, Chrome, Safari j'ai eu :
{
//...
/**
*
* @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);
//...
}
//...
}
Array (Sous Firefox j'ai eu :
[descriptif] => Array (
[Editor] => "bug test 2"
)
)
Array (Ce qui n'est pas tout à fait la même chose. Google étant mon ami, j'ai chercher une solution. Après plusieurs essaies le seul truc qui tenais la route a été de modifier la class suivante : Zend/Dojo/View/Helper/Editor.php. Voici donc ce que j'ai fais:
[descriptif] => "bug test 2"
)
- j'ai renommé la méthode editor en editor_old (vers la ligne 66)
- et je l'ai remplacé par celle-ci :
/**Alors je sais, c'est pas bien j'ai touché au code source du Zend Framework, donc attention lors des mises à jour de pas écraser cette modif (sauf si Zend à apporter une mise à jour concernant ce point).
* dijit.Editor
*
* @param string $id
* @param string $value
* @param array $params
* @param array $attribs
* @return string
*/
public function editor($id, $value = null, $params = array(), $attribs = array())
{
$hiddenName = $id;
if (array_key_exists('id', $attribs)) {
$hiddenId = $attribs['id'];
} else {
$hiddenId = $hiddenName;
}
$hiddenId = $this->_normalizeId($hiddenId);
$hiddenAttribs = array(
'id' => $hiddenId,
'name' => $hiddenName,
'value' => $value,
'type' => 'hidden',
);
$editorAttribs = array(
'id' => $hiddenId . '-Editor',
'name' => $this->_normalizeEditorName($hiddenName)
);
$editorAttribs = $this->_prepareDijit($editorAttribs, $params, 'textarea');
$this->_createGetParentFormFunction();
$this->_createEditorOnSubmit($hiddenId, $hiddenId . '-Editor');
$html = '<input' . $this->_htmlAttribs($hiddenAttribs) . $this->getClosingBracket()
. '<div dojoType="' . $this->_module . '" ' . $this->_htmlAttribs($editorAttribs) .'>'.$value.'</div>';
return $html;
}
Pour en revenir au sujet, pourquoi ce bug ? bah d'après les explications que j'ai réussit a traduire. Il semblerait que lorsque zend à implémenter l'éditeur de Dojo, celui-ci utilisait un textarea. Or depuis il a dû y avoir des mises à jour de Dojo, qui utilise maintenant un div pour faire le rendu. Voilà j'espère que ce post vous aura aidé.