Modifier le formulaire d'inscription
Catégorie : Personnaliser son site
Versions xoops 2.0.5 à  2.0.7

Attention:
- suivez scrupuleusement les indications et faites les tests au fur et à  mesure.
- prenez les précautions habituelles (test en local, sauvegarde du site avant application du hack)

Sommaire

1)

Formulaire d'enregistrement

include/registerform

2)

Définitions de langage

language/...../user.php

3)

Table users

xoops_users

4)

Classe user

kernel/user.php

5)

Gestion de l'enregistrement

register.php

6)

Informations sur le membre

userinfo.php

7)

Template

system/templates/system_userinfo.html

8)

Modification du profil par le membre

edituser.php

9)

Administration membre : formulaire

modules/system/admin/users/userform.php

10)

Administration membre: fichier principal

modules/system/admin/users/main.php

11)

Edition, mise à  jour du membre

modules/system/admin/users/users.php

12)

Définition de langage pour l'admin

modules/system/language/.../admin/users.php

NB: Si vous voulez simplement insérer un champ existant dans la table (name p.ex.), seules les étapes 1 et 5 sont nécessaires.


1) Formulaire d'enregistrement
Fichier include/registerform
Sous la ligne
$reg_form->addElement(new XoopsFormText(_US_NICKNAME, "uname", 26, 25, $uname), true);

Ajoutez
$reg_form->addElement(new XoopsFormText(_US_NAME, "name", 26, 25, $name), true); // true si champ obligatoire
$reg_form->addElement(new XoopsFormText(_US_FIRSTNAME, "firstname", 26, 25, $firstname)); // ex. avec champ non obligatoire

Astuce
Pour rajouter une * aprês le nom d'un champ obligatoire
$reg_form->addElement(new XoopsFormText(_US_NAME."*", "name", 26, 25, $name), true);

2) Définitions de langage
Fichier language/...../user.php
Sous la ligne
define('_US_NAME','Name');

Ajoutez
define('_US_FIRSTNAME','Firstname');

Testez maintenant l'affichage du formulaire.

3) Table xoops_users

Modifiez maintenant la table xoops_user pour ajouter le champ firstname varchar(60) aprês le champ name.

4) Classe user
Modifiez la classe user pour la prise en compte du nouveau champ firstname
Fichier kernel/user.php

Sous les lignes
function XoopsUser($id = null)
$this->initVar('name', XOBJ_DTYPE_TXTBOX, null, false, 60);

Ajoutez
$this->initVar('firstname', XOBJ_DTYPE_TXTBOX, null, false, 60);

Ajoutez la fonction
function firstname($format="S")
{
return $this->getVar("firstname", $format);
}


Dans la fonction : function insert(&$user, $force = false)
insérez les parties en rouge: (respectez ici pour votre nouveau champ sa position dans la table users)

if ($user->isNew()) {
$sql = sprintf("INSERT INTO %s (uid, uname,name, firstname, email, ....
...... VALUES (%u, %s, %s,%s, %s, .....
..... $this->db->quoteString($uname), $this->db->quoteString($name), $this->db->quoteString($firstname),
$this->db->quoteString($email),....

} else {
$sql = sprintf("UPDATE %s SET uname = %s, name = %s,firstname = %s, email = %s .....
.... $this->db->quoteString($uname), $this->db->quoteString($name),$this->db->quoteString($firstname),
$this->db->quoteString($email), ....

5) Gestion du formulaire d'inscription
Fichier register.php

Partie case 'newuser':
Sous la ligne
echo "<input type='hidden' name='uname' value='".$myts->makeTboxData4PreviewInForm($uname)."' />";

Ajoutez
echo "<input type='hidden' name='name' value='".$myts->makeTboxData4PreviewInForm($name)."' />";
echo "<input type='hidden' name='firstname' value='".$myts->makeTboxData4PreviewInForm($firstname)."' />";


Partie case 'finish':
Sous la ligne
$newuser->setVar('uname', $uname);

Ajoutez
$newuser->setVar('name', $name);
$newuser->setVar('firstname', $firstname);


Testez maintenant l'enregistrement d'un membre.

6) Affichage du profil
Fichier userinfo.php
Sous les lignes
$xoopsTpl->assign('lang_realname', _US_REALNAME);
$xoopsTpl->assign('user_realname', $thisUser->getVar('name'));


Ajoutez
$xoopsTpl->assign('lang_firstname', _US_FIRSTNAME);
$xoopsTpl->assign('user_firstname', $thisUser->getVar('firstname'));


7) Template d'affichage du profil
Fichier system/templates/system_userinfo.html
En rajoutant
<tr>
<td class="head"><{$lang_firstname}></td>
<td align="center" class="odd"><{$user_firstname}></td>
</tr>

Metrre à  jour le module systeme

Testez maintenant 'Voir son compte'

8) Editer son compte
Fichier edituser.php
Dans la partie
if ($op == 'saveuser') {
Sous la ligne
$edituser->setVar('name', $name);

Ajoutez
$edituser->setVar('firstname', $firstname);

Dans la partie
if ($op == 'editprofile') {
Sous les lignes
$name_text = new XoopsFormText(_US_REALNAME, 'name', 30, 60, $xoopsUser->getVar('name', 'E'));$form->addElement($name_text);

Ajoutez
$firstname_text = new XoopsFormText(_US_FIRSTNAME, 'firstname', 30, 60, $xoopsUser->getVar('firstname', 'E'));$form->addElement($firstname_text);


Testez maintenant 'Editer son compte'

9) Administration membre
Fichier modules/system/admin/users/userform.php
Au début, sous la ligne
$name_text = new XoopsFormText(_AM_NAME, "name", 30, 60, $name_value);

Ajoutez
$firstname_text = new XoopsFormText(_AM_FIRSTNAME, "firstname", 30, 60, $firstname_value);

Vers la fin, sous la ligne
$form->addElement($name_text);

Ajoutez
$form->addElement($firstname_text);

10) Administration membre: fichier principal
Fichier modules/system/admin/users/main.php
Modifiez l'appel à  la fonction updateUser

updateUser($uid, $uname, $name, $firstname, $url, $email, $user_icq, $user_aim, $user_yim, $user_msnm, $user_from, $user_occ, $user_intrest, $user_viewemail, $user_avatar, $user_sig, $attachsig, $theme, $pass, $pass2, $rank, $bio, $uorder, $umode, $notify_method, $notify_mode, $timezone_offset, $user_mailok);

11) Administration : édition/mise à  jour du membre
Fichier modules/system/admin/users/users.php

function modifyUser($user)
Sous la ligne
$name_value = $user->getVar("name", "E");

Ajoutez
$firstname_value = $user->getVar("firstname", "E");

function updateUser
function updateUser($uid, $uname, $name,$firstname, $url, $email, $user_icq, $user_aim, $user_yim, $user_msnm, $user_from, $user_occ, $user_intrest, $user_viewemail, $user_avatar, $user_sig, $attachsig, $theme, $pass, $pass2, $rank, $bio, $uorder, $umode, $notify_method, $notify_mode, $timezone_offset, $user_mailok)

puis sous la ligne
$edituser->setVar("name", $name);

Ajoutez
$edituser->setVar("firstname", $firstname);

12) Définition de langage pour l'administration
Fichier modules/system/language/.../admin/users.php
define("_AM_FIRSTNAME","Pr&eacute;nom");

Testez maintenant ''Editer/effacer des membres'

Pour conclure
A partir de l'exemple ci-dessus, vous pourrez personnaliser différemment ce formulaire d'inscription, mais vous devrez pour celà  posséder un minimum de connaissances sur les différentes classes de formulaire de xoops, les instructions php, les requêtes sql.

<a href="http://creativecommons.org/licenses/by-nc-sa/2.0/fr/" title="Licence, certains droits réservés"><img src="http://www.frxoops.org/images/cdr_bouton.gif" alt="Licence, certains droits réservés" /></a>