Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour je débute un peu sous ZF, notamment sur le composant Zend_Form, je n'arrive pas a créer ce cas de figure assez simple pourtant... comment faire?
Il s'agit en fait de mettre du texte de type <h1>blablablabla texte </h1> dans le même formulaire.
J'ai essayé de découper le formulaire en sous-formulaire ( addSubForm() ) mais je n'arrive pas a insérer du texte entre les 2 blocs.
<form id="form1" name="form1" method="post" action=""> <label>Champ 1 <input type="text" name="champ1" /> </label> <label>Champ 2 <input type="text" name="champ2" /> </label> <h1>blablablabla texte </h1> <label>Champ 3 <input type="text" name="champ3" /> </label> <label> <input type="submit" name="Submit" value="Envoyer" /> </label> </form>
Je ne trouve pas de solutions sur ce forum et sur google non plus.
$form = new Zend_Form(); $form->addElement('text', 'champ1', array( 'label' => 'champ1' )); $form->addElement('text', 'champ2', array( 'label' => 'champ2' )); $form-> ?????? ( '<h1>blablablabla texte </h1>' ); $form->addElement('text', 'champ3', array( 'label' => 'champ1' ));
Heeeeeeeeeelp !
Hors ligne
Haha, en effet, comme moi au début, j'ai trouvé que la manipulation des formulaires était complexes mais permet tellement de possibilité lorsqu'on maîtrise bien ! Plus tard tu ne vas pas regretter, crois moi !
Bref, comme tu débute avec Zend, je vais t'expliquer une façon simple mais qui n'est pas nécessairement la meilleure selon les cas !
Présentement, dans ta vue, tu dois faire ceci :
//Dans ton fichier view .phtml echo $this->form;
Mais pour des formulaires dont la disposition est complexes, tu peux créer ton formulaire en HTML et appeler seulement les éléments de ton formulaire un à un. C'est plus simple pour débuter :
//Dans ton fichier view .phtml <form name='formName' method='post' enctype='multipart/form-data'> <fieldset> <h3>Mon titre</h3> <table > <tr> <td>".$this->form->champ1."</td> <td>".$this->form->champ2."</td> </tr> <tr> <td>".$this->form->champ3."</td> <td>".$this->form->champ4."</td> </tr> </table> </fieldset> </form>
Lorsque tu vas devenir à l'aise avec les validator et les éléments de formulaire, je te conseils de regarder le zend_form_decorator pour modifier la génération de ton formulaire.
http://framework.zend.com/manual/fr/zen … ators.html
Et puis, si des champs de formulaire revienne souvent dans ton site ou même dans tes projets (ex: champs téléphone, nom, etc...) Tu peux créer tes propres éléments de formulaire avec tes validations préprogrammés !!!
Tu pourras ainsi appeler ton élément de formulaire de cette façon:
//Dans la classe de ton formulaire $postalcode= new Zend_Form_Element_CodePostal('postalcode');
http://framework.zend.com/manual/fr/zend.form.elements.html
Dernière modification par probitaille (07-12-2009 22:16:41)
Hors ligne
Salut merci probitaille d'avoir pris la peine de me répondre.
le soucis c'est que je fais déjà comme la facon que tu me propose qui est en effet beaucoup plus simple, pour l'instant c'est la seule méthode qui marche que j'ai trouvé mais je remarque que même en fesant comme ça j'ai toujours besoin des decorators ! Je me disais autant faire ça directement dans ma classe qui étant Zend_Form.. que de passer par la vue. Bref je suis quand même étonné qu'une chose aussi simple que de rajouter un texte dans un formulaire ne soit pas prévue!
Bref ya t'il un moyen de suprimer la balise form d'un formulaire Zend, j'ai dans l'idée avec ça d'arrivé a mon resultat en découpant mon formulaire en plusieurs petit pour y injecter du texte. L'idée ici serais d'avoir une balise form dans ma vue et je ferais appel a chaque sous formulaire de mon formulaire sans sa balise form.
sans ça j'ai des choses de ce genre :
<form id="principal"> Texte bla bla <form id="sousform1"> .... </form> Titre sous formulaire1 <form id="sousform2"> .... </form> Titre sous formulaire2 <form id="sousform2"> .... </form> </form>
Sinon comment faire avec les décorators ?
Hors ligne
//Dans ton fichier view .phtml <form name='formName' method='post' enctype='multipart/form-data'> <fieldset> <h3>Mon titre</h3> <table > <tr> <td>".$this->form->champ1."</td> <td>".$this->form->champ2."</td> </tr> <tr> <td>".$this->form->champ3."</td> <td>".$this->form->champ4."</td> </tr> </table> </fieldset> </form>
Si tu remarques bien dans cette example, la balise form de provient pas de la classe de mon formulaire, je l'ai écrite manuellement dans mon .phtml. Je ne fais pas appel à TOUT le formulaire mais seulement aux éléments
$this->form->monElement.
Sinon, si ton texte est pour décrire tes champs, tu as toujours le setLabel pour créer un label sur tes champs mais je ne pense pas que c'est ce que tu cherches.
Bref je suis quand même étonné qu'une chose aussi simple que de rajouter un texte dans un formulaire ne soit pas prévue!
En fait, il a des champs prévus dans Zend pour écrire certain texte ( setDescription ou setLabel ) sinon, tu peux toujours manipuler et transformer ta classe de formulaire pour généré tes textes comme tu le souhaites mais je ne te conseils pas. La meilleure solution pour toi serait comme je l'ai déjà de NE PAS appeler ta classe de formulaire mais seulement tes éléments.
Hors ligne
Qqun a essayer les displaygroupes ?? Car, vous rechercher à regroupé des zones, c'est fait pour, suffit après de modifier les décorateurs selon votre convenance
Hors ligne
Pour l'utilisation des decorators, j'ai créer un dossier decorators dans mon dossiers forms, c'est la que vont se trouver les classes perso decorators.
Pour relier les decorator avec tes formulaires, tu peux faire comme ceci dans ton controller lors de l'appel à ton formulaire:
$form = new Default_Form_SearchByType(); $form->addElementPrefixPath('Default_Form_Decorator', APPLICATION_PATH.'/forms/decorators/', 'decorator'); $this->view->form1 = $form1;
Mes decorators sont construit selon l'exemple officiel:
http://framework.zend.com/manual/en/zen … ors.custom
Puis dans la classe de mon formulaire, je set les decorators pour mes éléments, par exemple, ici mon submit perso
$submit = new Zend_Form_Element_Submit('submit'); $submit ->setAttrib('id', 'submitbutton') ->setDecorators(array('Submit'));;
Je vous conseil fortement de lire la documentation officiel...
Pour les éléments perso c'est la même chose, dossier elements dans dossier forms, appel semblable:
$form->addPrefixPath('Default_Form_Elements_', APPLICATION_PATH.'/forms/elements/', 'element');
Je vous mets là la façon que je fonctionne, ceci dit, ce n'est pas nécessairement la meilleure mais ça fonctionne comme je veux !!
Hors ligne
merci de ton aide je vais faire comme tu as dis me créer une collections d'élément que je peux réutiliser partout ça me permettras de garder le controller des validateurs et de personnalisé mon formulaire dans ma vue comme je veux. Le truc c'est que avec zend il y a tellement de manière différente de faire qu'on ne sait pas laquelle choisir
Hors ligne
C'est exact ! Mais tu vas voir, quand tu vas avoir créé tes éléments perso et t'avoir bien adapté avec ta propre façon, tu vas les reprendre de projet en projet ce qui va accélérer énormément la création de formulaire, la validation surtout !
Mon dieu, je me rappel du temps ou j'écrivais des dizaines et dizaine de ligne pour valider un formulaire
Maintenant, je prog à 10 forms à l'heure
10f/h XD Nouvelle vitesse de prog
Hors ligne
Pages: 1