Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > Zend_Form
Zend_Form Forum d'entraide pour le composant Zend_Form du Zend Framework (création de formulaires, helpers, AJAX etc.). Avant de poster -> FAQ Zend_Form.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/05/2011, 15h53   #1
Membre chevronné
 
Avatar de Farid63
 
Homme Farid
Inscription : janvier 2008
Messages : 368
Détails du profil
Informations personnelles :
Nom : Homme Farid
Âge : 26
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : janvier 2008
Messages : 368
Points : 684
Points : 684
Par défaut Pourquoi <dt> et <dd>?

Bonjour à tous,

est-ce que c'est correct au niveau de la sémantique de mettre les labels et inputs dans des <dt> et <dd> comme le fait ZF?

Code HTML :
1
2
3
4
 
<dt id="email-label"><label for="email" class="required">Email :</label></dt>
<dd id="email-element">
<input type="text" name="email" id="email" value=""></dd>

J'ai un autre problème. Je veux définir l'action qui sera chargée de traiter les données envoyées. Dans ma classe form, je fais :

Code PHP :
<?php $this->setAction('/index/traitement/')->setMethod('post'); ?>

Mais ça ne change rien, l'action du formulaire est toujours l'action dans laquel le formulaire est crée.
Où me suis-je trompé?

Merci par avance.
Farid63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 13h39   #2
Membre expérimenté
 
Avatar de amoiraud
 
Homme Adrien
Développeur Web
Inscription : octobre 2006
Messages : 405
Détails du profil
Informations personnelles :
Nom : Homme Adrien
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2006
Messages : 405
Points : 531
Points : 531
Envoyer un message via MSN à amoiraud
Salut Farid,
Pour les dt et dd, j'avais eu le même problème au boulot, apparement c'est un décorateur par défaut de Zend (notre graphiste s'était arraché les cheveux car ca faisait planter son CSS), pour les enlever, ajoute ceci dans l'init de ton modèle de formulaire :

Code :
1
2
3
4
5
 
public function init()
{
    $this->setDisableLoadDefaultDecorators(true);
}

Pour ce qui est de l'action du formulaire, tu doit la spécifier à l'appel du modèle dans ton controller :

Code :
1
2
3
4
5
 
$form = new Forms_Clients(array(
    'action' => BASE_URL . '/clients/add',
    'method' => 'post',
));
amoiraud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2011, 10h40   #3
Membre chevronné
 
Avatar de Farid63
 
Homme Farid
Inscription : janvier 2008
Messages : 368
Détails du profil
Informations personnelles :
Nom : Homme Farid
Âge : 26
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : janvier 2008
Messages : 368
Points : 684
Points : 684
Salut amoiraud.

j'ai essayé :

Code php :
<?php $this->setDisableLoadDefaultDecorators(true); ?>

Et bien j'obtiens un page blanche, sans erreur.

Pour :
Code php :
1
2
3
4
<?php $form = new Forms_Clients(array(
    'action' => BASE_URL . '/clients/add',
    'method' => 'post',
));?>

je n'arrive toujours pas a modifier cette action. J'arrive a mettre "get" à la place de poste mais rien n'a faire pour l'action, ça ne bouge pas. J'ai essayer de remplacer BASE_URL par APPLICATION_PATH car BASE_URL me lançait une erreur, mais rien.

Aprés avoir trouvé aucun tutoriel complet sur les Modèles avec plusieurs tables de ZF, voilà que je galère sur les formulaires. Je crois que ZF est pas pour moi .
Farid63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2011, 11h43   #4
Membre expérimenté
 
Avatar de amoiraud
 
Homme Adrien
Développeur Web
Inscription : octobre 2006
Messages : 405
Détails du profil
Informations personnelles :
Nom : Homme Adrien
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2006
Messages : 405
Points : 531
Points : 531
Envoyer un message via MSN à amoiraud
Salut,
pour le premier souci tu peut nous montrer le code de ton modèle de formulaire ?
Car j'utilise souvent la fonction setDisableLoadDefaultDecorators() et elle marche sur mes projets.

Pour l'action, le BASE_URL est une constante que j'ai défini dans le index.php du dossier public :
Code :
1
2
 
define('BASE_URL', 'http://' . $_SERVER['SERVER_NAME']);
Le APPLICATION_PATH ne marchera pas car le lien doit être absolu et tu ne doit pas lui passer le lien du dossier application mais celui du public.
Au pire essaye dans un premier temps de mettre le lien a la main sans te préoccuper des constantes : http://www.url.com/controller/action
amoiraud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2011, 14h59   #5
Membre chevronné
 
Avatar de Farid63
 
Homme Farid
Inscription : janvier 2008
Messages : 368
Détails du profil
Informations personnelles :
Nom : Homme Farid
Âge : 26
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : janvier 2008
Messages : 368
Points : 684
Points : 684
Bon enfaite je suis un boulet.

En voulant poster mon code sur le forum, je me suis aperçus que le code de m'a vu c'est ça :

Code php :
1
2
3
4
5
6
<?php
 
$this->form->setAction($this->url());
echo $this->form;
 
?>


Je sais pas où j'ai trouvé ce code, du coup le changement de l'attribut action marche.

Par contre, j'ai toujours ce problème de <dt> <dd>.

Voilà mon formulaire :

Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
<?php
 
class Application_Form_Auteurs extends Zend_Form
{
 
    public function init()
    {
 
		//Ne marche pas
		$this->setDisableLoadDefaultDecorators(true);
 
		$this->setAction('http://localhost/zf_test/public/index/traitement');
 
 
		$this->addElement('text', 'nom', array(
					'label'	=> 'Nom :',
					'required'	=> 'true',
					));
 
		$this->addElement('text', 'email', array(
					'label'	=> 'Email :',
					'required'	=> 'true',
					));
 
 
		// Un captcha
        $this->addElement('captcha', 'captcha', array(
            'label'      => 'Please enter the 5 letters displayed below:',
            'required'   => true,
            'captcha'    => array(
                'captcha' => 'Figlet',
                'wordLen' => 5,
                'timeout' => 300
            )
        ));
 
 
        $this->addElement('submit', 'submit', array(
            'ignore'   => true,
            'label'    => 'Envoie',
        ));	
 
    }
 
}?>
Farid63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 00h16   #6
Candidat au titre de Membre du Club
 
Homme
Étudiant
Inscription : juillet 2011
Messages : 22
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2011
Messages : 22
Points : 10
Points : 10
Par défaut Solution eventuelle

Bonsoir,
J'ai le même problème que toi en ce qui concerne les dd/dt. Après recherche je suis tombé sur ce tuto: http://wiip.fr/content/zend-form-con...s-dt-et-les-dd et celui-ci http://zendgeek.blogspot.com/2009/07...ecorators.html. En adaptant un peu le code à ce que j'avais fait initialement j'ai réussi à obtenir le code html suivant pour mon formulaire:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<form id="projet" enctype="application/x-www-form-urlencoded" action="" method="post"><table>
 
<tr><th id="intitule-label"><label for="intitule" class="required">Intitule</label></th>
<td>
<input type="text" name="intitule" id="intitule" value="" /></td></tr>
<tr><th id="lien-label"><label for="lien" class="optional">Lien</label></th>
 
<td>
<input type="text" name="lien" id="lien" value="" /></td></tr>
<tr><th id="description-label"><label for="description" class="required">Description</label></th>
<td>
<input type="text" name="description" id="description" value="" /></td></tr>
<tr><td colspan="2">
<input type="submit" name="envoyer" id="boutonenvoyer" value="Proposer" /></td></tr></table></form>
Avec la méthode init() suivante pour mon formulaire:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
 
public function init()
    {
        $this->setName('projet');
 
 
        $decorators = array(
		    'ViewHelper',
		    'Errors',
		    array('Description', array('tag' => 'p', 'class' => 'description')),
		    array('HtmlTag', array('tag' => 'td')),
		    array('Label', array('tag' => 'th')),
		    array(array('tr' => 'HtmlTag'), array('tag' => 'tr'))
		);
 
        $id = new Zend_Form_Element_Hidden('id');
        $id->setDecorators(array());
        $id->addFilter('Int');
 
        $intitule = new Zend_Form_Element_Text('intitule');
        $intitule->setLabel('Intitule')
                ->setRequired(true)
                ->addFilter('StripTags')
                ->addFilter('StringTrim')
                ->addValidator('NotEmpty')
                ->setDecorators(array('label'))
                ->setDecorators($decorators);
 
        $lien = new Zend_Form_Element_Text('lien');
        $lien->setLabel('Lien')
        	->setRequired(false)
        	->addFilter('StripTags')
        	->addFilter('StringTrim')
        	->addValidator('NotEmpty')
        	->setDecorators($decorators);
 
        $description = new Zend_Form_Element_Text('description');
        $description->setLabel('Description')
              ->setRequired(true)
              ->addFilter('StripTags')
              ->addFilter('StringTrim')
              ->addValidator('NotEmpty')
              ->setDecorators($decorators);
 
        $envoyer = new Zend_Form_Element_Submit('envoyer');
        $envoyer->setAttrib('id', 'boutonenvoyer');
        $envoyer->setLabel('Proposer');
        $envoyer->setDecorators(array('ViewHelper',array(array('td' => 'HtmlTag'), array('tag' => 'td', 'colspan' => 2)),array(array('tr' => 'HtmlTag'), array('tag' => 'tr'))));
 
        $this->addElements(array($id, $intitule, $lien, $description, $envoyer));
 
        $this->setDecorators(
		    array(
		        'FormElements',
		        array('HtmlTag', array('tag' => 'table')),
		        'Form'
		    )
		);
 
    }
Voila !
En éspèrant t'avoir été utile , sinon tant pis.

Bonne soirée et bon développement.

Ben

PS: Pour moi aussi $this->setDisableLoadDefaultDecorators(true); donne une page blanche.
ben.p est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h18.


 
 
 
 
Partenaires

Hébergement Web