Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 09-04-2009 12:34:31

Le_Trurc
Nouveau membre
Date d'inscription: 09-04-2009
Messages: 2

[OK][Zend_Form][1.7]Traitement commun, décorateurs, groupe d'affichage

Bonjour,

Je ne parviens pas à faire ce que j'aimerais, et je ne suis pas sûr de m'y prendre correctement.
Tous mes formulaires sont affichés avec une même logique.
Certains formulaires seront remaniés au cas par cas, mais tous auront cette même structure générale au sein de l'application. Notez bien que cela est spécifique à cette application. Une autre application est susceptible d'avoir d'autres exigences...

Ainsi, j'ai réussi à obtenir ce que je voulais avec un jeu de décorateur et la déclaration d'un groupe d'affichage. Cependant, ce jeu de décorateur est situé dans un contrôleur... et je ne peux pas le réutiliser pour d'autres formulaire, dans d'autres contrôleurs...

Voici le jeu de décorateurs :

Code:

// Soit $form, une instance de la classe Zend_Form, avec des éléments ajoutés.

// Création du groupe de décoration commun (excluant les éléments de contrôle)
$displayGroup = array(); // tableau des noms des éléments à grouper    
foreach($form->getElements() as $element) {
    switch($element->_name) {
        case 'submit':
        case 'token' :
            break;
        default:
            $displayGroup[] = $element->_name;
            break;
}  }        
        
// Création d'un nouveau groupe d'affichage 'form'
$form->addDisplayGroup($displayGroup, 'form',
    array('disableLoadDefaultDecorators' => true)
);

// Décorateur pour le groupe d'affichage 'form' précédemment créé
$loginDecorators = array(
    'FormElements',
    array('decorator'=>array('1er'=>'HtmlTag'), 'options'=>array('tag'=>'dl'))
);
$form->getDisplayGroup('form')->setDecorators($loginDecorators);
$form->getDisplayGroup('form')->setOrder(1);

// Décorateurs pour le bouton de soumission
$submitDecorators = array(
        array('ViewHelper'),
        array('Errors'),
        array('decorator'=>array('1er'=>'HtmlTag'),'options'=>array('tag'=>'p', 'class'=>'form_control')),
);
$form->getElement('submit')->setDecorators($submitDecorators);
$form->getElement('submit')->setOrder(999);

// Décorateurs pour les champs cachés
$hiddenDecorators = array(
        array('ViewHelper'),
        array('Errors'),
        array('decorator'=>array('1er'=>'HtmlTag'),'options'=>array('tag'=>'div', 'style'=>'display:none;')),
);
$form->getElement('token')->setDecorators($hiddenDecorators);
$form->getElement('token')->setOrder(0);

// Décorateurs pour le formulaire
$formDecorators = array(
        array('description', array('tag'=>'h4')),
        'FormElements',
        'Form'
);
$form->setDecorators($formDecorators);

J'aimerais donc rendre  accessible ce jeu de décorators/displayGroups depuis mes contrôleurs !
J'ai essayé d'étendre la classe Zend_Form_Decorator_Abstract, puis de la passer au formulaire (Utilisation des méthodes Zend_Form->addPrefixPath() puis Zend_Form->addDecorator()), mais cela ne fonctionne pas du tout. maintenant, je comprends pourquoi, cela dit (Cela ne marche que pour un seul élément). Mais bon... du coup, j'ai plus d'idée. sad
Comment vous y prendriez-vous ?

Je vous serais très reconnaissant si vous vouliez bien m'aider !
@+

Dernière modification par Le_Trurc (15-04-2009 15:44:06)

Hors ligne

 

#2 09-04-2009 19:25:10

Le_Trurc
Nouveau membre
Date d'inscription: 09-04-2009
Messages: 2

Re: [OK][Zend_Form][1.7]Traitement commun, décorateurs, groupe d'affichage

Re...

Bon, bah du coup, je me suis fait une interface (Que je mets dans ma librairie perso) que j'implémente dans une classe (Que je mets quelque part dans mon application, configuré avec Zend_Config).
Une méthode statique qui prend un objet Zend_Form en paramètre et qui le retourne, une fois les décorations appliquées.

J'ai l'impression que c'est un peu bourrin... mais ça fonctionne exactement comme je le souhaitais.

Bon, enfin si vous avez d'autres (meilleurs, les autres, vous pouvez les garder) idées, n'hésitez pas.

@+

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages