Follow us on Twitter
Astuces Développement Ajouter des champs supplémentaires à la page d'enregistrement


Ajouter des champs supplémentaires à la page d'enregistrement

Contenu text : oui
Contenu vidéo
: non

Attention, ceci est un hack Joomla. En suivant ce tutoriel, vous allez modifier le code de base Joomla. Ceci veut dire qu'à la prochaine mise à jour de Joomla, vous devrez faire attention de sauvegarder les fichiers qui auront été modifiés si ceux-ci sont impactés par la mise à jour. N'oubliez pas de faire une sauvegarde de chaque fichier avant de les modifier.

La page d'inscription de Joomla contient généralement suffisamment d'informations pour la plupart des sites Web. Dans le cas où vous deviez rajouter d'autres champs et que vous n'ayez aucune connaissance en programmation, je vous conseille d'utiliser un composant comme Community Builder qui vous permettra relativement facilement de rajouter ces champs.

Cependant, il est tout à fait possible de rajouter des champs d'enregistrement sans avoir à installer d'autres composants, en modifiant quelques lignes dans le code de base Joomla. Et voici comment faire:


Dans cette exemple, nous allons rajouter un champ qui contiendra le numéro de téléphone est un autre contenant la profession de la personne qui s'inscrira mais vous pouvez modifier l'exemple pour ajouter les champs que vous voulez.

1 - Ajouter des champs à la table des utilisateur

La première chose que vous devez faire, c'est d'ajouter dans la table des utilisateurs, les nouveaux champs. Pour accéder à la base de données, vous allez devoir utiliser PhpmyAdmin puis exécuter ces requêtes SQL:

1
2
ALTER TABLE `jos_users` ADD `telephone` VARCHAR (100) NOT NULL AFTER `name`;
ALTER TABLE `jos_users` ADD `profession` VARCHAR (100) NOT NULL AFTER `telephone`;

Une fois les requêtes SQL exécutées, veuillez contrôler que les deux champs sont bien présents dans la table jos_users.

2 - Modifier le code

Au total, quatre fichiers devront être modifés.

Veuillez tout d'abord ouvrir le fichier libraries/joomla/database/table/user.php et recherchez le code:

/**
* The login name
*
* @var string
*/
var $username = null;

Et ajoutez juste après, la définition des deux nouveaux champs:

1
2
var $telephone = null;
var $profession = null;

Modifiez ensuite le contenu de la page d'enregistrement qui se trouve dans le fichier components/com_user/views/register/tmpl/default.php et placer les champs à l'endroit désiré en rajoutant ce type de code:

1
2
3
4
5
6
7
8
9
10
11
12
<tr>
<td width="30%" height="40">
<label id="telephonemsg" for="telephone">: </label> </td>
<td>
<input type="text" name="telephone" id="telephone" size="40" value="user->get( 'telephone' );?>" class="inputbox required" maxlength="50" /> * </td>
</tr>
<tr>
<td width="30%" height="40">
<label id="profession" for="phone">: </label> </td>
<td>
<input type="text" name="profession" id="profession" size="40" value="user->get( 'profession' );?>" class="inputbox required" maxlength="50" /> * </td>
</tr>


Ensuite, veuillez rajouter ces champs dans la page d'édition des informations de l'utilisateur qui se trouvent dans le fichier components/com_user/views/user/tmpl/form.php. C'est à vous de définir après quel champ, les nouveaux champs devront être affiché. Vous pouvez par exemple les afficher en dessous du champ Name. Recherchez donc dans la page le code affichant le nom de l'utilisateur est placez après la balise </tr> le code suivant :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<tr>    
<td width="120">
<label for="telephone">
:
</label>
</td>
<td>
<input class="inputbox" type="text" id="telephone" name="telephone" value="user->get('telephone');?>" size="40" />
</td>
</tr>
<tr>
<td width="120">
<label for="profession">
:
</label>
</td>
<td>
<input class="inputbox" type="text" id="profession" name="profession" value="user->get('profession');?>" size="40" />
</td>
</tr>

Il ne vous reste plus qu'à modifier la page d'édition des information de l'utilisateur. Cela se trouve dans le fichier administrator\components\com_users\views\user\tmpl\form.php. C'est à vous de définir après quel champ, les nouveaux champs devront être affiché. Vous pouvez par exemple les afficher en dessous du champ Name. Recherchez donc dans la page le code affichant le nom de l'utilisateur est placez après la balise </tr> le code suivant :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<tr>
<td class="key">
<label for="telephone">
 
</label>
</td>
<td>
<input class="inputbox" type="text" name="telephone" id="telephone" size="40" value="user->get('telephone'); ?>" />
</td>
</tr>
<tr>
<td class="key">
<label for="profession">
 
</label>
</td>
<td>
<input class="inputbox" type="text" name="profession" id="profession" size="40" value="user->get('profession'); ?>" />
</td>
</tr>
Voilà, vous venez de rajouter deux nouveaux champs au formulaire d'enregistrement de Joomla, vous pouvez créer un compte pour tester le résultat.

18 Commentaire

  1. Bonjour,j'ai suivi la procédure.
    Mais je bloque sur un problème.
    Comment mettre à jour les nouveaux champs de la base à partir du formulaire modifié ??

    Dans le sens base données formulaire, c'est OK

    Merci de votre aide
  2. merci de votre aide c gentil:-D;-)
  3. Bonjour,
    J'ai modifié les fichiers suivants... et la table jos_users en conséquence...
    Mais rien à faire, le formulaire prend en compte mes nouveaux champs, mais ils ne sont pas pour autant enregistré dans ma table jos_users !!!

    Cela fait un moment que je cherche, et suis un peu fatigué là !!

    Merci de votre aide.
  4. Première question un peu bête mais on ne sait jamais, es-tu certain de regarder dans la bonne base de données?

    Si oui, pourrais-tu regarder que les noms des nouvelles colonnes de ta table jos_users sont bien strictement identiques aux noms définis dans les différents fichiers que tu as modifiés car c'est justement sur ces noms que Joomla se base par la suite pour enregistrer les données saisies.
  5. Bonsoir,
    je viens de tester en local le tutoriel, il est super merci beaucoup car cela m'ouvre de grandes perspectives. Peut être en réponse à la question de Patrick, moi non plus cela ne marchait pas car en fait j'utilise le template Ja-puriy II qui incorpore le com_user. Lorsque j'ai remis le template par défaut cela a fonctionné. Ce soir, je vais tester la modification dans le template mais je suis optimiste car cela se présente de la même façon. Je vous tiens au courant.
  6. J'ai aussi un problème de connectivité avec la BD. J'ai modifié les fichiers et mon formulaire affiche bien le champ Prénom que j'y ai ajouté. J'ai aussi ajouté dans FR-FR la traduc Fisrt name=Prénom, tout fonctionne. Le email de conf affiche toutefois Bonjour {fisrtname} et le champ firstname reste vide. les auyres répondent, donc c'est la bonne BD. Tous les codes correspondent au champ firstname, pas de fautes de frappe.
    Comment faire connecter ce nouveau champ de saisie avec la BD??
    Merci
  7. J'ai aussi un problème de connectivité avec la BD. J'ai modifié les fichiers et mon formulaire affiche bien le champ Prénom que j'y ai ajouté. J'ai aussi ajouté dans FR-FR la traduc Fisrt name=Prénom, tout fonctionne. Le email de conf affiche toutefois Bonjour {fisrtname} et le champ firstname reste vide. les auyres répondent, donc c'est la bonne BD. Tous les codes correspondent au champ firstname, pas de fautes de frappe.
    Comment faire connecter ce nouveau champ de saisie avec la BD??
    Merci
  8. bonjour
    j'ai suivi les même étapes j'arrive a ajouter un nouveau champs mais ca s'enregistre pas dans ma base et je ne le reçois pas par mail
    vous pouvez m'aider svp
  9. Si cela ne fonctionne pas chez vous c'est que vous avez manqué une étapes. Un seul petit oubli suffit à ce que la saisie du nouveau formulaire d'inscription ne fonctionne pas.
  10. Cela marche correctement sauf l'enregistrement, cela me provoque une erreur :
    Fatal error: Cannot access empty property in /.../components/com_user/views/register/tmpl/default.php on line 61; A cette ligne j 'ai dans le formulaire d'inscription :
    $user->get( 'telephone' ));?>" maxlength="50" />

    Par contre si je fais

    Tout marche bien, l'inscription se fait, les modifs en frontend ou back end sont possible (les champs sont pré rempli), mais je reste dubitatif.
    Est-ce grave docteur si je vire le code ** $this->escape($this->$user->get( 'telephone' )) ** ? :\
    Note les champs originaux ont le m^me code avec en plus la vérification de saisie obligatoire ex: input type="text" id="username" name="username" size="40" value="escape($this->user->get( 'username' ));?>" class="inputbox required validate-username" maxlength="25" /> *
    Merci de vos avis éclairés, je suis un peut perdu ;-)
  11. Bonjour à tous,

    Je viens d'effectuer cette marche à suivre mais ma base de données reste vide pour ces nouveaux champs.

    J'ai déjà vérifier la concordance des noms.. Voilà..

    Merci d'avance pour vos réponses ^^
  12. Merci pour ce tuto très bien fait, ça fonctionne sans problème pour moi ;-)

    Maintenant, j'aurais une autre question, et je pense que ça pourrait même complèter tes explications.

    - Admettons que je veuille ajouter la date de naissance dans le formulaire, je me retrouve avec 3 select ayant comme valeur $jour, $mois, $annee.
    Que dois-je ajouter concrètement dans le fichier libraries/joomla/database/table/user.php sachant que l'idéal serait que mes 3 variables récupérées se retrouvent dans un seul et même champ timestamp dans ma base de données?

    Je ne sais pas si tu vois ce que je veux dire, mais ton aide serait vraiment la bienvenue! :)
  13. Bonjour,

    Je cherche comment activer les zone obligation.

    Très important pour moi.

    Cordialement,
  14. Bonjour,

    Voici le message que j'ai :

    Le système est incapable de trouver un utilisateur avec ces données d'activation. Le compte peut être déjà activé ou le code d'activation a expiré, dans ce cas, veuillez vous réinscrire.

    Cordialement,
  15. Bonjour et merci pour ce tuto simple, clair et surtout efficace.
    Question supplémentaire : quelle est le process pour que l'email envoyé à l'administrateur du site comporte les champs rajoutés ?

    Par défaut je reçoit ;
    Bonjour Administrator. Un nouvel utilisateur s'est inscrit sur le site Color Consulting.
    Cet e-mail contient ses coordonnées :
    Nom : World Company
    E-mail : zen@libertysurf.fr
    Nom d'utilisateur : nissan
    Merci de ne pas répondre à ce message, généré automatiquement à titre informatif.

    Et idéalement :
    Bonjour Administrator. Un nouvel utilisateur s'est inscrit sur le site Color Consulting.
    Cet e-mail contient ses coordonnées :
    Nom : World Company
    Telephone : 01 46 25 17 35
    Profession : commercial
    E-mail : zen@libertysurf.fr
    Nom d'utilisateur : nissan
    Merci de ne pas répondre à ce message, généré automatiquement à titre informatif.

    Autre point, dès que je mets un accent ça ne passe plus ?!
    Merci de vos retours et excellente journée à tous.
    ++8-)
  16. Lors de l'édition de components/com_user/views/register/tmpl/default.php il y marqué ceci :



    Il faut remplacer
    par :
  17. artnetwalk

    dans components/com_user/views/register/tmpl/default.php si tu ajoutes
    à ton input cela le rend obligatoire.
  18. jack les accents sont à mettre sous formes de caractères spéciaux html, liste disponible sur internet : "e par exemple.

Ajouter un commentaire


    • >:o
    • :-[
    • :'(
    • :-(
    • :-D
    • :-*
    • :-)
    • :P
    • :\
    • 8-)
    • ;-)

     

    Dernières astuces

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    Formulaire identification