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

MkFramework Discussion :

Ajout de la fonction getSelectGroup à plugin_form


Sujet :

MkFramework

  1. #1
    Membre confirmé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    juin 2007
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : juin 2007
    Messages : 681
    Points : 590
    Points
    590
    Par défaut 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
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    décembre 2006
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : décembre 2006
    Messages : 5 235
    Points : 19 557
    Points
    19 557
    Billets dans le blog
    17
    Par défaut
    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é Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    juin 2007
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : juin 2007
    Messages : 681
    Points : 590
    Points
    590
    Par défaut 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")); ?>
    [...]
    Nom : Annotation 2020-04-02 150721.png
Affichages : 87
Taille : 9,3 Ko
    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
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    décembre 2006
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : décembre 2006
    Messages : 5 235
    Points : 19 557
    Points
    19 557
    Billets dans le blog
    17
    Par défaut
    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
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    décembre 2006
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : décembre 2006
    Messages : 5 235
    Points : 19 557
    Points
    19 557
    Billets dans le blog
    17
    Par défaut
    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é Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    juin 2007
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : juin 2007
    Messages : 681
    Points : 590
    Points
    590
    Par défaut
    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
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    décembre 2006
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : décembre 2006
    Messages : 5 235
    Points : 19 557
    Points
    19 557
    Billets dans le blog
    17
    Par défaut
    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
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    décembre 2006
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : décembre 2006
    Messages : 5 235
    Points : 19 557
    Points
    19 557
    Billets dans le blog
    17
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajout dynamique de fonction à un élément (js non intrusif)
    Par waldo2188 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/11/2007, 13h20
  2. Réponses: 4
    Dernier message: 30/08/2007, 15h42
  3. Réponses: 5
    Dernier message: 21/02/2007, 23h20
  4. Réponses: 2
    Dernier message: 16/11/2006, 15h00
  5. Réponses: 5
    Dernier message: 09/07/2006, 18h14

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