Module multigaming
L'ajax c'est le mal :p
Créations de Modules
Yoda741 Membre non connecté
Booster Minigun
- Booster Minigun
- Voir le profil du membre Yoda741
- Inscrit le : 03/12/2016
- Groupes :
J'aurais voulu avoir quelques pistes pour m'aider à développer quelques fonctionnalités pour mon module.
J'ai un champ de type select qui est rempli en php avec la liste des groupes du site.
Une fois le groupe choisi, je voudrais que dans le 2e select du formulaire la liste des membres soit remplie automatiquement.
J'ai fait une page pour la réponse ajax mais j'arrive pas a implémenter la demande de mise à jour dans le formulaire.
N'ayant trouvé pas de doc claire au sujet des class de formulaires fournies par le framework, je cherche dans tous les fichiers et je fini par m'embrouiller le cerveau.
J'avais commencé a créer une class qui implémente le simpleselect du framework pour effectuer la liste des membres du groupe avec une fonction jquery qui ferait appel a ma page de réponse. Sauf qu'il faut que ce soit au changement d'un autre champ du formulaire.
Je voudrais rester dans les standards du framework mais si ca continu je vais faire ca a l'ancienne méthode. Je crois que je gagnerais du temps !
ElenWii Membre non connecté
- Administrateur
- Voir le profil du membre ElenWii
- Inscrit le : 14/08/2009
- Site internet
- Groupes :
- Equipe Graphique
Je ne suis pas experts en formulaire mais je pense que tu devrais utiliser le système de PBT qui est à mon avis capable de faire ce que tu veux.
On peut gérer des events click et appeler des functions.
Code PHP :
$fieldset->add_field( new FormFieldCheckbox('redirection_www_enabled', $this->lang['advanced-config.redirection_www_enabled'], $this->server_environment_config->is_redirection_www_enabled(), array( 'description' => $redirection_www_enabled_explain, 'disabled' => $redirection_www_disabled, 'events' => array('click' => ' if (HTMLForms.getField("redirection_www_enabled").getValue()) { HTMLForms.getField("redirection_www_mode").enable(); } else { HTMLForms.getField("redirection_www_mode").disable(); }') ) ));
Yoda741 Membre non connecté
Booster Minigun
- Booster Minigun
- Voir le profil du membre Yoda741
- Inscrit le : 03/12/2016
- Groupes :
Mon fichier qui renvoi les variables :
Code PHP :
<?php class MultigamingAjaxListMembersTeamController extends AbstractController { public function execute(HTTPRequestCustom $request) { $this->groups_cache = GroupsCache::load(); $id_group = $request->get_int('id', 0); $users = array(); foreach ($this->get_members_group($id_group) as $user_id) { if (!empty($user_id)) { $user = PersistenceContext::get_querier()->select('SELECT display_name FROM ' . DB_TABLE_MEMBER . ' WHERE user_id = :user_id ', array('user_id' => $user_id))->fetch(); $users[] = array('id' => $user_id, 'display_name' => $user['display_name']); } } return new JSONResponse($users); } private function get_members_group($group_id_selected) { if (!empty($group_id_selected)) { $group = $this->groups_cache->get_group($group_id_selected); return $group['members']; } } } ?>
Ensuite je me suis basé sur le code du champ pour remplir automatiquement sur une recherche de pseudo pour faire un formfield spécial
Code PHP :
protected static $tpl_src='<select name="${escape(NAME)}" id="${escape(HTML_ID)}" class="${escape(CLASS)}" # IF C_DISABLED # disabled="disabled" # ENDIF # onchange="javascript:multigaming_update_liste_members_{HTML_ID}();" /> # START options # # INCLUDE options.OPTION # # END options # </select> <script> function multigaming_update_liste_members_{HTML_ID}() { jQuery("#" + ${escapejs(HTML_ID)}).ajax({ serviceUrl: ${escapejs(FILE)}?id=${escapejs(HTML_ID)}.value, paramName: ${escapejs(NAME_PARAMETER)}, preserveInput: {PRESERVE_INPUT}, params: {\'id\': \'{id_membre}\,\'display_name\' : \'{display_name}\'}, success: function(returnData){ $.each(returnData, function() { HTMLForms.getField("id_leader").append(\'<option value="\'+ returnData.id +\'">\'+ returnData.display_name +\'</option>\'); }); } }); } </script>';
Et ensuite pour mon formulaire :
Code PHP :
$fieldset->add_field(new FormFieldSimpleSelectChoice('id_group', $this->lang['teams_form_group'], $this->get_team()->get_id_group(), $this->build_select_groups($this->get_team()->get_id_group()), array('required' => true, 'events' => array( 'change' => 'multigaming_update_liste_members_id_leader()' ) ) )); $list_lang = LangLoader::get_message('list', 'main'); $fieldset->add_field(new MultigamingFormFieldAjaxSelectLeader('id_leader', $this->lang['teams_form_leader'], '', array( new FormFieldSelectChoiceOption('-- '. $list_lang .' --', '') ), array('required' => true, 'file' => MultigamingUrlBuilder::ajax_listmembers()) ));
Je penses que je suis pas trop mal parti mais je bloque ! ca marche pas et ca m'énerve !
Je pourrais faire de préparer toutes les variables dans l'event on change avec toute les valeurs sur chaque choix possible avec des boucles mais je préfère utiliser la methode de ajax sauf que j'y arrive pas le php ca va mais tout ce qui est java and co ben j'ai plus de difficultés !
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie