Classement des champs personnalisés et natifs du formulaire d'inscription

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • Classement des champs personnalisés et natifs du formulaire d'inscription

    Bonjour,

    j'utilise des champs personnalisés pour les utilisateurs afin de préparer le formulaire d'inscription personnalisé.
    J'aimerai pouvoir classer l'ordre d'apparition de ces champs (ceux par défaut de Joomla + les champs personnalisés).

    Je sais qu'il faut agir sur la vue com_users/registration/default.php pour personnaliser l'affichage mais les champs sont appelés les uns après les autres sans pouvoir maîtriser cet aspect via la boucle foreach :
    Code PHP:
    <?php // Iterate through the form fieldsets and display each one. ?>
    <?php 
    foreach ($this->form->getFieldsets() as $fieldset) : ?>
    <?php $fields 
    $this->form->getFieldset($fieldset->name); ?>
    <?php 
    if (count($fields)) : ?>
    <fieldset>
    <?php // If the fieldset has a label set, display it as the legend. ?>
    <?php 
    if (isset($fieldset->label)) : ?>
    <legend><?php echo Text::_($fieldset->label); ?></legend>
    <?php endif; ?>
    <?php 
    echo $this->form->renderFieldset($fieldset->name); ?>
    </fieldset>
    <?php endif; ?>
    <?php 
    endforeach; ?>
    Par exemple le champ nom j'aimerai le reclasser.
    Placer le Recaptcha à la fin du formulaire etc ...

    Comment procédez vous ?

    Par avance merci

  • #2
    Réponse courte pcq je suis en déplacement
    - ou bien via css (envutilisant Order avec Flexbox ou CSS Grid)
    - Ou bien via un override
    easyconnect83 aime ceci.
    Présentations : slides.woluweb.be | Coordonnées complètes : www.woluweb.be

    Un message d’erreur sur votre site Joomla... ayez le reflexe de consulter la base de connaissance : https://kb.joomla.fr

    Ce forum, vous l'aimez ? Il vous a sauvé la vie ? Vous y apprenez régulièrement ? Alors adhérer à l'AFUJ, l'Association Francophone des Utilisateurs de Joomla : https://www.joomla.fr/association/adherer

    Commentaire


    • #3
      tu fais un css , ton conteneur display: flex
      et pour chaque element
      order:1;
      order:2;
      cest sans doute le plus simple et le plus flex-ible

      faudrait voir ton code html a la sortie pour plus de precision
      Dernière édition par tradeymag à 29/03/2023, 21h44

      Commentaire


      • #4
        Merci à tous les deux de me mettre sur la bonne voie.

        Le code source que j'ai pris en exemple provient du fichier natif de Joomla default.php.
        Sur le projet actuel la vue est à peu près similaire très peu de modifications.

        Si je comprends bien pour les champs personnalisés je peux leur affecter une classe pour ensuite leur donner un ordre précis avec display: flex.
        Mais comment faire avec les champs natifs de Joomla nom, identifiant, mot de passe x 2, adresse email, Captcha ?

        Dans le code source le premier bloc génère les champs natifs puis le bloc suivant les champs personnalisés (voir pj).

        Pour l'override j'y ai pensé mais il faut que je sache comment Joomla nomme les champs natifs.
        Si je procède ainsi et que j'appelle manuellement les champs personnalisés cela lève le côté "dynamique" de la chose. Si dans le back-office je créé un nouveau champ pour les utilisateurs celui-ci ne sera pas appelé sur le formulaire d'inscription si je ne touche pas à nouveau le fichier de la vue personnalisé.

        Merci
        Fichiers joints

        Commentaire


        • #5
          Pour l'ordre des champs personnalisés entre eux, il n'y a rien à coder (ni en css ni dans un override) : c'est l'Ordre dans l'interface d'administration qui joue.

          Donc pour remettre le Captcha à la fin p ex, c'est via CSS ou Override. Il faut pas savoir coder pour l'override : on crée l'override depuis l'interface et on déplace juste les blocs existants dans le code php.
          (ceci dit, j'avais en tête que Joomla avait changé cela l'an dernier dans le noyau. Mais peut-être était-ce uniquement pour Joomla 4?)
          easyconnect83 aime ceci.
          Présentations : slides.woluweb.be | Coordonnées complètes : www.woluweb.be

          Un message d’erreur sur votre site Joomla... ayez le reflexe de consulter la base de connaissance : https://kb.joomla.fr

          Ce forum, vous l'aimez ? Il vous a sauvé la vie ? Vous y apprenez régulièrement ? Alors adhérer à l'AFUJ, l'Association Francophone des Utilisateurs de Joomla : https://www.joomla.fr/association/adherer

          Commentaire


          • #6
            Envoyé par easyconnect83 Voir le message
            Merci à tous les deux de me mettre sur la bonne voie.

            Le code source que j'ai pris en exemple provient du fichier natif de Joomla default.php.
            Sur le projet actuel la vue est à peu près similaire très peu de modifications.

            Si je comprends bien pour les champs personnalisés je peux leur affecter une classe pour ensuite leur donner un ordre précis avec display: flex.
            Mais comment faire avec les champs natifs de Joomla nom, identifiant, mot de passe x 2, adresse email, Captcha ?

            Dans le code source le premier bloc génère les champs natifs puis le bloc suivant les champs personnalisés (voir pj).

            Pour l'override j'y ai pensé mais il faut que je sache comment Joomla nomme les champs natifs.
            Si je procède ainsi et que j'appelle manuellement les champs personnalisés cela lève le côté "dynamique" de la chose. Si dans le back-office je créé un nouveau champ pour les utilisateurs celui-ci ne sera pas appelé sur le formulaire d'inscription si je ne touche pas à nouveau le fichier de la vue personnalisé.

            Merci
            on peut comme dit woluweb​ ordonner les champs dans l'admin mais j'trouve quand meme preferable de le faire en css , et c'est enfantin a faire , c'est pas ce qui s'appelle coder
            dans ta page ils ont uniquement une class control group il faut leur ajouter un identifiant perso sinon on peut rien faire
            et meme tes fieldset tu devrais les nommer
            il faut sands doute overrider le layout renderfield.php je ne comprend pas qu'en natif Joomla ne differencie pas les control-group
            pour simplifier dans to foreach tu pourrais

            $i= 0;
            Code:
            foreach(...){
            
            echo '<div data-id="'.$i++.'">';
             echo $this->form->renderFieldset($fieldset->name);
            echo '</div>';
            }
            et ensuite dans ton css

            Code:
            .tonform fieldset{
            display:flex:
            }
            
            [data-id="8"]{
            order:1;
            }​
            [data-id="4"]{
            order:2;
            }​

            cest pas beau a cause de l'ajout du div mais ca marche
            et si tu veux savoir a quoi correspond les numero tu crees un array nom=> id pour les repérer
            Dernière édition par tradeymag à 30/03/2023, 09h51
            easyconnect83 aime ceci.

            Commentaire


            • #7
              Il y a tout de même quelque chose qui m'échappe.
              Les lignes indiquées avec la class control-group de chaque DIV contenant un champ
              je ne sais pas à quel endroit Joomla précise cette class pour la modifier pour chaque champ.

              Et dans la vue par défaut default.php du dossier registration il n'est pas possible de déplacer le champ nom, mot de passe ou recaptcha de Joomla.
              Ils ne sont pas identifiés dans le code source.

              Merci

              Commentaire


              • #8
                origine :
                /layouts/joomla/form/renderfield.php
                tu peux faire un overrides dans :
                /templates/tontemplate/html/layouts/joomla/form/renderfield.php

                mais Joomla a vraiment mal fait les choses de ne pas les identifier en natif, c'est absurde
                c'est pour ca que m solution de les entourer de ton propre div avec un compteur $i++. si elle n'es pas esthétique elle marche et elle est facile a mettre en place

                tu crees un array

                $formFields= array(
                0 => 'nom',
                1=> 'prenom',
                2 => 'sexe',
                ...
                )​

                et dans ta boucle

                $i= 0;
                foreach(...){
                $i++;
                echo '<div data-id="'.$formFields[$i].'">';
                echo $this->form->renderFieldset($fieldset->name);
                echo '</div>';
                }​

                et tu recuperes en css

                [data-id="prenom"]{
                order:2;
                }

                ou si tu es sur de l'ordre directement

                echo '<div style="order:$i;">';
                mais en ce cas il faut modifier ton array pour avoir des chiffres
                Dernière édition par tradeymag à 30/03/2023, 10h44
                easyconnect83 aime ceci.

                Commentaire


                • #9
                  Merci je vais essayer tout ça et je posterai le détail des opérations qui pourra servir certainement à d'autres

                  Commentaire

                  Annonce

                  Réduire
                  Aucune annonce pour le moment.

                  Partenaire de l'association

                  Réduire

                  Hébergeur Web PlanetHoster
                  Travaille ...
                  X