Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 26-04-2010 10:40:18

maryooman
Membre
Date d'inscription: 15-02-2010
Messages: 106

mettre un 'disable à un 'select' avec un condition

Bonjour,

Je souhaite quand je fais un update à un objet, mettre en ‘disable’ un champ précis à la condition qu'un autre champ de la table soit à 'vrai'


Exemple :

Table ITEM
item_id
item_truc   
item_bool


Donc si (item_bool == true) alors item_truc ne changera plus.


Alors la ligne suivante marche bien, et le select est bien désactivé.

Code:

$item_truc->setOptions(array('disabled'=>'disabled'));

Mais il faut que je rajoute une condition :

Code:

if ($this->item_bool==true) {
    $item_truc->setOptions(array('disabled'=>'disabled'));
}

Et là ça ne fonctionne plus!


Chose important à rajouter, si j'écris

Code:

if ($this->item_bool==false) {

Cette condition renvoi toujours vrai

Et

Code:

if ($this->item_bool==false) {

Renvoi toujours faux

J'en conclue qu'il n'accède pas vraiment à la valeur de item_bool.

Merci de votre aide.

Hors ligne

 

#2 26-04-2010 10:45:09

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

Re: mettre un 'disable à un 'select' avec un condition

$this->item_bool te renvoi un Zend_Form_Element
Pour la valeur :
$this->item_bool->getValue()


----
Gruiiik !

Hors ligne

 

#3 26-04-2010 12:43:06

maryooman
Membre
Date d'inscription: 15-02-2010
Messages: 106

Re: mettre un 'disable à un 'select' avec un condition

Fatal error: Call to a member function getValue() on a non-object in C:\wamp\www\test\application\forms\Item.php on line 75

je ne vois pas ce que je peux faire.

Hors ligne

 

#4 26-04-2010 13:55:50

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

Re: mettre un 'disable à un 'select' avec un condition

c'est quoi "$this" dans ton code ? Zend_Form ? l'Element item_bool a été créé quand tu as appelé la fonction ?


----
Gruiiik !

Hors ligne

 

#5 26-04-2010 16:29:25

maryooman
Membre
Date d'inscription: 15-02-2010
Messages: 106

Re: mettre un 'disable à un 'select' avec un condition

Voilà

Code:

class Form_Item extends Zend_Form {

    public function __construct($options = null){
        parent::__construct($options);
    }

    public function init() {


        $this->setName('item');

        $id = new Zend_Form_Element_Hidden('item_id');
     
        //pleins de choses

        $cc= new Zend_Form_Element_Select('item_cc');
        $cc->setLabel('cc')
                ->setRequired(true)
                ->addValidator('NotEmpty')
                ->addMultiOption('','Choose');
        $table_ccc = new Model_DbTable_cc();
        foreach ($table_ccc->findForSelect() as $row) {
                $ccname = $row->cc_number . "\t" . $row->cc_name;
                $cc->addMultiOption($row->cc_id, $ccname);
        }
        if ($this->item_bool->getValue()==true) $cc->setOptions(array('disabled'=>'disabled'));

        $submit = new ......

        $this->addElements(array($id,$cc,$submit));

    }
}

dsl de mettre du code comme ça, je trouve que c'est plus simple que de l'expliquer
Et Merci de m'avoir répondu

Dernière modification par maryooman (26-04-2010 16:49:21)

Hors ligne

 

#6 27-04-2010 09:34:32

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

Re: mettre un 'disable à un 'select' avec un condition

beh, c'est bien la le problème, je ne vois toujours ou est défini ton item_bool


----
Gruiiik !

Hors ligne

 

#7 27-04-2010 11:09:16

maryooman
Membre
Date d'inscription: 15-02-2010
Messages: 106

Re: mettre un 'disable à un 'select' avec un condition

ah!

Dans le controller je fais un fetchAll sur la table item:

Code:

$table = new Model_DbTable_Item()
$this->view->res = $table->fetchAll();

et le formulaire est ce que j'ai écris au dessus.

Je n'ai mis item_bool nul par, je pensais pouvoir y accéder comme ça, puisque il fait parti du résultat du fetchAll ...

Il faut donc faire un champ hidden avec la valeur du item_bool?
Ainsi soit-il !

Code:

        $b = new Zend_Form_Element_Hidden('item_bool');
        if ($b->getValue()==true) $cc->setOptions(array('disabled'=>'disabled'));

Le résultat est exactement le même qu'avant.

Je me demande si le getValue renvoie quelque chose ?
alors j'ai fais

Code:

$name = new Zend_Form_Element_Input('truc');
$b = new Zend_Form_Element_Hidden('item_bool');
$name->setValue($b->getValue());

Il n'y a rien qui s'affiche dans le champ input !
Donc getValue ne revoi rien je pense

EDIT : je peux faire un autre accès à la base de donnée, mais je préfère apprendre à faire une méthode propre

Dernière modification par maryooman (27-04-2010 14:05:03)

Hors ligne

 

#8 28-04-2010 09:04:22

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

Re: mettre un 'disable à un 'select' avec un condition

Nan, mais tu fais tout de travers la.
Tu ne m'as pas répondu lorsque j'ai t'ai demandé quel type d'objet était $this quand tu fesais $this->item_bool
maintenant, je sais ! je croyais que c'était un Zend_Form, mais non

test ca :
var_dump($this->view->res); exit();

Si tu fois que item_bool est à  false ou true, à toi de voir pourquoi dans ta table comment/pourquoi changé cette valeur

Dernière modification par nORKy (28-04-2010 09:05:37)


----
Gruiiik !

Hors ligne

 

#9 29-04-2010 12:20:48

maryooman
Membre
Date d'inscription: 15-02-2010
Messages: 106

Re: mettre un 'disable à un 'select' avec un condition

me revoilà, dsl de retard.

J'ai fais un Zend_Debug::dump($form) dans le controller juste apres le populate()

Il y a un élément Hidden :

["item_bool"] => object(Zend_Form_Element_Hidden)#94 (29) {
      ["helper"] => string(10) "formHidden"
      ["_allowEmpty":protected] => bool(true)
      ["_autoInsertNotEmptyValidator":protected] => bool(true)
etc ....

et en regardant vers la fin il y a cette ligne :

["_value":protected] => string(1) "1"

et la veleur change en fonction de l'item ("0" ou "1")

Donc le soucis c'est l'acces à cette valeur puisque getValue() sur le champs hiddent ne renvoit rien!

Dernière modification par maryooman (29-04-2010 12:21:11)

Hors ligne

 

#10 29-04-2010 15:14:42

maryooman
Membre
Date d'inscription: 15-02-2010
Messages: 106

Re: mettre un 'disable à un 'select' avec un condition

bon revenu au début

Code:

        $form = new Form_Item();
        $form->submit->setLabel('update');
        $this->view->form = $form;

        if ($this->getRequest()->isPost()) {
               etc ....
         } else {
             $id = $this->_getParam('id', 0);
             $table = new Model_DbTable_Item();
             $form->populate($table->fetchAll($id))
         }

et la table

Table ITEM
item_id
item_truc   
item_bool

A partir d'ici

Les valeur remplissent automatiquement le formulaire mais,

Comment je peux acceder à une valeur d'un champs de ma table, sachant que je suis dans le formulaire ?

Je veux simplement connaitre la valeur de item_bool.

Merci

Hors ligne

 

#11 29-04-2010 16:07:20

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

Re: mettre un 'disable à un 'select' avec un condition

Tu fais une fonction dans ton formulaire.
Ex: en surchargeant directement populate

Code:

function populate(array $values)
{
    $res = parent::populate($values);
    if ($values['item_bool']) {
       $this->truc->setOptions(bidule);
    }
    else {
      ....
   }
   return $res;
}

----
Gruiiik !

Hors ligne

 

#12 29-04-2010 17:30:13

maryooman
Membre
Date d'inscription: 15-02-2010
Messages: 106

Re: mettre un 'disable à un 'select' avec un condition

très bonne idée,

la condition 'if' est prise en compte,

par conte la ligne

Code:

$this->truc->setOptions(bidule);

renvoie une erreur

Fatal error: Call to a member function setOptions() on a non-object in C:\wamp\www\test\application\forms\Item.php on line 20

alors je me suis dis pourquoi ne faire une variable static de la classe Form_Item (ce formulaire) :

private static $_bool;

Code:

    function populate(array $values)
    {
       self::$_crossCharged = 1;
       return $res;
    }

Or elle n'ai pas prise en compte.

Si je met cette meme ligne dans le init() :
self::$_crossCharged = 1;
Elle marche très bien ...

Dernière modification par maryooman (29-04-2010 17:31:05)

Hors ligne

 

#13 30-04-2010 11:36:17

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

Re: mettre un 'disable à un 'select' avec un condition

si 'truc' n'existe pas, c'est normal.
Je copie juste ton code. Dans ton premier poste, tu as mis

Code:

$item_truc->setOptions(array('disabled'=>'disabled'));

Si tu l'as pas créé, ca peut pas marché


----
Gruiiik !

Hors ligne

 

#14 30-04-2010 12:06:26

maryooman
Membre
Date d'inscription: 15-02-2010
Messages: 106

Re: mettre un 'disable à un 'select' avec un condition

ca marche !!!!!
merci beaucoup!!

Je vais mettre un code exemple minimal :

Code:

class Form_Item extends Zend_Form{

    public function __construct($options = null){
        parent::__construct($options);
    }

    function populate(array $values)
    {
        $res = parent::populate($values);
        if ($values['item_bool']) {
           $this->item_truc->setOptions(array('disabled'=>'disabled'));
        }
       return $res;
    }

    public function init() {

        $truc= new Form_Element_Text('item_truc');

        $submit = new Zend_form_Element_Submit('submit');
        $submit->setAttrib('id', 'submitbutton');

        $this->addElements(array($truc,$submit));
    }

}

par controle il y a un avertissement :

Notice: Undefined index: item_bool in C:\wamp\www\test\application\forms\Item.php on line 16

et c'est étrange car malgré l'avertissement, la valeur de item_bool est prise en compte car quand item_bool = 1 le champ est grisé, quand item_bool = 0 il ne l'ai pas !

Hors ligne

 

#15 30-04-2010 12:11:39

maryooman
Membre
Date d'inscription: 15-02-2010
Messages: 106

Re: mettre un 'disable à un 'select' avec un condition

j'ai eu une idée de faire ça :

Code:

    function populate(array $values)
    {
        $res = parent::populate($values);
        if ($this->item_bool->getValue()) {
           $this->item_truc->setOptions(array('disabled'=>'disabled'));
        }
       return $res;
    }

le message d'avertissment disparait, la condition de mettre un champ Hidden pour item_bool

Hors ligne

 

#16 30-04-2010 15:28:10

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

Re: mettre un 'disable à un 'select' avec un condition

Au vu de dernier code, je laisse tombé. je crois que je comprendrais jamais ce que tu veux faire...
Je crois que tu as des défauts de logique, d'habitude et de connaissance de programmation PHP...


----
Gruiiik !

Hors ligne

 

#17 30-04-2010 15:56:36

maryooman
Membre
Date d'inscription: 15-02-2010
Messages: 106

Re: mettre un 'disable à un 'select' avec un condition

Croie moi que si j'avais plus de connaissance, je n'aurais pas eu besoin de venir sur des forums de php.
Mais ton aide m'a été extrêmement utile puisque j'ai solutionné un problème majeur dans mon programme et par le même coup compris que je pouvais surcharger des méthodes (populate()) de cette manière.
Et franchement c'est ce genre de site communautaire qui m'a fait choisir Zend.


Même si c'est réglé, je vais reformuler, pour les éventuels futurs lecteurs.
Je veux griser un champ du formulaire de mise à jour d'un item lorsqu’un champ de la base de données est à vrai.
Et toute la difficulté à été d'accéder à la valeur du champ de la base de données (le item_bool) à partir du formulaire.

En tout cas c’est fait.
Merci. A la prochaine.

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