Message d'avertissement

The subscription service is currently unavailable. Please try again later.

Personnalisation du formulaire d'inscription

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

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 !

Forum : 
Version de Drupal : 

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é 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.

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 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.

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

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 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 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 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 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 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.

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 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 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 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 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
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']['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,
                 );
        }
       
    }

$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, 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 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 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 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.

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 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 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 :

        $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, 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 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 ?

<?php
 $form
['mail']['#value'] = 'valeur de $user['cp']['#value']';
?>

?

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

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 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 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

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

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+