Submitted by dblv on
Bonjour,
Au risque de passer pour le rabat-joie de service, je cherche une solution pour personnaliser le formulaire d'inscription de Drupal mais SANS PASSER par le module Profile.
En effet, tout ce que je lis depuis hier me renvoie vers ce module, mais il ne me convient pas du tout !
Il permet d'ajouter des champs mais il me les collent dans un onglet et ça ne me plaît pas du tout !!
J'aimerais juste ajouter un champ Nom dans le formulaire d'inscription et le réorganiser (et le relooker) un peu parce qu'il est moche.
Voilà, si quelqu'un peu me proposer un truc qui tient la route, il aura toute mon estime jusqu'a la fin des temps (enfin, au moins jusqu'a la fin 2010, après on verra).
En tout cas, merci d'avance !
Regarde du côté du «Content
Permalien Soumis par haza le 23 Décembre, 2010 - 09:56
Regarde du côté du "Content Profile (http://drupal.org/project/content_profile)", de mémoire, y a une case a cocher pour merger le tab (que lui aussi rajoute par defaut) avec le panneau d'info principal.
J’ai pas trouvé :(
Permalien Soumis par dblv le 23 Décembre, 2010 - 10:57
J'ai pas trouvé :(
Bonjour, Comment souhaite tu
Permalien Soumis par kumkum le 23 Décembre, 2010 - 10:00
Bonjour,
Comment souhaite tu relooker ton champs ?
Pour relooker mes formulaires je passe par du css et je fais à peu près ce que je veux.
Dis nous ce que tu souhaite faire et on essaiera de t'aider sur la mise en forme.
Bonjour, Si tu sais codé
Permalien Soumis par Aya le 23 Décembre, 2010 - 10:05
Bonjour,
Si tu sais codé c'est tout simple...
Code un module qui fait un form_alter de ton formulaire d'enregistrement.
Aucunement besoin de modifier la base en plus de ce cas la car les valeurs des champs supplémentaires sont stockés dans le champ data de la table user.
les champ sont automatiquement repris quand on récupére un user ou la variable global $user. (Accessible en faisant $user->nom par exemple si l'on a enregistrer un nom).
Attention toutefois à ne pas mettre les mêmes noms de champs.
Cordialement, Aya
Ps: si tu veux un exemple dis le moi je dois en avoir un pas loin.
Je veux bien un exemple. Je
Permalien Soumis par dblv le 23 Décembre, 2010 - 10:56
Je veux bien un exemple.
Je suis pas sûr d'avoir tout compris à ton explication et un exemple sera plus parlant !
Merci.
Créer un module
Permalien Soumis par Aya le 23 Décembre, 2010 - 14:03
Créer un module alter_registration par exemple dans le .module la fonction a créer est:
function alter_registration_form_alter(&$form, &$form_state, $form_id) {
global $user;
if($form_id=="user_register" || $form_id == "user_profile_form"){
$form['info_perso']= array(
'#type' => 'fieldset',
'#title' => t('Informations Personnelles'),
'#weight' => 5,
'#collapsible' => TRUE,
'#collapsed' => FALSE,
);
$form['info_perso']['nom']= array(
'#type' => 'textfield',
'#title' => 'Nom',
'#default_value'=>$user->nom,
'#maxlength' => 55,
'#required'=> TRUE,
);
$form['info_perso']['prenom']= array(
'#type' => 'textfield',
'#title' => 'Prenom',
'#default_value'=>$user->prenom,
'#maxlength' => 55,
'#required'=> TRUE,
);
$form['info_perso']['organisme']= array(
'#type' => 'textfield',
'#title' => 'Organisme',
'#default_value'=>$user->organisme,
);
if ($form_id=="user_register"){
$form['info_perso']['condition']=array(
'#type' => 'checkbox',
'#title'=> 'J\'accepte les conditions générales d\'utilisation',
'#required' => TRUE,
);
}
}
}
Pas besoin de submit, un validate a la rigueur et le tour est jouer.
Cordialement, Aya
Ps: c'est peut être pas super beau jai fait sa vite fait.Bien sur tu peux jouer avec les weight des autres objets du formulaire pour placé tes objet ou tu le souhaites, à toi de voir.
Merci, mais j’ai pas compris
Permalien Soumis par dblv le 23 Décembre, 2010 - 14:13
Merci, mais j'ai pas compris dans quel fichier il faut coller ça ??
J'ai essayé dans le template.php de mon thème mais ça n'a pas l'air d'être ça.
Désolé de te déranger encore, je suis pas encore très à l'aise avec Drupal.
non en gros il faut créer un
Permalien Soumis par Aya le 23 Décembre, 2010 - 14:15
non en gros il faut créer un module.
l'as-tu déjà fait ?
ahh non jamais !!! Je vais
Permalien Soumis par dblv le 23 Décembre, 2010 - 14:21
ahh non jamais !!!
Je vais regarder de ce côté...
Merci
en gros dans
Permalien Soumis par Aya le 23 Décembre, 2010 - 14:53
en gros dans sites/all/modules il faut créer un dossier (alter_registration par exemple).Créer 2 fichiers : alter_registration.info et alter_registration.info (le fichier .install étant facultatif), pour le .info inspire toi de ceux d'autre module (ce sont les information du module). et pour le .module tu peut copier ce code:
<?php
//pour restreindre l'accès : assez inutile dans ce cas la mais bon ...
function alter_registration_perm() {
return array('alter registration');
}
function alter_registration_form_alter(&$form, &$form_state, $form_id) {
global $user;
if($form_id=="user_register" || $form_id == "user_profile_form"){
$form['info_perso']= array(
'#type' => 'fieldset',
'#title' => t('Informations Personnelles'),
'#weight' => 5,
'#collapsible' => TRUE,
'#collapsed' => FALSE,
);
$form['info_perso']['nom']= array(
'#type' => 'textfield',
'#title' => 'Nom',
'#default_value'=>$user->nom,
'#maxlength' => 55,
'#required'=> TRUE,
);
$form['info_perso']['prenom']= array(
'#type' => 'textfield',
'#title' => 'Prenom',
'#default_value'=>$user->prenom,
'#maxlength' => 55,
'#required'=> TRUE,
);
$form['info_perso']['organisme']= array(
'#type' => 'textfield',
'#title' => 'Organisme',
'#default_value'=>$user->organisme,
);
if ($form_id=="user_register"){
$form['info_perso']['condition']=array(
'#type' => 'checkbox',
'#title'=> 'J\'accepte les conditions générales d\'utilisation',
'#required' => TRUE,
);
}
}
}
Ensuite il faut allez dans la page d'admin des modules : admin/build/modules et activé ton module.
cela devrait fonctionner.
Exemple d'un .info (pour alter_registration par exemple):
; $Id: alter_registration.info,v 1.1 2010/10/18 13:42:06 Exp $
name = Alter Registration
description = Alter Registration
core = 6.x
project = "Module Perso"
package = "Module Perso"
Voila qui pourra peut être t'aider.
Cordialement, Aya
Merci mille fois, je vais
Permalien Soumis par dblv le 23 Décembre, 2010 - 15:11
Merci mille fois, je vais essayer ça dès que possible
Bonjour Aya, je souhaite
Permalien Soumis par sebphilip le 24 Décembre, 2010 - 00:50
Bonjour Aya,
je souhaite faire la meme chose mais 2 questions:
avec ton code les valeurs se stockes dans la table sous "data". Comment faire pour les stocker independament dans un champ pour chaque donnée?
pour la checkbox, bien que l'on ai '#required' => TRUE, meme si on ne la coche pas, le formulaire est validé. D ou vient le probleme.
Merci de tes reponses.
Bonjour, la checkbox a pour
Permalien Soumis par Aya le 24 Décembre, 2010 - 11:26
Bonjour,
la checkbox a pour valeur 1 ou 0 donc a forcement une valeur. Il faut faire le test dans la fonction form_validate pour ce petit bug.
Pour stoker tes valeurs dans un champ annexe de la base de donnée (de la table user ou autre), il faut créer le hook submit (subscription_form_submit($form, &$form_state){} ) et tu récupères tes valeurs et tu les insères dans tes tables avec des sert grace a db_query.
Attention à passer verifier si l'utilisateur ne fais pas une modification de son compte dans ce cas la faire un Update de ta table.
Voila j'attends de tes nouvelles pour plsu d'information.
Cordialement, Aya
Merci pour ta
Permalien Soumis par sebphilip le 24 Décembre, 2010 - 13:34
Merci pour ta réponse,
cependant n'ayant qu'un niveau moyen dans drupal j'aurai besoin de plus de précisions:
Pour la check box, ou se situe la fonction form_validate?
Pour stocker les valeurs, peux tu etre un peu plus explicite (voir meme avec un exemple) car les notions de hook sont encore un peu floue pour moi.
Merci de tes réponses.
Passe un bon noel :)
Etant en deplacement je n’ai
Permalien Soumis par Aya le 24 Décembre, 2010 - 13:55
Etant en deplacement je n'ai pas accès a mes fichiers et a un PC digne de ce nom pour developper. Donc j'essairais a mon retour dans le Week-end de te fournir plus de précisions et un exemple assez concret pour que tu puisse poursuivre dans cette voie.
Bonne fête de fin d'année.
Cordialement, Aya
Donc voila je vais essayer de
Permalien Soumis par Aya le 27 Décembre, 2010 - 09:37
Donc voila je vais essayer de repondre le plus précisement a tes questions:
Pour faire un form_validate il faut que tu ais créer un form_alter comme je l'ai décrit ci-dessus.
Si tu as recopier le code ci-dessus la fonction validate suivante devrait fonctionner.
/
* Validation du formulaire
*/
function alter_registration_form_validate($form, &$form_state) {
if (!$form_state['values']['condition']){
form_set_error('condition', 'Vous devez accepter les conditions d\'utilisation pour vous enregistrer');
}
}
Petite description le nom de la fonction est 'nom de la fonction permettant d'afficher le formulaire +_validate'.
$form_state['values']['nom_du_champ'] => permet de recupérer les valeurs des champs.
Pour enregistrer les données il faut faire un fonction _submit:
/
* Validation du formulaire
*/
function alter_registration_form_submit($form, &$form_state) {
$nom = $form_state['values']['nom']
$sql= 'Insert into {table} ("nom") VALUES ('.$nom.');';
db_query($sql);
}
Voila pour un petit exemple. Si tu as des question j'approfondirais la chose.
Cordialement, Aya
Bonjour AYA, merci pour ton
Permalien Soumis par sebphilip le 28 Décembre, 2010 - 02:03
Bonjour AYA,
merci pour ton code cependant, je l'ai tourné dans tous les sens pour le compiler avec le précèdent mais cela n'a jamais marché pour la vérification de la checkbox.
Cependant, dans ton code il y a un " ! " qui traine après la parenthèse du if.
Cela est il fait exprès?
Peux tu me dire ou inserer ce bout de code pour que cela fonctionne.
Je n'ai pas essayer le code pour inserer dans une table. Mais peux tu aussi me dire ou le placer.
Merci d'avance.
Un petit UP !
Permalien Soumis par sebphilip le 3 Janvier, 2011 - 13:22
Un petit UP !
Oups dsl j’ai plein de post
Permalien Soumis par Aya le 3 Janvier, 2011 - 13:26
Oups dsl j'ai plein de post en cours, j'avais lu ta réponse mais n'avais pas pris le temps d'y répondre.
Je travaille ça et te donne une solution dans peu de temps.
A tout de suite, Aya
Bon voila, j’ai refait le
Permalien Soumis par Aya le 3 Janvier, 2011 - 13:54
Bon voila, j'ai refait le tour vite fait du post (c'était un peu loin pour moi).
Donc pour en revenir a la question du "Ou je place quoi?" la reponse est simple tout ce passe dans le fichier .module du module créer c'est a dire si tu as suivi a la lettre les instructions précédentes => le fichier "alter_registration.module".
Dans ce module tu doit avoir plusieurs fonctions normalement (enfin au moins une). La fonction "alter_registration_form_alter".
Jusque la tout va bien. Cependant tu veux rajouter la verification de la case a cocher des conditions. Pour cela il faut rajouter une fonction dans ce fichier: fonction "alter_registration_form_validate" comme ceci:
function alter_registration_form_validate($form, &$form_state) {
if (!$form_state['values']['condition']){
form_set_error('condition', 'Vous devez accepter les conditions d\'utilisation pour vous enregistrer');
}
}
Pour ton information personnelle le ! sert a faire une négation, si on aurait a traduire ce code en texte écrirait: Si la valeur du champ condition n'est pas = a 1 alors faire...
en gros (en simplifiant):
if (!$form_state['values']['condition'])
=
if ($form_state['values']['condition']==0)
Après avoir fait sa il faut aller dans la fonction alter_registration_form_alter et rajouter une ligne qui est:
$form['#validate'][] ='alter_registration_form_validate';
elle permet de dire a ton formulaire d'utiliser la fonction que nous venons de créer comme une fonction de validation de ton formulaire.
Après avoir rajouter ce code n'oublie pas de supprimer le cache de ton site et réessaies.
Pour l'enregistrement des valeurs dans une autre table ou le traitement d'autres données lorsque le formulaire est bien rempli il faut rajouter une fonction submit.
function alter_registration_form_submit($form, &$form_state) {
$nom = $form_state['values']['nom']
$sql= 'Insert into {table} ("nom") VALUES ('.$nom.');';
db_query($sql);
}
et ne pas oublier de mettre dans ta fonction alter_registration_form_alter cette autre ligne pour dire au formulaire d'utiliser cette fonction une fois le formulaire envoyé.
$form['#submit'][] ='alter_registration_form_submit';
La premiere partie concernant la validation est correct car tester. il peut y avoir une erreur cacher dans la seconde partie concernant le traitement des donnée et la requete sql car non tester. je te laisse essayer comme cela. Tien moi au courant.
Cordialement, Aya
Bonjour aya et meilleurs vœux
Permalien Soumis par sebphilip le 4 Janvier, 2011 - 08:02
Bonjour aya et meilleurs vœux pour cette nouvelle année.
Merci pour ton code.
Le premier marche effectivement super bien et t'en remercie.
Par contre quand j' incorpore le second, le site n'apparait plus. J'ai essayé de "bidouiller" pour voir d'où venait le problème mais sans résultat.
Merci de ton aide.
Il manque un «;» dans mon
Permalien Soumis par Aya le 4 Janvier, 2011 - 09:38
Il manque un ";" dans mon code ce qui fait une erreur sur ton site.
il faut le rajouter a la fin de la ligne.
$nom = $form_state['values']['nom'];
ce qui donne
function alter_registration_form_submit($form, &$form_state) {
$nom = $form_state['values']['nom'];
$sql= 'Insert into {table} ("nom") VALUES ('.$nom.');';
db_query($sql);
}
Voila meilleur voeux a toi aussi. Bon courage.
Cordialement, Aya
Salut Aya, merci pour ton
Permalien Soumis par sebphilip le 4 Janvier, 2011 - 21:19
Salut Aya,
merci pour ton code. En fait il ne fonctionnait toujours pas meme avec la modif.
J'ai donc bidouillé et ça fonctionne avec le code suivant:
$form['#submit'][] ='alter_registration_form_submit';
// j'ai rajouté un $
et ensuite j'ai mis ce code la:
function alter_registration_form_submit($form, &$form_state) {
$nom = $form_state['values']['nom']; }
J'ai enlevé la requete sql et ça fonctionne super bien.
Merci de ton aide.
Re-bonjour, c’est encore
Permalien Soumis par sebphilip le 6 Janvier, 2011 - 13:59
Re-bonjour, c'est encore moi.
En fait, il y a un gros probleme dont je ne m'etais aperçu.
Je ne peux plus soumettre de nouveau node ou en modifier car à chaque validation, il me dit "veuillez accepter les conditions generales d'utilisation".
Du coup, j'ai desactivé le module, vider le cache de firefox et de drupal. mais toujours le meme message d'erreur. Meme avec le module desactivé le script se fait quand meme!!! bizarre.
Du coup j'ai du le virer completement.
Je te file mon script:
<?php
$form['info_perso']= array(
$form['info_perso']['nom']= array(
$form['info_perso']['adresse']= array(
function alter_registration_form_alter(&$form, &$form_state, $form_id) {
global $user;
if($form_id=="user_register" || $form_id == "user_profile_form"){
'#type' => 'fieldset',
'#title' => t('Informations Personnelles'),
'#weight' => 5,
'#collapsible' => TRUE,
'#collapsed' => FALSE,
);
'#type' => 'textfield',
'#title' => 'Nom',
'#default_value'=>$user->nom,
'#maxlength' => 55,
'#required'=> TRUE,
);
$form['info_perso']['prenom']= array(
'#type' => 'textfield',
'#title' => 'Prenom',
'#default_value'=>$user->prenom,
'#maxlength' => 55,
'#required'=> TRUE,
);
'#type' => 'textfield',
'#title' => 'Adresse',
'#default_value'=>$user->adresse,
'#required'=> TRUE,
);
$form['info_perso']['cp']= array(
'#type' => 'textfield',
'#title' => 'Code Postal',
'#maxlength' => 5,
'#default_value'=>$user->cp,
'#required'=> TRUE,
);
$form['info_perso']['ville']= array(
'#type' => 'textfield',
'#title' => 'Ville',
'#default_value'=>$user->ville,
'#required'=> TRUE,
);
if ($form_id=="user_register"){
$form['info_perso']['condition']=array(
'#type' => 'checkbox',
'#title'=> 'J\'accepte les conditions générales d\'utilisation',
'#required' => TRUE,
);
}
} $form['#validate'][] ='alter_registration_form_validate';
$form['#submit'][] ='alter_registration_form_submit';
}
function
alter_registration_form_validate($form, &$form_state) {if (!$form_state['values']['condition']){
form_set_error('condition', 'Vous devez accepter les conditions d\'utilisation pour vous enregistrer');
}
}
function
alter_registration_form_submit($form, &$form_state) {$nom = $form_state['values']['nom'];
}
?>
D'ou vient le probleme?
Merci du coup de main.
Ton code a un petit soucis,
Permalien Soumis par Aya le 6 Janvier, 2011 - 15:00
Ton code a un petit soucis, les lignes :
$form['#validate'][] ='alter_registration_form_validate';
$form['#submit'][] ='alter_registration_form_submit';
Ces lignes la doivent etre un peu plus haut pour ne concerner que les formulaire d'enregistrement.
?php
function alter_registration_form_alter(&$form, &$form_state, $form_id) {
global $user;
if($form_id=="user_register" || $form_id == "user_profile_form"){
$form['#validate'][] ='alter_registration_form_validate';
$form['#submit'][] ='alter_registration_form_submit';
$form['info_perso']= array(
'#type' => 'fieldset',
'#title' => t('Informations Personnelles'),
'#weight' => 5,
'#collapsible' => TRUE,
'#collapsed' => FALSE,
);
$form['info_perso']['nom']= array(
'#type' => 'textfield',
'#title' => 'Nom',
'#default_value'=>$user->nom,
'#maxlength' => 55,
'#required'=> TRUE,
);
$form['info_perso']['prenom']= array(
'#type' => 'textfield',
'#title' => 'Prenom',
'#default_value'=>$user->prenom,
'#maxlength' => 55,
'#required'=> TRUE,
);
$form['info_perso']['adresse']= array(
'#type' => 'textfield',
'#title' => 'Adresse',
'#default_value'=>$user->adresse,
'#required'=> TRUE,
);
$form['info_perso']['cp']= array(
'#type' => 'textfield',
'#title' => 'Code Postal',
'#maxlength' => 5,
'#default_value'=>$user->cp,
'#required'=> TRUE,
);
$form['info_perso']['ville']= array(
'#type' => 'textfield',
'#title' => 'Ville',
'#default_value'=>$user->ville,
'#required'=> TRUE,
);
if ($form_id=="user_register"){
$form['info_perso']['condition']=array(
'#type' => 'checkbox',
'#title'=> 'J\'accepte les conditions générales d\'utilisation',
'#required' => TRUE,
);
}
}
}
function alter_registration_form_validate($form, &$form_state) {
if (!$form_state['values']['condition']){
form_set_error('condition', 'Vous devez accepter les conditions d\'utilisation pour vous enregistrer');
}
}
function alter_registration_form_submit($form, &$form_state) {
$nom = $form_state['values']['nom'];
}
?>
En les mettant donc au debut du script (juste après ton if de sélection des formulaires à modifier ) cela facilite la lecture et limite les erreurs (selon moi).
Donc voila je n'ai pas tester mais je suis sur a 90 % que c'est cela qui te génère ce problème.
Si tu as d'autre soucis je suis la.
Cordialement, Aya
Merci Aya pour ton code et
Permalien Soumis par sebphilip le 7 Janvier, 2011 - 10:45
Merci Aya pour ton code et tes précisions.
Apparemment ça fonctionne nickel. Trop cool.
Sais tu comment faire pour vérifier que mon champ code postal soit bien composé de 5 chiffres et afficher une pop-up ou un message si ce n'est pas le cas?
Le code de vérification doit il être dans le même fichier?
Autre question, pour ma culture personnelle, dans mon code faux d'avant, pourquoi Drupal l'interprétait même quand le module était désactivé (message d'erreur à chaque soumission de node)?
Pour verifier ton code postal
Permalien Soumis par Aya le 7 Janvier, 2011 - 11:21
Pour verifier ton code postal je te propose de le mettre dans la fonction alter_registration_form_validate.
En gros:
function alter_registration_form_validate($form, &$form_state) {
if (!$form_state['values']['condition']){
form_set_error('condition', 'Vous devez accepter les conditions d\'utilisation pour vous enregistrer');
}
// rajouter ici les autres chose a faire
if(strlen($form_state['values']['code_postal'])!=5 && !is_numeric($form_state['values']['code_postal'])){
form_set_error('code_postal','Un code postal est composée de 5 chiffre');
}
}
Cela devrait fonctionner cependant tu aurais pus filtrer directement sur tes objets de formulaire. je te conseille l'api from de drupal pour drupal 6 qui est très complete : API Form drupal 6
Cordialement, Aya
Bonjour, je reviens à la
Permalien Soumis par sebphilip le 11 Janvier, 2011 - 13:40
Bonjour, je reviens à la charge seulement maintenant car faute de temps libre en ce moment.
J'ai eu ton code Aya et je t'en remercie. Cependant, il me reste 2 "erreurs" à gérer et dont je ne trouve pas de solutions:
ton dernier code pour la vérification du code postal fonctionne bien pour le nombre de caractères (5) mais si je ne met que des lettres, il accepte le code postal quand même. Je n'arrive pas à lui imposer que des chiffres.
Mon second problème concerne la validation des conditions générales avec une check box. Pas de soucis sur le formulaire de contact. Cependant, quand l'utilisateur est connecté, et qu'il veut modifier ses infos persos, il est dans l'impossibilité car drupal lui dit" Veuillez accepter les conditions générales de ventes".
Le problème c'est que la case à cocher n'est plus là. Comment faire pour que la demande d' acceptation des conditions générales de ventes ne se fassent que lors de l'inscription?
Merci de votre aide.
pour un noob le plus simple
Permalien Soumis par buju le 11 Janvier, 2011 - 14:40
pour un noob le plus simple serai de suivre le consei de Haza, module content profil au lieu de te lancer ds une creation de module ^^° tu a choisi la voie de la sagesse
bonne chance
Le probleme avec le module
Permalien Soumis par sebphilip le 11 Janvier, 2011 - 18:00
Le probleme avec le module content profil c'est qu'il ne gere pas les checkbox. Si quelqu'un a une solution plus simple....
Dsl j’avais pas vu que tu
Permalien Soumis par Aya le 11 Janvier, 2011 - 20:35
Dsl j'avais pas vu que tu avais répondu et que tu avais encore un problème je regarde ça de le problème est toujours le même. L'endroit ou mettre le fait d'ajouter une fonction validate au formulaire.
Si je reprend le code (dernière version de la function alter_registration_form_alter):
Nous devons ajouter la fonction de validate sur le formulaire que lors de l'enregistrement.
function alter_registration_form_alter(&$form, &$form_state, $form_id) {
global $user;
if($form_id=="user_register" || $form_id == "user_profile_form"){
//on enleve le validate d'ici
//$form['#validate'][] ='alter_registration_form_validate';
$form['#submit'][] ='alter_registration_form_submit';
$form['info_perso']= array(
'#type' => 'fieldset',
'#title' => t('Informations Personnelles'),
'#weight' => 5,
'#collapsible' => TRUE,
'#collapsed' => FALSE,
);
$form['info_perso']['nom']= array(
'#type' => 'textfield',
'#title' => 'Nom',
'#default_value'=>$user->nom,
'#maxlength' => 55,
'#required'=> TRUE,
);
$form['info_perso']['prenom']= array(
'#type' => 'textfield',
'#title' => 'Prenom',
'#default_value'=>$user->prenom,
'#maxlength' => 55,
'#required'=> TRUE,
);
$form['info_perso']['adresse']= array(
'#type' => 'textfield',
'#title' => 'Adresse',
'#default_value'=>$user->adresse,
'#required'=> TRUE,
);
$form['info_perso']['cp']= array(
'#type' => 'textfield',
'#title' => 'Code Postal',
'#maxlength' => 5,
'#default_value'=>$user->cp,
'#required'=> TRUE,
);
$form['info_perso']['ville']= array(
'#type' => 'textfield',
'#title' => 'Ville',
'#default_value'=>$user->ville,
'#required'=> TRUE,
);
if ($form_id=="user_register"){
$form['info_perso']['condition']=array(
'#type' => 'checkbox',
'#title'=> 'J\'accepte les conditions générales d\'utilisation',
'#required' => TRUE,
);
//on ajoute le validate ici qui ne sera fait que sur le formulaire d'enregistrement
$form['#validate'][] ='alter_registration_form_validate';
}
}
}
Petit problème donc d'avoir le validate du code postal du coup.
Mais pas de problème il suffit juste de modifier un peu ces fonctions.
On garde l'ancienne fonction de validate qui est appeler uniquement pour pour le formulaire d'enregistrement mais on supprime le fait de checker le code postal.
function alter_registration_form_validate($form, &$form_state) {
if (!$form_state['values']['condition']){
form_set_error('condition', 'Vous devez accepter les conditions d\'utilisation pour vous enregistrer');
}
}
Puis on créer une nouvelle fonction pour checker le code postal et les autres chose si on a envie.
function alter_registration_form_validate_code($form, &$form_state) {
if(strlen($form_state['values']['code_postal'])!=5 && !is_numeric($form_state['values']['code_postal'])){
form_set_error('code_postal','Un code postal est composée de 5 chiffre');
}
}
et on rajoute cette ligne a la place de l'ancienne dans le code principale de notre fonction form_alter:
$form['#validate'][] ='alter_registration_form_validate_code';
ce qui donne au final:
function alter_registration_form_alter(&$form, &$form_state, $form_id) {
global $user;
if($form_id=="user_register" || $form_id == "user_profile_form"){
//on enleve le validate d'ici
//$form['#validate'][] ='alter_registration_form_validate';
//fonction pour le test du code postal
$form['#validate'][] ='alter_registration_form_validate_code';
$form['#submit'][] ='alter_registration_form_submit';
$form['info_perso']= array(
'#type' => 'fieldset',
'#title' => t('Informations Personnelles'),
'#weight' => 5,
'#collapsible' => TRUE,
'#collapsed' => FALSE,
);
$form['info_perso']['nom']= array(
'#type' => 'textfield',
'#title' => 'Nom',
'#default_value'=>$user->nom,
'#maxlength' => 55,
'#required'=> TRUE,
);
$form['info_perso']['prenom']= array(
'#type' => 'textfield',
'#title' => 'Prenom',
'#default_value'=>$user->prenom,
'#maxlength' => 55,
'#required'=> TRUE,
);
$form['info_perso']['adresse']= array(
'#type' => 'textfield',
'#title' => 'Adresse',
'#default_value'=>$user->adresse,
'#required'=> TRUE,
);
$form['info_perso']['cp']= array(
'#type' => 'textfield',
'#title' => 'Code Postal',
'#maxlength' => 5,
'#default_value'=>$user->cp,
'#required'=> TRUE,
);
$form['info_perso']['ville']= array(
'#type' => 'textfield',
'#title' => 'Ville',
'#default_value'=>$user->ville,
'#required'=> TRUE,
);
if ($form_id=="user_register"){
$form['info_perso']['condition']=array(
'#type' => 'checkbox',
'#title'=> 'J\'accepte les conditions générales d\'utilisation',
'#required' => TRUE,
);
//on ajoute le validate ici qui ne sera fait que sur le formulaire d'enregistrement
$form['#validate'][] ='alter_registration_form_validate';
}
}
}
function alter_registration_form_validate($form, &$form_state) {
if (!$form_state['values']['condition']){
form_set_error('condition', 'Vous devez accepter les conditions d\'utilisation pour vous enregistrer');
}
}
function alter_registration_form_validate_code($form, &$form_state) {
if(strlen($form_state['values']['code_postal'])!=5 && !is_numeric($form_state['values']['code_postal'])){
form_set_error('code_postal','Un code postal est composée de 5 chiffre');
}
}
Voila j'espère avoir répondu a ta question et que tu t'en sors finalement avec drupal ^^.
Cordialement, Aya
Merci pour ta reponse rapide
Permalien Soumis par sebphilip le 11 Janvier, 2011 - 23:51
Merci pour ta reponse rapide et detaillée AYA.
il restait juste une "erreur" dans ton code:
function alter_registration_form_validate_code($form, &$form_state) {
if(strlen($form_state['values']['code_postal'])!=5 && !is_numeric($form_state['values']['code_postal'])){
form_set_error('code_postal','Un code postal est composée de 5 chiffre');
}
}
pour la validation du code postal, il ne faut pas AND (&&) mais OR.
Merci encore du coup de pouce.
Cordialement.
Bonjour, J’ai tenté de créer
Permalien Soumis par vanden le 26 Janvier, 2011 - 04:44
Bonjour,
J'ai tenté de créer ce module mais ça ne fonctionne apparemment pas avec Drupal 5.x ...
J'ai le message : warning: Missing argument 3 for alter_registration_form_alter() in alter_registration.module on line 2.
Que peut on faire ?
EDIT :
Bon apparemment faut remplacer:
function alter_registration_form_alter(&$form, &$form_state, $form_id) {
global $user;
if($form_id=="user_register" || $form_id == "user_profile_form")
PAR :
function alter_registration_form_alter ( $form_id , & $form ) {
global $user;
if ( $form_id == "user_register" || $form_id == "user_edit")
MERCI !
Et ça aussi :
Permalien Soumis par vanden le 27 Janvier, 2011 - 01:23
Et ça aussi :
$form['#validate'][] ='alter_registration_form_validate_code';
$form['#submit'][] ='alter_registration_form_submit';
$form['#validate'][] ='alter_registration_form_validate';
PAR :
$form['#validate']['alter_registration_form_validate_code']= array();
$form['#submit']['alter_registration_form_submit']= array();
$form['#validate']['alter_registration_form_validate']= array()
ET
function alter_registration_form_validate($form, &$form_state) {
if (!$form_state['values']['condition']){
form_set_error('condition', 'Vous devez accepter les conditions d\'utilisation pour vous enregistrer');
}
}
function alter_registration_form_validate_code($form, &$form_state) {
if(strlen($form_state['values']['code_postal'])!=5 or !is_numeric($form_state['values']['code_postal'])){
form_set_error('code_postal','Un code postal est composée de 5 chiffre');
}
}
PAR :
function alter_registration_form_validate($form, $form_values) {
if (!$form_values['condition']){
form_set_error('condition', 'Vous devez accepter les conditions d\'utilisation pour vous enregistrer');
}
}
function alter_registration_form_validate_code($form, $form_values) {
if(strlen($form_values['code_postal'])!=5 or !is_numeric($form_values['code_postal'])){
form_set_error('code_postal','Un code postal est composée de 5 chiffre');
}
}
Bon j’ai encore un problème,
Permalien Soumis par vanden le 27 Janvier, 2011 - 02:41
Bon j'ai encore un problème, sur la page d'édition du compte ça marche pour l'utilisateur mais pas pour l'administrateur.
Comment faire pour que les admins puissent les voir ?
En plus qd un admin modifie un compte et le soumet, j'ai le message d'erreur :
Le champ nom/prénom ... est obligatoire
Bonsoir Aya, J’ai suivi la
Permalien Soumis par openpixel le 14 Février, 2012 - 20:46
Bonsoir Aya,
J'ai suivi la démarche expliquée dans cette discussion, je me suis aidé également pour bien comprendre le concept de ce tutoriel vidéo http://www.webenstock.com/fr/blog/2011-04-03-video-utilisation-du-hookfo... et l'ajout de nouveaux champs aux formulaires de création de compte et de modification de compte existant m'affiche correctement les données du compte.
J'ai deux questions par rapport à tout cela :
Comment faire pour afficher les données de ces champs nouvellement créés lorsque l'on consulte seulement le profil d'un utilisateur ? Faut-il se servir d'un template et exploiter dedans la variable $user ?
Enfin, mon but final est d'exploiter ces données dans Ubercart. Au lieu de remplir un formulaire une fois la commande en phase de checkout, le but serait d'afficher les informations (code postal, ville, ...) saisies initialement lors de la création du compte dans le fieldset "infos de livraison".
Pour cela, j'imagine qu'il faut à nouveau utiliser hook_form_alter, peut-être faire une requête sql pour récupérer la valeur des champs du compte et les insérer dans les variables ?
?
J'espère avoir expliqué clairement mon besoin. Bonne soirée et merci d'avance à ceux qui pourront m'éclairer sur la marche à suivre.
Anthony
Personne n’a une petite
Permalien Soumis par vanden le 27 Janvier, 2011 - 15:36
Personne n'a une petite idée ??
Parce que j'utilise les champs ajouter pour valider (activer) les comptes ... donc si l'admin ne voit rien bein ça me sert a rien.
En fait quand je suis logué
Permalien Soumis par vanden le 27 Janvier, 2011 - 17:55
En fait quand je suis logué en Admin et que j'édite un compte (Autre que le compte admin avec lequel je suis logué / par exemple pour l'activé) les champs ajoutés avec le module alter_registration sont ceux de l'admin et ce quelque soit les comptes édités...
Comment je pourrai faire pour que quand l'admin édite un compte autre que le sien il ai les info ajoutés par alter_registration de l'utilisateur ?
Bon j’ai compris d’où ça
Permalien Soumis par vanden le 28 Janvier, 2011 - 02:50
Bon j'ai compris d'où ça viens, en fait c'est le $user (qui est l'utilisateur actuellement logué) ...
Dans :
'#default_value'=>$user->nom,
'#default_value'=>$user->prenom,
.
.
.
Alors quand c'est l'admin qui est logué on peut faire un cas spécial genre :
if (user_access('administer users'))}
'#default_value'=> ????->nom,
Ou ???? c'est l'utilisateur que l'admin édite.
Mais qu'est ce que je peut mettre ? Allez un petit coup de main SVP !
Je vais te répondre car j’ai
Permalien Soumis par Aya le 28 Janvier, 2011 - 09:31
Je vais te répondre car j'ai corriger ce problème chez moi:
Il faut remplacer
global $user;
par
if (arg(1)){
$user = user_load(array('uid' => arg(1)));
}
l'arg(1) est l'argument passé dans l'url c'est a dire l'uid de l'utilisateur edité.
Avec ça tout devrait marcher.
Essai et tiens moi au courant.
Cordialement, AyA
MERCI ! ça marche
Permalien Soumis par vanden le 31 Janvier, 2011 - 22:33
MERCI !
ça marche nickel !
Cordialement, Vanden
Bonjour à tous Je suis
Permalien Soumis par yigjif le 21 Février, 2011 - 16:27
Bonjour à tous
Je suis nouveau sur drupal et j’essaie de créer mon propre module pour faire un formulaire mais quand je suis les instructions ci-dessus pour crèer un module, une fois dans sur la page des module drupal voit le module mais me dit que Cette version est incompatible avec la version 6.20 du noyau de Drupal?
SOS SVP
Merci
C bon en fait mon probléme c
Permalien Soumis par yigjif le 21 Février, 2011 - 19:36
C bon en fait mon probléme c ke je codè qvec bloc le bloc note de mac et apparement ca rajouté des caractéres speciau ke l’on ne voit pas. Ca m’aprendra a vouloir jouer au geek lol.
Bonne journé a ts
Travaille avec un éditeur de
Permalien Soumis par vallou le 26 Février, 2011 - 11:47
Travaille avec un éditeur de code et converti en UTF-8, plus de problème de caractères spéciaux.
PS : Ecrire en bon français sur un forum est aussi vivement conseillé :D Evite les "c" pour c'est et relis-toi. Mais ce n'est qu'un conseil.
A+