Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > Zend_Form
Zend_Form Forum d'entraide pour le composant Zend_Form du Zend Framework (création de formulaires, helpers, AJAX etc.). Avant de poster -> FAQ Zend_Form.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/10/2011, 10h20   #1
Membre actif
 
Avatar de __fabrice
 
Fabrice
Inscription : août 2004
Messages : 308
Détails du profil
Informations personnelles :
Nom : Fabrice
Âge : 40

Informations forums :
Inscription : août 2004
Messages : 308
Points : 180
Points : 180
Envoyer un message via ICQ à __fabrice Envoyer un message via MSN à __fabrice
Par défaut Ajouter un ZendX AutoComplete dans un formulaire existant, décorateurs

Salut à tous,

J'ai un léger soucis avec un autocomplete Zend_X_jQuery ('id_city'). Il marche tres bien hors d'un formulaire, tout se passe bien. Ensuite, j'ai voulu le rajouter à mon formulaire.

Il semble qu'il y ai un soucis avec les décorateurs. Voici l'erreur, et le code qui suit.
Code :
Warning: Exception caught by form: Cannot render jQuery form element without at least one decorator implementing the 'ZendX_JQuery_Form_Decorator_UiWidgetElementMarker' interface. Default decorator for this marker interface is the 'ZendX_JQuery_Form_Decorator_UiWidgetElement'. Hint: The ViewHelper decorator does not render jQuery elements correctly. Stack Trace: #0 C:\Users\FP\web\librairies\zend\library\Zend\Form\Element.php(2029): ZendX_JQuery_Form_Element_UiWidget->getDecorators() #1 C:\Users\FP\web\librairies\zend\library\Zend\Form\Decorator\FormElements.php(101): Zend_Form_Element->render() #2 C:\Users\FP\web\librairies\zend\library\Zend\Form.php(2904): Zend_Form_Decorator_FormElements->render('') #3 C:\Users\FP\web\librairies\zend\library\Zend\Form.php(2920): Zend_Form->render() #4 C:\Users\FP\web\wamp\www\my-websites\familife\trunk\web\www\application\modules\backoffice\views\scripts\agency\edit.phtml(4):
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
...
$elements['first_name'] = new Zend_Form_Element_Text('first_name');
        $elements['first_name']->setLabel('Prénom : ')
        ->setRequired(true)
        ->addFilter('StripTags')
        ->addFilter('StringTrim')
		->addValidator('notEmpty')
		->getValidator('notEmpty')->setMessage('msg agency must first name');
 
$elements['id_city']= new ZendX_JQuery_Form_Element_AutoComplete('ac');
		$elements['id_city']->setLabel('Ville ')
		->setJQueryParam('source', '/backoffice/agency/autocompleteajaxcity')
		->setJQueryParam('minLength', $this->_config->autocomplete->max_cars);
...
Les décorateurs :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 /////////////////////////////////////////////////////////////////////////////////////////
 // DECORATORS ///////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////////////////
 
        $this->setElementDecorators(array( 
            'ViewHelper',
         	//array('Errors', array('class' => 'formErrors', 'placement' => 'prepend')),            
            array(array('data' => 'HtmlTag'),  array('tag' =>'td', 'class'=> 'element')),
            array('Label', array('tag' => 'td')),
            array(array('row' => 'HtmlTag'), array('tag' => 'tr'))
        ));
 
        $elements['submit']->setDecorators(array('ViewHelper',
            array(array('data' => 'HtmlTag'),  array('tag' =>'td', 'class'=> 'element')),
            array(array('emptyrow' => 'HtmlTag'),  array('tag' =>'td', 'class'=> 'element', 'placement' => 'PREPEND')),
            array(array('row' => 'HtmlTag'), array('tag' => 'tr'))
            ));
 
        $this->setDecorators(array(
            array('FormErrors', array('label'=>'')),       	
            'FormElements',            
            array('HtmlTag', array('tag' => 'table', 'class'=> 'table_edit')),
            'Form'           
        ));
J'ai bien cherché sur le net, mais sans grand succès :
Code :
1
2
3
4
5
6
7
8
	public static $formJQueryElements = array(
        array('UiWidgetElement', array('tag' => '')), // it necessary to include for jquery elements
        array('Errors'),
        array('Description', array('tag' => 'span')),
        array('HtmlTag', array('tag' => 'td')),
        array('Label', array('tag' => 'td', 'class' =>'element')),
        array(array('row' => 'HtmlTag'), array('tag' => 'tr')),
        );
Une idée ?
Merci

Fabrice
__fabrice est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 20h28   #2
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 680
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 680
Points : 1 044
Points : 1 044
Tu ne supprimerais pas les decorateurs par defaut par hazard
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 22h17   #3
Membre actif
 
Avatar de __fabrice
 
Fabrice
Inscription : août 2004
Messages : 308
Détails du profil
Informations personnelles :
Nom : Fabrice
Âge : 40

Informations forums :
Inscription : août 2004
Messages : 308
Points : 180
Points : 180
Envoyer un message via ICQ à __fabrice Envoyer un message via MSN à __fabrice
salut,

effectivement, il y a un soucis avec les décorateurs, mais le code que j'ai posté est celui que j'utilise, rien de plus.

Donc, je ne dois pas forcement les effacer. Faudrait peut etre en rajouter au contraire ?

Fabrice
__fabrice est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2011, 17h38   #4
Membre actif
 
Avatar de shadypierre
 
Inscription : février 2009
Messages : 250
Détails du profil
Informations personnelles :
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : février 2009
Messages : 250
Points : 197
Points : 197
Quand tu utilise la fonction setElementDecorators() cela supprime tout les decorators par défaut du formulaire, il faut donc ajouter le décorateur 'UiWidgetElement' sur l'élément autocomplete
shadypierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2011, 21h25   #5
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 680
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 680
Points : 1 044
Points : 1 044
vaut mieux ajouter des décorateurs plutot que de les remplacer, après tout dépend de ce que tu veux faire.
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2011, 17h37   #6
Membre actif
 
Avatar de __fabrice
 
Fabrice
Inscription : août 2004
Messages : 308
Détails du profil
Informations personnelles :
Nom : Fabrice
Âge : 40

Informations forums :
Inscription : août 2004
Messages : 308
Points : 180
Points : 180
Envoyer un message via ICQ à __fabrice Envoyer un message via MSN à __fabrice
Hello,

Je veux bien , j'ai essayer plusieurs pistes, mais çà marche pas :
Code :
1
2
3
4
5
$elements['id_city']->setDecorators(
            array(
                'UiWidgetElement',
                array('ViewScript', array('class' => 'RegElement'))
            )
j'ai regardé du coté de ZendX_JQuery_Form_Decorator_UiWidgetElement, sans succès.

Comment faire alors ?

Fabrice
__fabrice est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2011, 22h01   #7
Membre actif
 
Avatar de shadypierre
 
Inscription : février 2009
Messages : 250
Détails du profil
Informations personnelles :
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : février 2009
Messages : 250
Points : 197
Points : 197
Les éléments ZendX sont rendu avec le décorateur UiWidgetElement alors que les autres utilisent 'ViewHelper', donc la seul chose à faire et de retirer sur l'element ZendX le decorator 'ViewHelper' (removeDecorator('ViewHelper') il me semble) et de faire un addDecorator('UiWidgetElement').
Normalement si tu as tjr une erreur ce ne sera dans tous les cas pas la même que celle que tu avais au départ et il faudra aviser en conséquence.
shadypierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h05.


 
 
 
 
Partenaires

Hébergement Web