Fork me on GitHub




(1) 2 3 »


rajout d'un champ dans formulaire : menu déroulant
Supporter Xoops
Inscrit: 16/02/2003 21:55
De Paris
Messages: 346
je veux rajouter un menu déroulant donnant la possibilité de choisir entre 4 ou 5 catégories (années dans mon école en l'occurence), pouvez vous me dire quel code rajouter?
J'ai bien trouvé le tuto pour rajouter des champs....

Posté le : 12/10/2005 15:59
Partager Twitter Partagez cette article sur GG+
Re: rajout d'un champ dans formulaire : menu déroulant
Supporter Xoops
Inscrit: 16/02/2003 21:55
De Paris
Messages: 346
Personne n'a déjà eu à dealer avec ça?
Je sais qu'il faut rajouter des champs dans la base de données? est si compliqué?

Posté le : 13/10/2005 15:35
Partager Twitter Partagez cette article sur GG+
Re: rajout d'un champ dans formulaire : menu déroulant
Xoops accro
Inscrit: 15/07/2004 11:16
Messages: 4763
zut, il avait une super faq sur ce sujet, mais ça a disparu dans la mise à jour de xoops franc(ophon)e :-/
j'avais suivi leur méthode, et j'utilise ce système pour choisir des classes, et le sexe de la personne.
je ne la retrouve plus là.
par contre, je ne sais pas si je vais arriver à tout retranscrire, car ça touche 14 fichiers php !
je regarde ça d'ici demain, si j'ai mis des commentaires lors de la modif, et si je peux redonner ça clairement.
@++

Posté le : 13/10/2005 16:19
Partager Twitter Partagez cette article sur GG+
Re: rajout d'un champ dans formulaire : menu déroulant
Xoops accro
Inscrit: 15/07/2004 11:16
Messages: 4763
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 :)


Posté le : 14/10/2005 17:50

Edité par blueteen sur 05/01/2006 08:34:16
Edité par blueteen sur 10/04/2007 10:31:04
Partager Twitter Partagez cette article sur GG+
Re: rajout d'un champ dans formulaire : menu déroulant
Supporter Xoops
Inscrit: 16/02/2003 21:55
De Paris
Messages: 346
Merci beaucoup!!!!

Toutefois les pdf mis en ligne ne marchent pas.....

Je teste ceci dans le week end et je vous tiens au courant

Posté le : 14/10/2005 18:51
Partager Twitter Partagez cette article sur GG+
Re: rajout d'un champ dans formulaire : menu déroulant
Xoops accro
Inscrit: 15/07/2004 11:16
Messages: 4763
corrigé pour les liens :)
il y avait juste un / en trop dans les liens
je te laisse récupérer le pdf qui est plus simple à lire :)

Posté le : 14/10/2005 19:08
Partager Twitter Partagez cette article sur GG+
Re: rajout d'un champ dans formulaire : menu déroulant
Newbie
Inscrit: 11/10/2005 16:27
Messages: 10
Salut à tous.
Merci pour le coup de main.
J'ai un petit blem .
Je crois avoir bien mis en place tous les changements mais j'ai une erreur :

Fatal error: Call to a member function on a non-object in /home/httpd/vhosts/rencontreseniors.fr/httpdocs/include/functions.php on line 145

Si qq peut me guidez merci

Posté le : 17/10/2005 16:26
Partager Twitter Partagez cette article sur GG+
Re: rajout d'un champ dans formulaire : menu déroulant
Xoops accro
Inscrit: 15/07/2004 11:16
Messages: 4763
Salut !
peut-nous décrire précisément à quel moment tu rencontres cette erreur ? (manoeuvres effectuées pour arriver au message)
et également nous indiquer ce qui ce trouve 3-4 lignes avant et après la ligne 145, dans ton fichier include/functions.php

Parce que moi vers la 145 dans ce fichier, j'ai

Citation :

function xoops_refcheck($docheck=1)
{
return $GLOBALS['xoopsSecurity']->checkReferer($docheck);
}


donc a priori, pas directement lié avec les modifs données.

je reprécise bien, que les modifs indiquées ont été effectuées sur une version de xoops 2.0.13.1

@++ :)

Posté le : 17/10/2005 16:37
Partager Twitter Partagez cette article sur GG+
Re: rajout d'un champ dans formulaire : menu déroulant
Xoops accro
Inscrit: 15/07/2004 11:16
Messages: 4763
ok j'ai testé, et c'est au moment de la validation de la création du compte.

essaie de reprendre un fichier functions.php clean
et de refaire la manip' indiquée (juste une fonction à ajouter vers la ligne 542

Posté le : 17/10/2005 16:40
Partager Twitter Partagez cette article sur GG+
Re: rajout d'un champ dans formulaire : menu déroulant
Newbie
Inscrit: 11/10/2005 16:27
Messages: 10
Merci pour ta réponse rapide

Juste après la validation du pass à la connection.

au moment de l'affichage de "register.php"

J'ai la même chose que toi. effectivement je ne vois pas le rapport .

A m... je suis sur la 2.07
que je suis c...

je suis mal

Posté le : 17/10/2005 16:50
Partager Twitter Partagez cette article sur GG+

 Haut   Précédent   Suivant
(1) 2 3 »



Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

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

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