Fork me on GitHub

Rapport de message :*
 

Re: rajout d'un champ dans formulaire : menu déroulant

Titre du sujet : Re: rajout d'un champ dans formulaire : menu déroulant
par blueteen sur 14/10/2005 17:50:03

salut,
à partir de mes fichiers et de test, j'ai préparé une petite doc.
elle est brute, mais en suivant ligne par ligne, ça devrait aller.
je tâcherai de la remettre en forme avec des codes couleurs pour que ce soit plus clair. (mais pas avant lundi)
je joins également les fichiers modifiés pour xoops 2.0.13.1.

j'ai mis un fichier pdf (plus clair, car quelques données sont en gras, et des traits séparent les parties) reprenant l'explication ainsi que les fichiers modifiés ici :
http://www.valentinois.net/forums/frxoops/topic8634-forum12/
bonne lecture ;)
un lien de test est en bas de page, si tu veux tester l'inscription, et ensuite les modifs dans ton profil.
l'interface d'admin est également modifiée.
faites des sauvegardes avant les tests.
@++

Citation :


Insertion d'un menu déroulant (genre) dans le formulaire d'inscription, dans le profil, et dans l'administration des utilisateurs.

Dans la base de données, insérer un champs ‘genre’ après le champs ‘uname’.
Vous pouvez utiliser la syntaxe suivante avec phpmyadmin par exemple. (en adaptant le nom de la table).

ALTER TABLE `xoops20131_users` ADD `genre` VARCHAR( 12 ) NOT NULL AFTER `uname` ;
J’ai limité le varchar à 12, car la valeur la plus longue ne dépasse pas ce nombre. A modifier selon les valeurs prévues dans le menu déroulant (et qui seront ajoutées dans la base de données).


Fichier userinfo.php

Vers la ligne 96, ajouter à l’emplacement où l’on veut voir apparaître le menu déroulant le code suivant :
(dans mon cas, sous le pseudo choisi)

$xoopsTpl->assign('lang_genre', _US_GENRE);
$usergenre =& $thisUser->genre();
$xoopsTpl->assign('user_genre', $usergenre);


Fichier register.php

Vers la ligne 60, sous :
$uname = xoops_trim($uname);

Ajouter :
$genre = xoops_trim($genre);

---

Vers la ligne 120, ajouter :
$genre = isset($_POST['genre']) ? $myts->stripSlashesGPC($_POST['genre']) : '';

---

Vers la ligne 144, sous :
echo _US_USERNAME.": ".$myts->htmlSpecialChars($uname)."<br />";

Ajouter :
echo _US_GENRE.": ".$genre."<br />";

---

Vers la ligne 154, sous :
<input type='hidden' name='uname' value='".$myts->htmlSpecialChars($uname)."' />

Ajouter :
<input type='hidden' name='genre' value='".$myts->htmlSpecialChars($genre)."' />

---

Vers la ligne 182, sous :
$newuser->setVar('uname', $uname, true);

Ajouter :
$newuser->setVar('genre', $genre);

---

Vers la ligne 235, sous :
$xoopsMailer->assign('USERNAME', $uname);

Ajouter :
$xoopsMailer->assign('GENRE', $genre);


Fichier edituser.php

Vers la ligne 101, sous :
$edituser->setVar('name', $_POST['name']);

Ajouter :
$edituser->setVar('genre', $_POST['genre']);

---

Vers la ligne 153, sous :
$form->addElement($uname_label);

Ajouter :
$genre_select = new XoopsFormSelectGenre(_US_GENRE, 'genre', $xoopsUser->getVar('genre'));
$form->addElement($genre_select);


Fichier include/functions.php

Vers la ligne 542, ajouter :

function xoops_getgenre($genre_id =0)
{

switch ($genre_id) {
case 'Monsieur':
$genre_lib = _US_GENRE_MAN;
break;
case 'Madame':
$genre_lib = _US_GENRE_WOMAN;
break;
case 'Mademoiselle':
$genre_lib = _US_GENRE_MISS;
break;
default:
$genre_lib = _US_GENRE_MAN;
break;
}

return $genre_lib;
}


Fichier include/registerform.php

Vers la ligne 72, sous
$reg_form->addElement(new XoopsFormText(_US_NICKNAME, "uname", $uname_size, $uname_size, $myts->htmlSpecialChars($uname)), true);

Ajouter :
$reg_form->addElement(new XoopsFormSelectGenre(_US_GENRE, "genre", $genre));


Fichier kernel/user.php

Vers la ligne 74, sous :
$this->initVar('uname', XOBJ_DTYPE_TXTBOX, null, true, 25);

Ajouter :
$this->initVar('genre', XOBJ_DTYPE_OTHER, null, false);

---

Vers la ligne 270, ajouter :

function genre()
{
$this->_genre = xoops_getgenre($this->getVar('genre'));
return $this->_genre;
}

---

Vers la ligne 531 :

Remplacer :
if ($user->isNew()) {
$uid = $this->db->genId($this->db->prefix('users').'_uid_seq');
$sql = sprintf("INSERT INTO %s (uid, uname, name, email, url, user_avatar, user_regdate, user_icq, user_from, user_sig, user_viewemail, actkey, user_aim, user_yim, user_msnm, pass, posts, attachsig, rank, level, theme, timezone_offset, last_login, umode, uorder, notify_method, notify_mode, user_occ, bio, user_intrest, user_mailok) VALUES (%u, %s, %s, %s, %s, %s, %u, %s, %s, %s, %u, %s, %s, %s, %s, %s, %u, %u, %u, %u, %s, %.2f, %u, %s, %u, %u, %u, %s, %s, %s, %u)", $this->db->prefix('users'), $uid, $this->db->quoteString($uname), $this->db->quoteString($name), $this->db->quoteString($email), $this->db->quoteString($url), $this->db->quoteString($user_avatar), time(), $this->db->quoteString($user_icq), $this->db->quoteString($user_from), $this->db->quoteString($user_sig), $user_viewemail, $this->db->quoteString($actkey), $this->db->quoteString($user_aim), $this->db->quoteString($user_yim), $this->db->quoteString($user_msnm), $this->db->quoteString($pass), $posts, $attachsig, $rank, $level, $this->db->quoteString($theme), $timezone_offset, 0, $this->db->quoteString($umode), $uorder, $notify_method, $notify_mode, $this->db->quoteString($user_occ), $this->db->quoteString($bio), $this->db->quoteString($user_intrest), $user_mailok);
} else {
$sql = sprintf("UPDATE %s SET uname = %s, name = %s, email = %s, url = %s, user_avatar = %s, user_icq = %s, user_from = %s, user_sig = %s, user_viewemail = %u, user_aim = %s, user_yim = %s, user_msnm = %s, posts = %d, pass = %s, attachsig = %u, rank = %u, level= %u, theme = %s, timezone_offset = %.2f, umode = %s, last_login = %u, uorder = %u, notify_method = %u, notify_mode = %u, user_occ = %s, bio = %s, user_intrest = %s, user_mailok = %u WHERE uid = %u", $this->db->prefix('users'), $this->db->quoteString($uname), $this->db->quoteString($name), $this->db->quoteString($email), $this->db->quoteString($url), $this->db->quoteString($user_avatar), $this->db->quoteString($user_icq), $this->db->quoteString($user_from), $this->db->quoteString($user_sig), $user_viewemail, $this->db->quoteString($user_aim), $this->db->quoteString($user_yim), $this->db->quoteString($user_msnm), $posts, $this->db->quoteString($pass), $attachsig, $rank, $level, $this->db->quoteString($theme), $timezone_offset, $this->db->quoteString($umode), $last_login, $uorder, $notify_method, $notify_mode, $this->db->quoteString($user_occ), $this->db->quoteString($bio), $this->db->quoteString($user_intrest), $user_mailok, $uid);
}
Par :
if ($user->isNew()) {
$uid = $this->db->genId($this->db->prefix('users').'_uid_seq');
$sql = sprintf("INSERT INTO %s (uid, uname, name, genre, email, url, user_avatar, user_regdate, user_icq, user_from, user_sig, user_viewemail, actkey, user_aim, user_yim, user_msnm, pass, posts, attachsig, rank, level, theme, timezone_offset, last_login, umode, uorder, notify_method, notify_mode, user_occ, bio, user_intrest, user_mailok) VALUES (%u, %s, %s, %s, %s, %s, %s, %u, %s, %s, %s, %u, %s, %s, %s, %s, %s, %u, %u, %u, %u, %s, %.2f, %u, %s, %u, %u, %u, %s, %s, %s, %u)", $this->db->prefix('users'), $uid, $this->db->quoteString($uname), $this->db->quoteString($name), $this->db->quoteString($genre), $this->db->quoteString($email), $this->db->quoteString($url), $this->db->quoteString($user_avatar), time(), $this->db->quoteString($user_icq), $this->db->quoteString($user_from), $this->db->quoteString($user_sig), $user_viewemail, $this->db->quoteString($actkey), $this->db->quoteString($user_aim), $this->db->quoteString($user_yim), $this->db->quoteString($user_msnm), $this->db->quoteString($pass), $posts, $attachsig, $rank, $level, $this->db->quoteString($theme), $timezone_offset, 0, $this->db->quoteString($umode), $uorder, $notify_method, $notify_mode, $this->db->quoteString($user_occ), $this->db->quoteString($bio), $this->db->quoteString($user_intrest), $user_mailok);
} else {
$sql = sprintf("UPDATE %s SET uname = %s, name = %s, genre = %s, email = %s, url = %s, user_avatar = %s, user_icq = %s, user_from = %s, user_sig = %s, user_viewemail = %u, user_aim = %s, user_yim = %s, user_msnm = %s, posts = %d, pass = %s, attachsig = %u, rank = %u, level= %u, theme = %s, timezone_offset = %.2f, umode = %s, last_login = %u, uorder = %u, notify_method = %u, notify_mode = %u, user_occ = %s, bio = %s, user_intrest = %s, user_mailok = %u WHERE uid = %u", $this->db->prefix('users'), $this->db->quoteString($uname), $this->db->quoteString($name), $this->db->quoteString($genre), $this->db->quoteString($email), $this->db->quoteString($url), $this->db->quoteString($user_avatar), $this->db->quoteString($user_icq), $this->db->quoteString($user_from), $this->db->quoteString($user_sig), $user_viewemail, $this->db->quoteString($user_aim), $this->db->quoteString($user_yim), $this->db->quoteString($user_msnm), $posts, $this->db->quoteString($pass), $attachsig, $rank, $level, $this->db->quoteString($theme), $timezone_offset, $this->db->quoteString($umode), $last_login, $uorder, $notify_method, $notify_mode, $this->db->quoteString($user_occ), $this->db->quoteString($bio), $this->db->quoteString($user_intrest), $user_mailok, $uid);
}

Ordre d’insertion de la variable genre important.


Fichier class/xoopslists.php

Vers la ligne 37, ajouter, juste après l’accolade :

function &getGenreList()
{
include_once XOOPS_ROOT_PATH.'/language/'.$GLOBALS['xoopsConfig']['language'].'/user.php';
$genre_list = array ("Monsieur" => _US_GENRE_MAN, "Madame" => _US_GENRE_WOMAN, "Mademoiselle" => _US_GENRE_MISS);
return $genre_list;
}


Fichier class/xoopsformloader.php

Vers la ligne 34, sous :
include_once XOOPS_ROOT_PATH."/class/xoopsform/formhiddentoken.php";

Ajouter :
include_once XOOPS_ROOT_PATH."/class/xoopsform/formselectgenre.php";

Dans le dossier class/xoopsform/

Créer un fichier que l’on nommera : formselectgenre.php

Et qui contiendra le code suivant :

<?

include_once XOOPS_ROOT_PATH."/class/xoopslists.php";
include_once XOOPS_ROOT_PATH."/class/xoopsform/formselect.php";

class XoopsFormSelectGenre extends XoopsFormSelect
{
function XoopsFormSelectGenre($caption, $name, $value=null, $size=1)
{
$this->XoopsFormSelect($caption, $name, $value, $size);
$this->addOptionArray(XoopsLists::getGenreList());
}
}
?>


Fichier : /languagefrench/user.php

Vers la ligne 44, à la suite des autres valeurs, ajouter :
define('_US_GENRE','Genre');
define('_US_GENRE_MAN','Monsieur');
define('_US_GENRE_WOMAN','Madame');
define('_US_GENRE_MISS','Mademoiselle');


Fichier language/french/mail_template/adminactivate.tpl

Placez où vous le souhaitez, la variable : {GENRE}
Pour faire apparaître dans le mail d’activation que vous recevrez, le genre du nouveau membre.
Vous pouvez placer cette variable dans les autres fichiers .tpl contenus dans ce dossier.


Fichier modules/system/admin/users/main.php

Vers la ligne 58, remplacer :
updateUser($uid, $username, $name, $url, $email, $user_icq, $user_aim, $user_yim, $user_msnm, $user_from, $user_occ, $user_intrest, $user_viewemail, $user_avatar, $user_sig, $attachsig, $theme, $password, $pass2, $rank, $bio, $uorder, $umode, $notify_method, $notify_mode, $timezone_offset, $user_mailok, $groups);

Par :
updateUser($uid, $username, $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, $password, $pass2, $rank, $bio, $uorder, $umode, $notify_method, $notify_mode, $timezone_offset, $user_mailok, $groups);

la variable $genre a été ajoutée. L’ordre est important.

Vers la ligne 161, sous :
$newuser->setVar("uname", $username);

Ajouter :
$newuser->setVar("genre", $genre);



Fichier modules/system/admin/users/userform.php

Vers la ligne 34, ajouter :
$genre_select = new XoopsFormSelectGenre(_AM_GENRE, "genre", $genre_value);
---
Vers la ligne 134, (ou là où vous souhaitez voir apparaître ce menu dans l’administration du site, ajouter :
$form->addElement($genre_select);


Fichier modules/system/admin/users/users.php

Vers la ligne 75, sous :
$uname_value = "";

Ajouter :
$genre_value = "";

---

Vers la ligne 122, sous :
$name_value = $user->getVar("name", "E");

Ajouter :
$genre_value = $user->getVar("genre");
Bien respecter cette position, sinon il y aura des problèmes avec l’insertion dans la base de données.
---

Vers la ligne 175, remplacer :
function updateUser($uid, $uname, $name, $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, $groups = array())

Par :
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, $groups = array())

Variable $genre ajoutée. L’ordre est important.

---

Vers la ligne 186, sous :
$edituser->setVar("name", $name);

Ajouter :
$genre ="";
$edituser->setVar("genre", $genre);



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

Ligne 6, ajouter :
define("_AM_GENRE","Genre");


Fichier modules/system/templates/system_userinfo.html

Mettre à jour le template avec ce code : (où vous voulez)

<tr>
<td class="head"><{$lang_genre}></td>
<td align="center" class="odd"><{$user_genre}></td>
</tr>


Terminé en principe :)


Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

42 Personne(s) en ligne (38 Personne(s) connectée(s) sur Forum) | Utilisateur(s): 0 | Invité(s): 42 | Plus ...