IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend_Form PHP Discussion :

Zend_Form Multi Text et hidden


Sujet :

Zend_Form PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Par défaut Zend_Form Multi Text et hidden
    Bonjour!

    Je me trouve confronté a un serieux problème avec Zend_Form!

    Je dois créer un formulaire de manière dynamique suivant le resultat d'une requete qui me retourne un tableau. pour chaque valeur je dois créer un champ texte exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
    ["langs"] => array(2) {
     
        [0] => array(5) {
          ["id"] => string(1) "4"
          ["id_categorie"] => string(1) "3"
          ["id_langue"] => string(1) "1"
          ["nom_cat"] => string(7) "t-shirt"
        }
     
        [1] => array(5) {
          ["id"] => string(1) "6"
          ["id_categorie"] => string(1) "3"
          ["id_langue"] => string(1) "2"
          ["nom_cat"] => string(0) ""
        }
    Pour chaque ligne de tableau je dois obtenir quelque chose qui ressemble à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    Nom en français <input type="text" name="nom_cat[]" value="t-shirt" />
     
    <input type="hidden" name="id_langue[]" value="1" />
    <input type="hidden" name="id_categorie[]" value="3" />
    <input type="hidden" name="id[]" value="4" />
    Nom en anglais <input type="text" name="nom_cat[]" value="" />
    <input type="hidden" name="id_langue[]" value="2" />
    <input type="hidden" name="id_categorie[]" value="3" />
    <input type="hidden" name="id[]" value="6" />
    Seulement voila, il existe des multicheckbox mais pas des "multi_text", à moins que j'ai loupé la ligne!

  2. #2
    Membre expérimenté Avatar de Alshten
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 157
    Par défaut
    C'est pas grave tu peux ajouter autant de Form_Text que tu veux à ton Form.

    Tu n'as qu'à faire passer un array de toutes tes valeurs par le constructeur de ton Form et ajouter un champ texte par ligne de ton array.

    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    class MonForm extends Zend_Form
    {
     
        public function __construct($array_contenant_mes_valeurs, $options = null)
        {
     
        foreach($array_contenant_mes_valeurs as $macle => $mavaleur)
        {
            $mon_form_text = new Zend_Form_Element_Text(/*Valeurs à mettre*/);
            $this->addElement($mon_form_text);
        }
     
        //Le reste de ton form
     
        }
     
    }
    Et ça créera autant de champ texte dans ton formulaire qu'il y a de ligne dans ton array.

  3. #3
    Membre chevronné Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Par défaut
    Je suis vraiment un gros boulet!

    Par contre je vois que dans ton exemple tu utilise la function __construct()
    Chez moi quand je l'utilise, rien ne s'affiche!
    La seule solution est de faire une fonction init() puis une autre fonction dans la quelle je crée mes éléments.
    Cela m'oblige à instancier d'abord la classe, puis appeler la méthode qui crée les éléments!

  4. #4
    Membre expérimenté Avatar de Alshten
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 157
    Par défaut
    Citation Envoyé par manuscle Voir le message
    Par contre je vois que dans ton exemple tu utilise la function __construct()
    Chez moi quand je l'utilise, rien ne s'affiche!
    La seule solution est de faire une fonction init() puis une autre fonction dans la quelle je crée mes éléments.
    Cela m'oblige à instancier d'abord la classe, puis appeler la méthode qui crée les éléments!
    Hum c'est bizarre, est-ce que tu peux me montrer comment tu construit ta classe et comment tu l'utilise ?

  5. #5
    Membre chevronné Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Par défaut
    Dans mon script j'utilise un formulaire et un sous-formulaire que j'utilise aussi ailleur.

    Voici le controlleur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    		$form = new Zfbook_Form_Category();
    		$form->addElementPrefixPath('Zfbook_Decorator',
                                		'Zfbook/Decorator/',
                                		'decorator');
     
    		// Ajout des langues dans le formulaire
    		$subform = new Zfbook_Form_CategoryLang();
    		$subform->setMethod('post');
    		$subform->setAction($this->view->link('category' , 'editer', null, $params, 'default', !$isUpdate));
    		$subform->addLangElements($catLangs,$langs);
    		$subform->addElementPrefixPath('Zfbook_Decorator',
                                		   'Zfbook/Decorator/',
                                		   'decorator');
     
    		$form->addSubForm($subform,'langForm');
     
            $form->setAction($this->view->link('category' , 'editer', null, $params, 'default', !$isUpdate))
                 ->setMethod('post')
                 ->setDefaults($category->toArray());
     
    		$this->view->form = $form;
    		$this->view->langForm = $form->getSubForm('langForm');
    Et les classes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
     
     
    class Zfbook_Form_Category extends Zend_Form
    {
    	public function init() {
     
            // Bouton de validation
            $submitButton = new Zend_Form_Element_Submit('submit_category');
            $submitButton->setLabel($this->getTranslator()->translate("Valider"));
            $submitButton->style = 'margin-left: 80px';
            $this->addElement($submitButton);
     
            // jeton
            $token   = new Zend_Form_Element_Hash('token', array('salt' => 'unique'));
    		$token->setDecorators(array('Hidden'));
            $this->addElement($token);
     
            /**
             *  CATEGORIE PARENTE
             */
     
            // Langue courante utilisateur
            $curLang = Zend_Registry::get('session')->lang;
     
            // Récupération de la liste des parents
            $TCat = new TCategory();        						  
            $parent = $TCat->findAllParentInLang();
            $parentTab = array();
            //Zend_Debug::dump($parent);
            $parentTab[0] = '---'; // Si aucun parent
            foreach ($parent as $p) {
            	$parentTab[$p['id_categorie']] = $p['nom_cat'];
            }
     
            $parentSelect = new Zend_Form_Element_Select('id_parent');
            $parentSelect->setMultiOptions($parentTab)
            			 ->setLabel($this->getTranslator()->translate("Catégorie parente"))
            			 ->setRequired(true)
            			 ->addValidator(new Zend_Validate_Int());
            $parentSelect->setDecorators(array('Composite'));
            $this->addElement($parentSelect);
     
            /**
             * ORDRE
             */
     
            $ordre = new Zend_Form_Element_Text('ordre');
            $ordre->addValidator(new Zend_Validate_Int())
            	  ->setLabel($this->getTranslator()->translate("Ordre"));
            $ordre->setAttrib('size',3);
            $ordre->setRequired(true);
            $ordre->setDecorators(array('Composite'));
            $this->addElement($ordre);
     
            /**
             * ACTIF
             */
     
            $actif = new Zend_Form_Element_Checkbox('active');
            $actif->setLabel($this->getTranslator()->translate("Catégorie activée"));
            $actif->setDecorators(array('Composite'));
            $this->addElement($actif);
     
            /**
             * ALIAS URL
             */
     
            $alias = new Zend_Form_Element_Text('alias_url');
            $alias->setLabel($this->getTranslator()->translate ("Alias URL"));
            $alias->setDescription($this->getTranslator()->translate("Doit contenir uniquement lettres, chiffres et '-'"));
            $alias->addValidator('regex',false,array('/^[-a-z0-9]+$/i'));
            $alias->addFilter(new Zend_Filter_StringToLower());
            $alias->setRequired(true);
            $alias->setDecorators(array('Composite'));
            $this->addElement($alias);
    	}
    }
     
    class Zfbook_Form_CategoryLang extends Zend_Form
    {
     
    	public function init()
    	{
     
     
    	}
     
    	public function addLangElements($array,$langs) {
    		foreach($array as $key => $val)
    	    {
     
        		//Zend_Debug::dump($val);
        		// Champ de categorie
        		$idCat = new Zend_Form_Element_Hidden("id_categorie[$key]");
        		$idCat->setValue($val['id_categorie']);
        		$idCat->setDecorators(array('Hidden'));
        		$this->addElement($idCat);
     
        		// Champ id de categorieLang
        		$id = new Zend_Form_Element_Hidden("id[$key]");
        		$id->setValue($val['id']);
        		$id->setDecorators(array('Hidden'));
        		$this->addElement($id);
     
        		// Champ id de langue
        		$idLang = new Zend_Form_Element_Hidden("id_langue[$key]");
        		$idLang->setValue($val['id_langue']);
        		$idLang->setDecorators(array('Hidden'));
        		$this->addElement($idLang);
     
        		// Champ nom
        		$nom = new Zend_Form_Element_Text("nom_cat[$key]");
    	        		// Si français ou anglais : obligatoire
        		if ($val['id_langue'] == 1 or $val['id_langue'] == 2) {
        			$nom->setRequired(true);
        		}
        		$nom->addFilter(new Zfbook_Filter_StripSlashes());
        		$nom->setValue($val['nom_cat']);
        		$nom->setLabel($langs[$val['id_langue']]);
        		$nom->setDecorators(array('Composite'));
        		$this->addElement($nom);
    	    }
     
    	}
    }

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 13
    Par défaut
    A moins de vouloir surcharger le constructeur de Zend_Form je crois qu'il vaut mieux utiliser init() qui est en fait appelé par Zend_Form->__construct(). Sinon ne pas oublier de faire un parent::__construct().

Discussions similaires

  1. [VB6] Champ de text multi-couleurs ?
    Par Jihnn dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 02/06/2006, 00h09
  2. Auto-scroll d'une zone de texte multi ligne
    Par malek_dz77 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/11/2005, 13h09
  3. [HTML] Supprimer le multi ligne d'une zone de text
    Par Furius dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 29/11/2005, 14h49
  4. Multi Format dans une zone de texte ou active x
    Par nowick dans le forum Access
    Réponses: 5
    Dernier message: 22/10/2005, 20h23
  5. Hidden texte aide !
    Par Death83 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 25/09/2005, 13h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo