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

MkFramework Discussion :

Ajout de la fonction getSelectGroup à plugin_form


Sujet :

MkFramework

  1. #1
    Membre confirmé
    Ajout de la fonction getSelectGroup à plugin_form
    Bonjour,

    Pour les besoins de mon projet, j'ai ajouté la fonction suivante au plugin_form :

    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
     
     
           /**
    	* retourne un champ menu deroulant sectionne en groupe
    	* @access public
    	* @param string $sName nom du champ
    	* @param array @tValue1 1er tableau de valeurs du menu deroulant
            * @param array @tValue2 2nd tableau de valeurs du menu deroulant
             * @param string $sLabel1 nom du 1er groupe
             * @param string $sLabel2 nom du 2nd groupe
    	* @param array $tOption options du champ
    	*/
    public function getSelectGroup($sName,$tValue1,$tValue2,$sLabel1,$sLabel2,$tOption=null){
     
    		$sCurrentValue=$this->getValue($sName);
                    $bSelected=false;
     
    		$sHtml=null;
    		$sHtml.='<select name="'.$sName.'" '.$this->getOption($tOption).'><optgroup label='.$sLabel1.'>';
    			foreach($tValue1 as $sValue => $sLabel){
    				$sHtml.='<option ';
    				if($sValue==$sCurrentValue){
    					$sHtml.=' selected="selected"';
                                            $bSelected=true;
    				}
    				$sHtml.=' value="'.$sValue.'">'.$sLabel.'</option>';
    			}
                    $sHtml .='<optgroup label='.$sLabel2.'>';
                           foreach($tValue2 as $sValue => $sLabel){
    				$sHtml.='<option ';
    				if(($sValue==$sCurrentValue)and !$bSelected){
    					$sHtml.=' selected="selected"';
    				}
    				$sHtml.=' value="'.$sValue.'">'.$sLabel.'</option>';
    			}
    		$sHtml.='</optgroup></select>';
    		$sHtml.=$this->getMessage($sName);
    		return $sHtml;
     
    	}


    Le but de ce select était de proposer dans le premier groupe les objets associés à un lieu et dans le second groupe l'ensemble des objets tout lieu confondu.
    En tout cas Bravo à Michael, car ce n'est pas évident de trouver les bon mécanisme à mettre en oeuvre car beaucoup de choix s'offre à lui quand il doit choisir comment va se présenter une focntion.
    La théorie, c'est quand on sait tout et que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !


    Albert Einstein

  2. #2
    Rédacteur

    Lut,
    je regarde ça ASAP, c'est toi/vous qui a proposé sur le github je suppose

    Merci de la contribution
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  3. #3
    Membre confirmé
    Update de la Fonction
    Le même résultat mais avec une mise en production plus propre grâce au tableau multi :

    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
     
    /**
    	* retourne un champ menu deroulant sectionne en groupe
    	* @access public
    	* @param string $sName nom du champ
    	* @param array $tArrayOfValue tableau multidimentionnel [Label]=>[Index]=>'Option'
    	* @param array $tOption options du champ
    	*/
     
            public function getSelectGroup($sName,$tArrayOfValue,$tOption=null){
    		$sCurrentValue=$this->getValue($sName);
                    $bSelected=false;
                    $i=0;
    		$sHtml=null;
    		$sHtml.='<select name="'.$sName.'" '.$this->getOption($tOption).'>';
                    foreach ($tArrayOfValue as $key => $tValue){                    
                        $sHtml.='<optgroup label='.$key.'>';
                        foreach($tValue as $sValue => $sLabel){
                            $sHtml.='<option ';
                            if(($sValue==$sCurrentValue)and !$bSelected){
                                    $sHtml.=' selected="selected"';
                                    $bSelected=true;
                            }
                            $sHtml.=' value="'.$sValue.'">'.$sLabel.'</option>';
                        }
                        $i++;
                        $sHtml.='</optgroup>';
                    }
                    $sHtml.='</select>';
    		$sHtml.=$this->getMessage($sName);
    		return $sHtml;
    	}





    main.php :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    [...]
    $tTableau1=array('Option11','Option12','Option13','Option14');
    $tTableau2=array('Option21','Option22','Option23','Option24');
     
    $tGroupSelect['Label1']= $tTableau1;
    $tGroupSelect['Label2']= $tTableau2;                        
    $oView->tGroupSelect=$tGroupSelect;
    [...]


    aspect.php :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    [...]
    <?php echo $oForm->getSelectGroups('ChoiceSimple', $this->tGroupSelect); ?>
    <?php echo $oForm->getSelectGroup('ChoiceMultiple', $this->tGroupSelect, array('multiple'=>'multiple', 'size'=>"13")); ?>
    [...]


    La théorie, c'est quand on sait tout et que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !


    Albert Einstein

  4. #4
    Rédacteur

    Ah làa c'est encore mieux

    je vais voir pour l'intégrer ASAP

    merci beaucoup de la contribution
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  5. #5
    Rédacteur

    J'ai intégré votre méthode sur le projet, je vais voir pour le deployer sur les autres sous projets

    pour info/rappel le mk est desormais distribué sous forme de package

    Le framework seul (juste la lib, par exemple pouir livrer en prod, ou integrer via composer

    le builder: juste l'interface de generation de code

    Le package qui contient le tout pour debuter

    Il y a aussi un projet "squelette" pour pouvoir créer un projet juste avec composer

    La j'ai mis sur mkframework, qui est l'ancien dépot, je vais voir pour mettre le reste demain

    http://mkframework.com/telecharger.html
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  6. #6
    Membre confirmé
    Salut,

    De rien pour la contribution.

    J'ai une autre mouture de cette fonction car dans la précédente je ne gère pas l'option Multiple du Input Select.

    Celle-ci le gère, mais ne me plait pas pour la mise à disposition car je ne trouve pas le paramètre $tArrayMultiValues facile d'usage.
    Ce n'est qu'un tableau contenant les ID des options sélectionnées du style :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    array(3) {
      [3]=>
      string(1) "3"
      [21]=>
      string(2) "21"
      [73]=>
      string(2) "73"
    }


    Mais le fait qu'il se trouve après le $tOption est risqué. Car cela oblige l'utilisateur a déclarer une array vide s'il ne veut pas d'options.
    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
     
     
     
     
    /**
    	* retourne un champ menu deroulant sectionne en groupe
    	* @access public
    	* @param string $sName nom du champ
    	* @param array $tArrayOfValue tableau multidimentionnel [Label]=>[Index]=>'Option'
    	* @param array $tOption options du champ
            * @param array $tArrayMultiValues Valeurs selectionnees pour un select multiple 
    	*/
     
            public function getSelectGroup($sName,$tArrayOfValue,$tOption=null,$tArrayMultiValues=null){
    		$sCurrentValue=$this->getValue($sName);
                    $bSelected=false;
    		$sHtml=null;
                    $sOptionMultiple=null;
                    if($tArrayMultiValues){
                        $sOptionMultiple="multiple";
                    }
     
    		$sHtml.='<select name="'.$sName.'" '.$this->getOption($tOption).' '.$sOptionMultiple.' >';
                    foreach ($tArrayOfValue as $key => $tValue){                    
                        $sHtml.='<optgroup label='.$key.'>';
                        foreach($tValue as $sValue => $sLabel){
                            $sHtml.='<option ';
                            if($tArrayMultiValues){
                                if(array_key_exists($sValue,$tArrayMultiValues)){
                                    $sHtml.=' selected="selected"';
                                }
                            }elseif(($sValue==$sCurrentValue)and !$bSelected){
                                    $sHtml.=' selected="selected"';
                                    $bSelected=true;
                            }
                            $sHtml.=' value="'.$sValue.'">'.$sLabel.'</option>';
                        }
                        $sHtml.='</optgroup>';
                    }
                    $sHtml.='</select>';
    		$sHtml.=$this->getMessage($sName);
    		return $sHtml;
    	}


    Je te laisse voir ce que tu souhaites en faire.

    l'appel se fait comme ceci :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    $oForm->getSelectGroup('Element[]', $this->tModuleMethode, array('multiple'=>'multiple', 'size'=>"13"),$this->tRights);


    Je suis sûr que l'on peut se passer de $tArrayMultiValues mais ça demande un petit peu de réflexion sur la fonction getValue() de plugin_form.php
    La théorie, c'est quand on sait tout et que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !


    Albert Einstein

  7. #7
    Rédacteur

    Bonsoir,
    j'ai pas eu le temps de regarder comment gérer une selection mutliple

    en tout cas ce n'est pas un paramètre à passer: les valeurs postées sont soumise au plugin_form et il s'appuie dessus pour pre-remplir/selctionner les valeurs

    on le voit ici:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    		$sCurrentValue=$this->getValue($sName);

    on récupère la valeur du champ
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  8. #8
    Rédacteur

    Pour info, je viens d emettre à jour les autres prepos avec cette méthode

    et le mentionner sur le site, merci encore pour cette contribution
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

###raw>template_hook.ano_emploi###