Partage
  • Partager sur Facebook
  • Partager sur Twitter

PHP variable dans le nom d'une fonction

fonction wordpress

    15 février 2019 à 9:13:38

    Bonjour,

    J'ai plusieurs formulaires qui peuvent être créés à tout moment. Je ne connais pas leurs numéros par avance.

    Mais je peux le récupérer. Soit  $num_formular cette variable indiquant le numéro du formulaire.

    J'ai une fonction qui fait référence à ce numéro de formulaire.

    Le numéro est dans le nom de la fonction. Ce nom sera donc amené à varier.

    J'ai essayé plusieurs chose:

    1-

    var mesFonctions = {
          "msk_gform_process_user_registration_".$num_formular : function () 
                  {
    		}
    };
    	   
    var fct = "msk_gform_process_user_registration_".$num_formular;
    
    mesFonctions[fct]();
    
    	

    mais la partie

    var mesFonctions = {

    est soulignée avec l'erreur "unexpected var"

    2-

    $functionName= 'msk_gform_process_user_registration_'.$num_formular;
    
    

    mais je ne sais pas comment déclarer la fonction

    function $functionName($entry, $form)
    {
    //corps de la fonction
       }
    
    add_action('gform_after_submission_'.$num_formular.'', 'msk_gform_process_user_registration_'.$num_formular.'', 10, 2);

    j'ai l'erreur "unexpected $funtionName".

    Ce sont des fonction de wordpress.

    Je ne peut donc pas changer leur nom et leur nom dépend donc du numéro de formulaire, formulaire qui peut être créé donc à tout moment et donc je ne connais pas le numéro.

    Quelqu'un sait comment avoir un nom de fonction qui est dépendant d'un variable et surtout comment écrire tout ça ?

    merci pour votre aide

    Maïty






    • Partager sur Facebook
    • Partager sur Twitter
      15 février 2019 à 9:18:53

      Bonjour,

      Je suis pas sûre d'avoir bien tout compris mais il serait pas plus simple de mettre le numéro en argument de la fonction et à l’intérieur de la fonction gérer le tout ?

      • Partager sur Facebook
      • Partager sur Twitter

      Call me Spaceman

        15 février 2019 à 9:48:45

        merci pour votre réponse.

        j'ai pensé à cela également.

        Au départ, mon appel de fonction est de la forme

        function msk_gform_process_user_registration_192 ($entry, $form) 
        { }

        par exemple, pour le formulaire 192.

        Je me suis demandée donc (il y a 5 minutes) si je ne pouvais pas mettre ce 192 ailleurs.

        Mais cette fonction (de wordpress) ne prend que 2 entrées précises.

        J'ai essayé de passer le numéro en global mais pour le moment je n'ai rien trouvé


        • Partager sur Facebook
        • Partager sur Twitter
          15 février 2019 à 10:06:00

          Je connais pas du tout wordpress :/ tu peux pas rentrer dans la fonction pour la modifier ?
          • Partager sur Facebook
          • Partager sur Twitter

          Call me Spaceman

            15 février 2019 à 10:21:46

            en fait, le code suivant fonctionne

            function msk_gform_process_user_registration_192 ($entry, $form) { }
            
            add_action('gform_after_submission_192', 'msk_gform_process_user_registration_192', 10, 2);
            
            

            mais en mettant le numéro en variable, le code suivant ne fonctionne pas

            //sachant que $num_formular  est connu (je l'affiche)
            
            // là j'ai une erreur
            function msk_gform_process_user_registration_'.$num_formular ($entry, $form) {}
            
            // là cela ne mets pas d'erreur mais cela ne fonctionne pas
            add_action('gform_after_submission_'.$num_formular.'', 'msk_gform_process_user_registration_'.$num_formular.'', 10, 2);
            
            

            et il est conseillé de laisser le numéro dans le nom....

            j'ai essayé plein d'écriture mais je ne trouve vraiment pas...

            merci de me donner vos conseils

            MAïty

            merci MalheuNeoSensEight

            Je ne pense pas. MAis il est conseillé de laisser le numero dans le nom, sinon la fonction sera appelée trop de fois.

            Donc il faut que je trouve la solution de "comment passer une variable dans le nom de la fonction".

            j'ai cherché, j'ai trouvé quelques petites choses mais cela ne fonctionne toujours pas...

            merci pour votre remarque... je pense que on peut juste se restreindre à la fonction, c'est une fonction php.. peut importe que cela soit wordpress (sauf bien sur que cela restreint les choses)





            -
            Edité par Timama 15 février 2019 à 10:25:33

            • Partager sur Facebook
            • Partager sur Twitter
              15 février 2019 à 10:43:08

              Salut,

              D'après la doc de add_action , le dernier argument (2 dans ton cas) est le nombre d'argument que peux prendre la fonction, donc si tu as la possibilité de passer à 3 et utiliser l'Id du formulaire comme argument ça serait plus simple.

              Donc rester sur un truc comme ça

              function msk_gform_proccess_user_registration($entry, $form, $num_formular) {}
              
              
              add_action('gform_after_submission','msk_gform_proccess_user_registration', 10, 3);

              Je ne connais pas WP, mais la variable $form, tu as essayé de faire un var_dump pour voir si le numéro du formulaire n'y est pas ?

              • Partager sur Facebook
              • Partager sur Twitter
              le bienfait n'est jamais perdu
                15 février 2019 à 10:43:51

                Le problème c'est qu'il y a plein de chose que je comprend pas dans ton code et ça vient surement du faite que ça soit wordpress.

                Par exemple en js je ne met jamais de $ devant mes fonction comme en php et pour concaténer en js c'est un "+" et non un "." comme en php.

                EDIT: Je viens de comprendre que c'est du php ce dont on parle je suis vraiment paumé désolé...

                -
                Edité par NeoSensEight 15 février 2019 à 10:45:38

                • Partager sur Facebook
                • Partager sur Twitter

                Call me Spaceman

                  15 février 2019 à 11:04:00

                  merci   NeoSensEight ;-) je comprends, ça doit être flou.

                  très bonne remarque WillyKouassi ..... merci beaucoup !  
                  bon comme je l'ai dit, il vaut mieux passer le numero dans le nom car sinon, cela va s'exécuter beaucoup de fois et comme il y a beaucoup de formulaire... ça va donner un problème de rallentissement de site web je pense.


                  Je vais quand même tenter ce que tu me dis...

                  Mais il faut que je trouve quand même une solution pour mettre le numero variable dnas le nom de la fonction.... poru éviter de planter le site d'une lenteur enorme

                  Je teste.....




                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 février 2019 à 11:12:09

                    Le soucis est que de la manière que tu veux définir ta fonction n'est pas possible.

                    Fais-tu des traitements particuliers en fonction du numéro ? 

                    Le add_action dans ton cas ne s'exécute t-il pas quand on soumet le formulaire (un formulaire) ?

                    • Partager sur Facebook
                    • Partager sur Twitter
                    le bienfait n'est jamais perdu
                      15 février 2019 à 11:41:36

                      ce n'est pas possible d'avoir un nom de fonction qui varie en php ?
                      Tu crois que ce n'est pas possible WillyKouassi  ?

                      Je ne sais pas du tout....
                      J'ai trouvé des trucs comme ça

                      http://php.net/manual/en/functions.variable-functions.php

                      https://www.lexo.ch/blog/2018/07/php-functions-name-as-variable/

                      mais je n'arrive pas à l'appliquer sur mon exemple.. ça fait des erreurs

                      le add_action s'éxecute effectivement pour un formulaire soumi.

                      et il y a plein de formulaire.. c'est pour ça qu'il est recommandé de mettre le numero du formulaire dans le nom.
                      Mes tests ne donnent encore rien pour le moment.....


                      • Partager sur Facebook
                      • Partager sur Twitter
                        15 février 2019 à 12:02:58

                        Définir une fonction comme tu le fais n'est pas possible, même les liens que tu donnes ne le mentionne pas. Ne pas confondre définition et appel.

                        Qui t'a fait cette recommandation ? Parce que je l'ai défini, la fonction ne fait rien, à toi de mettre des var_dump pour voir si tu as les informations que tu veux.

                        -
                        Edité par WillyKouassi 15 février 2019 à 12:04:38

                        • Partager sur Facebook
                        • Partager sur Twitter
                        le bienfait n'est jamais perdu
                          15 février 2019 à 12:10:41

                          mince.... du coup je suis bloquée........ merci pour cette info.... du coup je vais arrêter de me prendre la tête.

                          bon, et bien personne ne m'a fait cette recommandation.

                          Je l'ai juste déduis pas rapport à ce que j'ai...

                          et je ne trouvais rien sur la définition d'une fonction avec un nom variable..

                          mais bon, je me suis dit que cela existait peut être...

                          du coup..... il me reste l'option de passer la variable dans les paramètres....
                          sachant que cela risque de ralentir le site.
                          (d'ailleurs, j'ai un problème car je passe la variable dans les paramètres comme tu me l'as dit mais quand je vérifie à l'intérieur de la fonction, la variable est vide)

                          • Partager sur Facebook
                          • Partager sur Twitter
                            15 février 2019 à 12:15:38

                            Je ne vois pas le rapport entre passer un paramètre et ralentissement, tu ne fais que supposer , c'est dans les fait que tu le constateras.

                            Tout d'abord est-ce que ta fonction s'éxécute? As-tu un do_action où tu passes tous les paramètres de ta fonction ?

                            • Partager sur Facebook
                            • Partager sur Twitter
                            le bienfait n'est jamais perdu
                              15 février 2019 à 12:35:56

                              non, je ne suppose pas, j'ai lu des docs qui disent :

                              "Attention ! Ce code sera exécuté à chaque soumission de formulaire Gravity Forms… Dangereux et inutile si vous avez de nombreux formulaires GF sur votre site. Même astuce mentionnée précédemment : ajoutez l’ID de votre formulaire dans le nom du filtre gform_after_submission pour pallier à ce problème."

                              https://mosaika.fr/astuces-developpement-gravity-forms-wordpress/

                              après je suppose que c'est vrai.

                              Ma fonction s'execute mais pas de trace du paramètre numero de formulaire.

                              J'ai ajouté un do_action mais cela ne change rien....

                              add_shortcode( 'app-benutzer' , 'ss_get_appbenutzer' );
                              function ss_get_appbenutzer($atts, $content = null){
                              /* Récupération du numéro du formulaire*/
                                 extract(shortcode_atts(array(
                                  'num_formular' => 'NUM_formular'
                              	), $atts));
                                  
                              	echo 'NUM 1 ='.$num_formular;
                              	global $num_formular;
                              
                              	do_action('msk_gform_process_user_registration_MB', $entry, $form,$num_formular);
                              }	
                              
                              function msk_gform_process_user_registration_MB ($entry, $form,$num_formular)  {
                              //......code
                              echo 'NUM 2='.$num_formular;
                              ......CODE
                              };
                              add_action('gform_after_submission', 'msk_gform_process_user_registration_MB', 10, 3);
                              

                              peut être il y a un pb parce que le $num_formular n'est pas une variable global... Je l'obtient via un schortcode..

                              En affichage j'ai ça

                              NUM 1 =192

                              EMAIL TEST =emailhaupt@gmail.com

                              NUM 2=

                              j'ai revu le code et j'ai mis

                              global $num_formular;
                              
                              add_shortcode( 'app-benutzer' , 'ss_get_appbenutzer' );
                              function ss_get_appbenutzer($atts, $content = null){
                              	/* Récupération du numéro du formulaire*/
                                  extract(shortcode_atts(array(
                                  'num_formular' => 'NUM_formular'
                              	), $atts));
                                  
                              	echo 'NUM 1 ='.$num_formular;
                              	global $num_formular;
                              
                              	$functionName= 'msk_gform_process_user_registration_'.$num_formular;
                                 // do_action_ref_array('gform_after_submission', array(&$num_formular));
                                 	do_action('gform_after_submission', $entry, $form,$num_formular);
                              
                              }	
                              
                              function msk_gform_process_user_registration_MB ($entry, $form,$num_formular)  {
                              
                              echo 'EMAIL TEST =' .$emailhaupt;
                              echo 'NUM 2='.$num_formular;
                              
                              
                              
                              };
                              //add_action('gform_after_submission_'.$num_formular.'', 'msk_gform_process_user_registration_'.$num_formular.'', 10, 2);
                              //add_action('gform_after_submission_192', 'msk_gform_process_user_registration_192', 10, 2);
                              add_action('gform_after_submission', 'msk_gform_process_user_registration_MB', 10, 3);
                              
                              


                              et j'ai les affichages suivants

                              NUM 1 =192

                              EMAIL TEST =

                              NUM 2=

                              -
                              Edité par Timama 15 février 2019 à 12:52:15

                              • Partager sur Facebook
                              • Partager sur Twitter
                                15 février 2019 à 12:55:32

                                Même dans la doc que tu donnes , l'ID du formulaire est utilisé dans le 1er argument dans le nom du filtre  gform_after_submission_ID qui n'a rien à avoir avec le nom de la fonction.. Pourtant c'est si clair
                                • Partager sur Facebook
                                • Partager sur Twitter
                                le bienfait n'est jamais perdu
                                  15 février 2019 à 15:15:58

                                  pas pour moi, c'est pour ça que je me renseigne ;-)

                                  tu parles de $entry ?

                                  je pourrais fair eun truc comme

                                  'entry_id' => $num_formular

                                   c'est ça ?

                                  ou plutôt

                                  $num_formular->entry_id


                                  tu parles du filtre add_action ?

                                  bon alors j'ai testé ça

                                  add_shortcode( 'app-benutzer' , 'ss_get_appbenutzer' );
                                  function ss_get_appbenutzer($atts, $content = null){
                                      extract(shortcode_atts(array(
                                      'num_formular' => 'NUM_formular'
                                  	), $atts));
                                      
                                  	echo 'NUM 1 ='.$num_formular;
                                  	global $num_formular;
                                         do_action('gform_after_submission_'.$num_formular, $entry, $form);
                                  }	
                                  
                                  function msk_gform_process_user_registration_MB ($entry, $form)  {
                                  
                                  	//$id = $entry['id']; 
                                  	$id = $form['id'];
                                  echo 'EMAIL TEST =' .$emailhaupt;
                                  
                                  echo 'ID = ' .$id;
                                  }
                                  };
                                  
                                  add_action('gform_after_submission', 'msk_gform_process_user_registration_MB', 10, 2);
                                  
                                  

                                  mais cela ne renvoi que NUM 1 =192

                                  du coup il ne rentre pas dans msk_gform_process_user_registration_MB

                                  Et c'est normal puise quenormalement cela devrait être

                                  add_action('gform_after_submission_'.$num_formular', 'msk_gform_process_user_registration_MB', 10, 2);

                                  mais là $num_formular est inconu... je n'arrive pas à le passer en global

                                  je suis perdue.. je tourne en rond

                                  -
                                  Edité par Timama 15 février 2019 à 16:05:19

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    19 février 2019 à 14:39:36

                                    du coup comme cela n'a plus rien à voir, je change de sujet...
                                    Et je passe à une recherche sur les globals

                                    merci !

                                    (pas résolu mais part ailleurs vers un autre sujet)

                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    PHP variable dans le nom d'une fonction

                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                    • Editeur
                                    • Markdown