Ce guide a pour but de vous expliquer comment modifier le formulaire d'inscription, en ajoutant une liste déroulante pour déterminer le genre de l'utilisateur (Monsieur, Madame, Mademoiselle).
Comme indiqué dans l'article "Modifier le formulaire d'inscription", je ne saurai trop vous conseiller de faire une sauvegarde de votre base ainsi que des fichiers que nous allons modifier.
J'espêre que l'auteur de l'article "Modifier le formulaire d'inscription" ne m'en voudra pas d'avoir largement copié son texte en l'adaptant pour cet article.
Je l'ai fait dans le but de garder une cohérence de présentation et saluer son travail que j'utilise beaucoup dans mes installations.
a) Création du fichier /class/xoopsform/formselectgenre.php
<?php<br />
<br />
include_once XOOPS_ROOT_PATH."/class/xoopslists.php";<br />
include_once XOOPS_ROOT_PATH."/class/xoopsform/formselect.php";<br />
<br />
class XoopsFormSelectGenre extends XoopsFormSelect<br />
{<br />
function XoopsFormSelectGenre($caption, $name, $value=null, $size=1)<br />
{<br />
$this->XoopsFormSelect($caption, $name, $value, $size);<br />
$this->addOptionArray(XoopsLists::getGenreList());<br />
}<br />
}<br />
?>
b) Modification du fichier /class/xoopslists.php
En dessous de
if ( !defined("XOOPS_LISTS_INCLUDED") ) {
define("XOOPS_LISTS_INCLUDED",1);
class XoopsLists
{
Ajoutez
function &getGenreList()
{
include_once XOOPS_ROOT_PATH.'/language/'.$GLOBALS['xoopsConfig']['language'].'/user.php';
$genre_list = array ("0" => _US_GENRE_MAN, "1" => _US_GENRE_WOMAN, "2" => _US_GENRE_MISS);
return $genre_list;
}
C'est ici qu'il faut ajouter les champs si vous désirez créer une liste autre que pour le genre.
0 : premier item. Dans l'exemple "0" => _US_GENRE_MAN
1 : deuxiême item. Dans l'exemple "1" => _US_GENRE_WOMAN
2 : troisiême item. Dans l'exemple "2" => _US_GENRE_MISS
etc...
c) Modification du fichier /class/xoopsformloader.php
En dessous de
include_once XOOPS_ROOT_PATH."/class/xoopsform/formdatetime.php";
Ajoutez
include_once XOOPS_ROOT_PATH."/class/xoopsform/formselectgenre.php";
d) Modification du fichier /include/functions.php
Ajouter la fonction suivante :
function xoops_getgenre($genre_id =0)
{
switch ($genre_id) {
case '0':
$genre_lib = _US_GENRE_MAN;
break;
case '1':
$genre_lib = _US_GENRE_WOMAN;
break;
case '2':
$genre_lib = _US_GENRE_MISS;
break;
default:
$genre_lib = _US_GENRE_MAN;
break;
}
return $genre_lib;
}
Làaussi, veuillez à  ajouter vos items.
Votre liste est remplie et prête à  être utiliée partout où vous le désirez.
Fichier /include/registerform.php
Sous la ligne
$reg_form->addElement(new XoopsFormText(_US_NICKNAME, "uname", 26, 25, $uname), true);
Ajoutez
$reg_form->addElement(new XoopsFormSelectGenre(_US_GENRE, "genre", $genre));
Fichier language/...../user.php
Sous la ligne
define('_US_NAME','Name');
Ajoutez
define('_US_GENRE','Genre');
Ajoutez un champs genre, de type float (0,0 par défaut) aprês le champ name.
Attention, l'emplacement de ce champ est important !
Modifiez la classe user pour la prise en compte du nouveau champ genre
Fichier style="color: rgb(0, 0, 255);">/kernel/user.php
Sous les lignes
function XoopsUser($id = null)
$this->initVar('name', XOBJ_DTYPE_TXTBOX, null, false, 60);
Ajoutez
$this->initVar('genre', XOBJ_DTYPE_OTHER, null, false);
Ajoutez la fonction
function genre()
{
$this->_genre = xoops_getgenre($this->getVar('genre'));
return $this->_genre;
}
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, genre, email, ....
...... VALUES (%u, %s, %s, %.2f, %s, .....
..... $this->db->quoteString($uname), $this->db->quoteString($name), $genre,
$this->db->quoteString($email),....
} else {
$sql = sprintf("UPDATE %s SET uname = %s, name = %s, genre = %.2f, email = %s .....
.... $this->db->quoteString($uname), $this->db->quoteString($name), $genre,
$this->db->quoteString($email), ....
Fichier /register.php
Partie case 'newuser':
Sous la ligne
<input type='hidden' name='uname' value='".$myts->makeTboxData4PreviewInForm($uname)."' />
Ajoutez
<input type='hidden' name='genre' value='".(float)$genre."' />
Partie case 'finish':
Sous la ligne
$newuser->setVar('uname', $uname);
Ajoutez
$newuser->setVar('genre', $genre);7) Définitions de langage
Fichier style="color: rgb(0, 0, 255);">/language/...../user.php
Sous la ligne
define('_US_NAME','Name');
Ajoutez
define('_US_GENRE','Genre');
define('_US_GENRE_MAN','Monsieur');
define('_US_GENRE_WOMAN','Madame');
define('_US_GENRE_MISS','Mademoiselle');
Testez maintenant l'enregistrement d'un membre.8) Affichage du profil
Fichier style="color: rgb(0, 0, 255);">/userinfo.php
Sous les lignes
$xoopsTpl->assign('lang_realname', _US_REALNAME);
$xoopsTpl->assign('user_realname', $thisUser->getVar('name'));
Ajoutez
$xoopsTpl->assign('lang_genre', _US_GENRE);
$usergenre =& $thisUser->genre();
$xoopsTpl->assign('user_genre', $usergenre);9) Template d'affichage du profil
Fichier style="color: rgb(0, 0, 255);">/modules/system/templates/system_userinfo.html
En rajoutant
<{$lang_genre}>
<{$user_genre}>
Mettre à  jour le module systême
Attention si vous utilisez les templates.
Il faut modifier le template que vous avez créé.
Cliquez sur Liste de l'item Systême, puis éditez system_userinfo.html en ajoutant la modification ci-dessus.
Testez maintenant 'Voir son compte'10) Editer son compte
Fichier style="color: rgb(0, 0, 255);">/edituser.php
Dans la partie
if ($op == 'saveuser') {
Sous la ligne
$edituser->setVar('name', $name);
Ajoutez
$edituser->setVar('genre', $genre);
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
$genre_select = new XoopsFormSelectGenre(_US_GENRE, 'genre', $xoopsUser->getVar('genre'));
$form->addElement($genre_select);
Testez maintenant 'Editer son compte'11) Administration membre
Fichier style="color: rgb(0, 0, 255);">/modules/system/admin/users/userform.php
Au début, sous la ligne
$name_text = new XoopsFormText(_AM_NAME, "name", 30, 60, $name_value);
Ajoutez
$genre_select = new XoopsFormSelectGenre(_AM_GENRE, "genre", $genre_value);
Vers la fin, sous la ligne
$form->addElement($name_text);
Ajoutez
$form->addElement($genre_select);12) Administration membre: fichier principal
Fichier style="color: rgb(0, 0, 255);">/modules/system/admin/users/main.php
Modifiez l'appel à  la fonction updateUser
updateUser($uid, $uname, $name, $genre, $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);13) Administration : édition/mise à  jour du membre
Fichier style="color: rgb(0, 0, 255);">/modules/system/admin/users/users.php
Au début de la fonction function displayUsers()
Ajoutez dans la liste
$genre_value = "0";
Dans la fonction : function modifyUser($user)
Sous la ligne
$name_value = $user->getVar("name", "E");
Ajoutez
$genre_value = $user->getVar("genre");
Dans la fonction : function updateUser
function updateUser($uid, $uname, $name, $genre, $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("genre", $genre);14) Définition de langage pour l'administration
Fichier style="color: rgb(0, 0, 255);">/modules/system/language/.../admin/users.php
define("_AM_GENRE","Genre");
Testez maintenant ''Editer/effacer des membres' dans la partie administration de Xoops.
The End !
jbaudin