Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 04-01-2010 17:55:01

Devether
Membre
Date d'inscription: 23-01-2009
Messages: 21

étendre Zend_Form_Element pour rendre deux éléments

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 :

Code:

...
$attch = new My_Form_Element_Attachment('mesfichiers');
...

Dans le navigateur j'aurais un truc de ce style :

Code:

...
<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

 

#2 05-01-2010 09:27:17

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: étendre Zend_Form_Element pour rendre deux éléments


----
Gruiiik !

Hors ligne

 

#3 05-01-2010 09:59:06

Devether
Membre
Date d'inscription: 23-01-2009
Messages: 21

Re: étendre Zend_Form_Element pour rendre deux éléments

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

 

#4 05-01-2010 10:27:28

tylerdurd
Membre
Date d'inscription: 22-07-2009
Messages: 75

Re: étendre Zend_Form_Element pour rendre deux éléments

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

 

#5 05-01-2010 14:45:08

Devether
Membre
Date d'inscription: 23-01-2009
Messages: 21

Re: étendre Zend_Form_Element pour rendre deux éléments

Pour être plus clair je vais donner un exemple concret

Mon formulaire d'ajout de contenu quelconque :

Code:

<?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 :

Code:

<?php

class IndexController extends Zend_Controller_Action
{
    function indexAction()
    {
        $myExampleForm = new MyExampleForm();
        $this->view->myExampleForm = $myExampleForm;
    }
}

Dans ma vue :

Code:

<?php echo $this->myExampleForm; ?>

Dans le navigateur :

Code:

...
<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

 

#6 05-01-2010 15:52:52

tylerdurd
Membre
Date d'inscription: 22-07-2009
Messages: 75

Re: étendre Zend_Form_Element pour rendre deux éléments

Ben, tu as raison, c'est pas très compliqué, regarde pour faire un helper de vue.

Je te donne une piste ...

Code:

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

 

#7 08-01-2010 12:12:47

Devether
Membre
Date d'inscription: 23-01-2009
Messages: 21

Re: étendre Zend_Form_Element pour rendre deux éléments

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... wink

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

 

#8 08-01-2010 14:27:23

tylerdurd
Membre
Date d'inscription: 22-07-2009
Messages: 75

Re: étendre Zend_Form_Element pour rendre deux éléments

Qu'est ce que tu entends par gérer ?
Récupération de donnée, affichage ... ?

Hors ligne

 

#9 15-01-2010 09:58:03

Devether
Membre
Date d'inscription: 23-01-2009
Messages: 21

Re: étendre Zend_Form_Element pour rendre deux éléments

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

 

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