PDA

Voir la version complète : Probleme pour modifier l'inscription


DRACULA1
31/03/2007, 17h57
Bonjour,
Je shouaiterai ajouter une variable a la table user lors de l'inscription d'un nouvelle utilisateur soit par l'acp, ou par l'inscription membre directement.
J'ai regarder le fichier register.php, mais malheureusement je n'est pas trouver la requete sql INSERT, pour inserer le nouvelle utilisateur.

Merci d'avance :)

Allan
31/03/2007, 18h11
Je suis pas coder, peux pas t'aider, mais je suis sur que quelques personnes ici peuvent t'aider :)

MtoR
31/03/2007, 19h48
C'est quel genre d'infos que tu veux ajouter à ta table user, est-ce que tu pourrais nous donner plus d'infos ?

DRACULA1
31/03/2007, 19h51
sans pb ses une reference qui doit automatiquement etre ajouter a l'inscription quelle soit faite par un user ou par un admin sous l'acp. voila l'expression php :

// #### Céation De La Réfèrence Client.
$lettres = "0123456789";
$taille = 5;
$ref = "VBR";
for ($i=0;$i<$taille;$i++)
{
$ref.=substr($lettres,(rand()%(strlen($lettres))), 1);
}

Donc dans la requete d'inset je dois ajouter $ref.

MtoR
31/03/2007, 20h15
Bon alors la ca peut devenir plus compliqué et vraiment très spécifique.

Il faut que tu vois comment sont traités les inscriptions des utilisateurs.

Dans le fichier register.php, je pense qu'il faudrait que tu ajoutes un plugin qui vient lancer du code au niveau du hook register_addmember_process afin qu'il inclu tes paramètres lors de l'ajout d'un user.

Dans le code au niveau de

($hook = vBulletinHook::fetch_hook('register_addmember_proc ess')) ? eval($hook) : false;
$userdata->pre_save();


Tu vois si tu ajoutes le plugin il lancera ton code à ce niveau là, après il faudrait je pense que tu essayes de voir comment il gère les infos utilisateurs pour l'insertion dans la base.

Je pense que le principe d'enregistrement des données d'un membre passe par une présauvegarde :

$userdata->pre_save();

Puis la sauvegarde si par d'erreurs :


$vbulletin->userinfo['userid']
= $userid
= $userdata->save();


Donc je pense qu'il doit falloir que tu te penches sur comment ajouter de nouveaux paramètres à cette varible userdata et s'assurer qu'elles sont bien ajoutées ensuite dans la base.

Cette variable est une instanciation de la classe datamanager_init avec comme premier paramètre User.

Je suis désolé j'ai pas trop de temps pour me pencher plus loin sur ce problème car j'ai un hack à bosser ;)

Enfin après dans la partie admin je pense que çà doit être similaire et tout doit pouvoir se faire via un hook.

DRACULA1
31/03/2007, 21h19
oula bien compliker ton truc normalement il doit lancer une requete sql un insert donc suffit juste que j'incopore ma variable dans cette requete le soucie et que je ne trouve pas cette requete :)

MtoR
31/03/2007, 22h39
Malheureusement la requète que tu cherches n'existe plus directement, c'est une requète générique de la classe vbDatamanager qui à partir d'un tableau exécute la requète insert.

Cette méthode de classe s'appelle fetch_insert_sql et se trouve dans le fichier includes/class_dm.php.

Ce qui rend donc ta modification très très compliquée.

Une solution simple si tu n'as pas de grosses connaissances en codage pour vbulletin, est de rajouter une toute bête requète SQL UPDATE au niveau du fichier register.php en te basant sur l'userid qui a été généré par la requète insert.

Dis moi si cette solution t'irait

MtoR
01/04/2007, 10h09
Bon j'ai trouvé une solution plus simple, tu vas dans:

Admincp > Champs utilisateurs > Gestionnaire de champs du profil utilisateur

Puis tu ajoutes ton nouveau champ référence client en spécifiant bien :
Champ requis : non
Champ modifiable par l'utilisateur : non
Champ caché : oui
Recherche sur le champ possible dans la liste des membres : non
Afficher sur la liste des membres : non

Ensuite tu cliques sur enregistrer. Et là sur la page qui apparaît note bien ce qui est dans la colonne nom pour ce nouvel élément ajouté.

Moi j'avais field5 donc tu verras field5 apparaître dans mon code à ajouter.

Après tu vas dans le gestionnaire de plugin et tu cliques sur ajouter un nouveau plugin.

Tu attaches ton nouveau plugin au produit vbulletin et tu choisit comme hook:
register_addmember_process

code du hook:

$lettres = "0123456789";
$taille = 5;
$ref = "VBR";
for ($i=0;$i<$taille;$i++)
{
$ref.=substr($lettres,(rand()%(strlen($lettres))), 1);
}
$userdata->userfield['field5'] =& $ref;


Puis pour la partie admin, le champ référence client apparaît automatique dans la fenêtre d'ajout d'un utilisateur puisque c'est un nouveau champ.

Par contre, pour que la référence soit créée automatiquement comme pour le cas où c'est une inscription faites par l'utilisateur, vas dans le gestionnaire de plugin et cliques sur ajouter un nouveau plugin.

Tu l'attaches au produit vbulletin et tu choisit comme hook:
useradmin_update_save

Et comme code du hook :

if(!$vbulletin->GPC['userid']) {
// #### Céation De La Réfèrence Client.
$lettres = "0123456789";
$taille = 5;
$ref = "VBR";
for ($i=0;$i<$taille;$i++)
{
$ref.=substr($lettres,(rand()%(strlen($lettres))), 1);
}

$userdata->userfield['field5'] =& $ref;
}



Comme çà même si tu remplis malencontrseuement le champ référence client lors de l'ajout, la valeur ne sera pas prise en compte mais sera généré par le code ci-dessus.

En plus ma méthode à un avantage: elle te permet de modifier si tu le souhaites via l'admincp la référence client.

N'oublies pas de changer dans le code des hook field5 par la valeur qui était présente dans la colonne comme je t'ai stipulé tout à l'heure.

Voilà !

DRACULA1
01/04/2007, 19h30
merci bien je vais essayer sa. :)

MtoR
01/04/2007, 20h37
Mais de rien ce fut un plaisir ;)

Au moins çà m'a aidé à me remettre dans le code vbulletin vu que je débarque de 3 ans d'absence: llol

DRACULA1
02/04/2007, 20h08
sa marche pas sa genere rien du tout :(

0a$!s
02/04/2007, 20h20
Bon j'ai bien plus simple llol tu fais ce qui suit :

AdminCP
Champ du profil utilisateur
Ajouter un champ au profil utilisateur
Champ de saisie (une seule ligne)
Tu complètes tout le blabla et à Champs requis, dans le menu déroulant, tu choisis l'option qui te convient ;) .Et voilà, simple comme bonjour meoui.

Dga
02/04/2007, 20h52
Est-il possible que sa s'affiche comme pour "Location" quand un utilisateur post un message, enfin que sa soit pas visible uniquement dans le profil.

0a$!s
02/04/2007, 21h02
http://www.vbulletin-ressources.com/forum/showthread.php?t=10

MtoR
02/04/2007, 21h50
Oasis, tu as pas du tout compris la demande de Dracula ! Lui ce qu'il veut c'est remplir automatiquement son champ avec un code généré par sa petite boucle, d'où le plus complexe ...

Dracula, tu es sur d'avoir bien suivit tout ce que j'ai marqué car moi j'ai appliqué ces modifs et ca marchait au poil.

Peut-être n'a tu pas bien tout compris, si c'est le cas dis le moi et j'expliquerais mieux

0a$!s
02/04/2007, 22h10
Oui tu as raison :p .

Prépares la corde je vais me pendre llol !

DRACULA1
02/04/2007, 22h31
mtor ba j'ai ajouter un champ de saisie 1 ligne mis les option comme tu a dit. Ensuite j'ai creer 2 module sur les different hook que tu ma dit avec dedan le code que je tes donner. en modifier le field par celui qui correspond. si tu veut je fait des screen tu verra je pense avoir fait aucune erreur lol

MtoR
03/04/2007, 06h07
Oui je veux bien que tu me fasses des screen car la je viens de relire mon post et tout me semble ok

DRACULA1
03/04/2007, 14h54
tient voila les screen :)

K.I.T.T
03/04/2007, 15h10
t'as l'air balaise en php mtor:yahoo:

MtoR
03/04/2007, 15h28
C'est étonnant tout m'a l'air correct. Tu es sur que c'est bien le field16 chez toi après ajout ?

Dis moi sinon je retenterais de faire la manip de 0 chez moi.

Quand tu m'as dit que rien n'était généré, sur quoi tu te bases pour conclure cela ? Tu as regardé dans phpmyadmin par exemple si dans la table [TABLE_PREFIX]userfield, ton nouveau champ référence client est présent pour chacune des entrées ?

Pour K.I.T.T: çà peut aller je me débrouille, surtout pour vb

DRACULA1
03/04/2007, 18h32
bon alors deja 1/je te remercie pour ton aide lol 2/je m'excuse pour la perte de temp car enfaite sa marche parfaitement l'erreur vener de moi lol j'ai pas matter la bonne table sql j'ai regarder user mais pas userfield bref erreur stupide . Merci beaucoup pour ton aide :)

MtoR
03/04/2007, 19h54
Ahhhhh j'ai eu peur sur le coup ;)

Cool content d'avoir pu t'aider !