Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 07-04-2009 11:04:41

gostbuster
Membre
Date d'inscription: 11-03-2009
Messages: 160

ajouter elements texte à Zend_Form

Bonjour,

Dans le but de faire un formulaire agrémenté d'intéractivité, je souhaiterais insérer dans celui ci, des éléments autres que Zend_Form_element_*, par exemple je souhaiterais quelque chose du genre :


Catégorie : <MonChampSelect> ou  <Lien ajouter une nouvelle catégorie>

Dans ma vue, je pourrais prendre chaque element du form et l'afficher tel que :

Code:

    //categorie
    echo $form->getElement('categorie');

    
    echo "ou <a href=....>Ajouter une nouvelle catégorie</a>";

mais cela semble un peu lourd....
C'est pour cette raison que je voudrais savoir si on pouvait ajouter un element quelconque (non Form_Element), au formulaire, afin de n'avoir a faire que dans la vue quelque chose comme :

Code:

echo $this->form

Par avance je vous remercie.


Gostbuster - Développeur WEB

Hors ligne

 

#2 07-04-2009 14:06:55

gostbuster
Membre
Date d'inscription: 11-03-2009
Messages: 160

Re: ajouter elements texte à Zend_Form

Je vois que personne ne répond, peut etre que personne ne sait.
Je pense donc poser la question suivante :

Comment faites vous pour rendre vos form, vous faites toujours echo $this->form? et voila ?
merci

Dernière modification par gostbuster (07-04-2009 14:09:14)


Gostbuster - Développeur WEB

Hors ligne

 

#3 07-04-2009 18:30:43

gauthier
Membre
Date d'inscription: 30-09-2008
Messages: 116
Site web

Re: ajouter elements texte à Zend_Form

Salut Gostbuster,

voici une solution à explorer - elle n'est pas optimale (collision avec les décorateurs par défaut notamment) mais permet d'obtenir le résultat que tu souhaites.

1) Crée un décorateur personnalisé :

Code:

<?php
class Own_Form_Decorator_FreeText extends Zend_Form_Decorator_Abstract
{
    /**
     * @see Zend_Form_Decorator_Abstract::render()
     *
     * @param string $content
     * @return string
     */
    public function render ($content)
    {
        
        switch($this->getPlacement()) {
            
            case self::PREPEND :
                return $this->getOption('freeText') . '&nbsp;' . $content;
                break;
                
            case self::APPEND:
            default:
                return $content . '&nbsp' . $this->getOption('freeText');
                break;
            
        }
    }

}

2) Utilise le dans ton formulaire smile

Code:

$form = new Zend_Form();
        $form->setAction('/index/process');
        $form->setMethod('POST');
        
        $input = new Zend_Form_Element_Text('test');
        $input->removeDecorator('HtmlTag');
        $input->setLabel('Element');
        $input->addDecorator(new Own_Form_Decorator_FreeText(array(
            
            'freeText' => "<a href='/add/element'>ou ajoutez un élément</a>"
        )));
        $form->addElement($input);

3) Affiche ton formulaire !

Pour info, j'ai supprimé le décorateur HtmlTag, qui par défaut encadre ton controle de formulaire d'une paire de tags dd/dd... Le souci étant que du coup le "FreeText" est ajouté après le /dd, et que du coup le texte est affiché à la ligne.

Ca peut déjà te dépanner, mais ce que je te conseille, comme à quiconque souhaite personnaliser l'affichage de ses formulaires, c'est de t'intéresser sérieusement aux décorateurs...

Bon courage wink


Consultant Zend Technologies // Blog perso : Logiciel libre et développement web -- http://freeblogware.org

Hors ligne

 

#4 07-04-2009 19:31:40

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

Re: ajouter elements texte à Zend_Form

oui, moi je fais echo $this->form

En fait, j'ai pas compris ta question moi ghostbuster smile tu utilises des termes qui ne vont pas ensemble je trouve..


----
Gruiiik !

Hors ligne

 

#5 08-04-2009 09:47:38

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: ajouter elements texte à Zend_Form

Quand j'ai besoin d'un lien (ou juste d'html) je procède ainsi

Code:

$htmlDescDecorator = new Zend_Form_Decorator_Description();
$htmlDescDecorator->setEscape(false);

$descriptionDecorators = array(
    'ViewHelper',
    $htmlDescDecorator,
    'Errors',
    array('HtmlTag', array('tag' => 'dd')),
    array('Label', array('tag' => 'dt')),
);

//plus loin pour mon element
//...
    'name' => array('text', array(
        'label' => 'user.name',
        'class'=>'iconised name',
        'filters' => array('SafeText'),
        'validators' => array($validName, array('StringLength', false, array(3,100))),
        'description' => '<html .....!!!! .... />',
        'decorators' => $descriptionDecorators
    )),

Avec ça je ne fais que rajouter un <p> contenant la "description" qui elle accepte de l'html (setEscape(false)).
Du coup je fais bien echo $this->monForm;

Hors ligne

 

#6 08-04-2009 11:31:19

gostbuster
Membre
Date d'inscription: 11-03-2009
Messages: 160

Re: ajouter elements texte à Zend_Form

Bonjour et merci pour vos réponses,

la solution d Mr.MoOx semble plutot approprié étant donné que le but est d'ajouter du HTML entre les élements du form.

Cependant, ton élément, il est de quel type?

je pense ne pas avoir bien saisi (désolé),

tu crée 2 décorateur ? (htmlDescDecorator et descriptionDecorators), et tu l'ajoute a quel élément?

Merci pour ces précisions


Gostbuster - Développeur WEB

Hors ligne

 

#7 08-04-2009 11:49:27

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

Re: ajouter elements texte à Zend_Form

gost, tu mélanges un peu les choses je crois

Ne confonds pas élement de formulaire au sense HTML (form, label, input, select, ...) et éléments de formulaire au sens Zend (Zend_Element_Textbox, etc..)

Moox ne créé pas 2 décorateurs.

Il créé plusieurs décorateurs, le truc c'est que je pense que ces noms de variables ne sont pas appropriés et que tu t'y perds

Pour chaque éléments, il faut plusieurs décorateurs. (label, element, errors, etcc..)
Moox en utilise notamment un pour générer du texte Html
Il utilise le décorateur Description. Celui-ci ne fait pas grand chose (voir la Doc du ZF) a part rajouter du code html ou on veux (en gros)


Imagine une page d'identification avec un input login et un input motdepasse.
Il arrive que des fois, on vois un lien juste en dessous du input motpasse du style "cliquez ici si vous avez oubliez votre mot de passe".
Et bien, Description t'aide à générer ce lien.
Le décorateur description récupère la propriété 'description' de ton éléments et l'affiche


----
Gruiiik !

Hors ligne

 

#8 25-05-2009 12:16:03

lagalere
Membre
Date d'inscription: 20-04-2009
Messages: 22

Re: ajouter elements texte à Zend_Form

Bonjour à tous,

je rebondis sur ce sujet pas forcément récent big_smile

Je rencontre un problème lors de la génération d'un élément de type Zend_Form_Element_Checkbox...

Mon but étant d'intégrer au label de ma case à cocher un lien vers des conditions générales de ventes... Malheureusement, mon a href est interprété comme du texte normal...

J'ai crée des validators javascript/jquery qui colories mon label de case à cocher en rouge de façon automatique si elle n'est pas cochée...

Voilà mon code :

Code:

$cgu = new Zend_Form_Element_Checkbox('cgu');
$cgu->setLabel('Je reconnais avoir pris connaissance des <a href="#lien">Conditions Générales</a>....etc...')
            ->setRequired(true)
            ->setCheckedValue(true)
            ->setUnCheckedValue(false)
            ->setAttribs(array('class' => 'obligatoire'),'');

Code:

private function setDecorateurCheckboxCgu($champs){
    $this->setElementDecorators(array(
            array('ViewHelper'),    
            array('Label', array('placement' => 'append')),
            array(array('elementDiv' => 'HtmlTag'), array('tag' => 'div', 'class' => 'outside-text'))
        ),$champs
        );
    }

Si quelqu'un possède une bonne solution pour me permettre d'intégrer au label de mon checkbox du contenu HTML, je suis prenneur...

J'espère que vous pourrez répondre à mon attente car c'est très important.

Merci d'avance,

Lagalère... qui galère :-P

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