Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Je voudrais savoir s'il est possible de créer une classe qui étend Zend_Form_Element afin d'affcher deux element au lieu d'un.
Ex :
Si dans ma définition du formulaire j'ai ceci :
... $attch = new My_Form_Element_Attachment('mesfichiers'); ...
Dans le navigateur j'aurais un truc de ce style :
... <div> <label>Fichiers</label> <div id="attachments_fields"> <input type="file" size="30" name="mesfichiers[1][file]"/> <input type="text" value="" size="60" name="mesfichiers[1][description]"/> </div> <br/> <a onclick="addFileField(); return false;" href="#">Ajouter un autre fichier</a> </div> ...
Mon code rend donc un élément Zend_Form_Element_File et un élément Zend_Form_Element_Text.
Merci d'avance
Devether
Hors ligne
le premier exemple est pour toi :
http://codeutopia.net/blog/2008/08/07/z … ator-tips/
Hors ligne
Merci de ta réponse mais ce n'est pas exactement ce que je veux faire.
En fait je voudrais que l'appel à l'élément My_Form_Element_Attachment affiche directement les deux éléments File et Text, et puisse être réutilisé dans d'autre formulaires sans avoir à ajouter tous les Decorators de l'exemple à chaque fois.
Hors ligne
Je ne suis pas du tout sur d'avoir compris ton problème, mais si j'ai bien compris, je pense que ce dont tu as besoin est un helper de vue...
Hors ligne
Pour être plus clair je vais donner un exemple concret
Mon formulaire d'ajout de contenu quelconque :
<?php class MyExampleForm extends Zend_Form { public function init($options = null) { $this->setAction('index/add'); $this->setMethod('post'); $titre = $this ->createElement('text', 'titre')->setLabel('Titre'); $attch = new My_Form_Element_Attachment('mesfichiers')->setLabel('Fichiers joints'); $submit = $this ->createElement('submit', 'submit')->setLabel('Enregistrer'); $this->addElements(array($titre, $attch, $submit)); } }
Dans mon controlleur :
<?php class IndexController extends Zend_Controller_Action { function indexAction() { $myExampleForm = new MyExampleForm(); $this->view->myExampleForm = $myExampleForm; } }
Dans ma vue :
<?php echo $this->myExampleForm; ?>
Dans le navigateur :
... <form method="post" action="" enctype="multipart/form-data"> <dl class="zend_form"> <dt id="titre-label"> <label class="optional" for="titre">Titre</label> </dt> <dd id="titre-element"> <input id="titre" type="text" value="" name="titre"/> </dd> <dt id="mesfichiers-file-label"> <label class="optional" for="mesfichiers-1-file">Fichiers joints</label> </dt> <dd id="mesfichiers-element"> <input id="MAX_FILE_SIZE" type="hidden" value="2097152" name="MAX_FILE_SIZE"/> <input id="mesfichiers-1-file" type="file" name="mesfichiers[1][file]"/> <input id="mesfichiers-1-description" type="text" value="" name="mesfichiers[1][description]"/> </dd> <dt id="mesfichiers-description-label"> <label class="optional" for="mesfichiers-1-description">Description facultative</label> </dt> </dl> </form>
Vous remarquerez donc que l'ajout de My_Form_Element_Attachment au formulaire affiche un élément File et un élément Text au formulaire.
On pourrait imaginer la même chose pour un login. C'est-à-dire que lors de l'appel à My_Form_Element_Login, le navigateur afficherait directement les deux éléments Text et Password.
Voila pour les explications. Je ne pensais pas que ça serait si compliqué.
Hors ligne
Ben, tu as raison, c'est pas très compliqué, regarde pour faire un helper de vue.
Je te donne une piste ...
class My_Form_Element_Attachment extends Zend_Form_Element_File { public $helper = 'nom_de_ton_helper'; // dans ton helper tu rajouteras ton champ de type text ... }
Si tu penses que c'est simple, pourquoi tu viens demander ? Fainéantise ?
Bon courage !
Dernière modification par tylerdurd (05-01-2010 15:53:19)
Hors ligne
Je sais faire un helper de vue merci.
Ce que je ne sais pas c'est gérer les deux éléments qui se trouveront dedans.
Et non pas de fainéantise mais je ne me considère pas comme aussi expérimenté sur ZF que certains sur ce forum. C'est pour ça que je viens demander. Et je me rend compte que, comme les réponses ne se bousculent pas, c'est en fait plus compliqué que je ne le croyais au départ.
Si je dois expliqué mes propos à chaque fois on va pas s'en sortir...
Merci en tous cas de ta réponse. Je voudrais une précision. Comment gères-tu un élément Zend_Form_Element_Text dans une classe qui étend Zend_Form_Element_File ?
Hors ligne
Qu'est ce que tu entends par gérer ?
Récupération de donnée, affichage ... ?
Hors ligne
En fait, comme tu étends Zend_Form_Element, le render va retourner l'élément en question avec ses decorators.
Comment faire pour qu'au lieu de retourner un élément File il me retourne deux éléments ?
Et quand on fait un setValue() ou un setLibelle(), comment spécifier quel champ il doit affecter ?
Hors ligne
Pages: 1