développiez la réponse de Jeremy, vous allez vouloir étudier Drupal Form API et user_register()
. En bref, vous construisez un tableau associé; chaque élément du tableau correspond à un élément de formulaire.
Chaque élément de formulaire dans le tableau est son propre tableau associé. Ils peuvent avoir un type: champ de texte, menu de sélection, cases à cocher, etc .: voir le Form API reference pour tous les types.
Chaque élément de formulaire peut également avoir un poids: c'est ainsi que vous commandez les éléments. Les poids inférieurs numérotés apparaissent avant les poids plus élevés numérotés dans le formulaire.
L'un des types d'éléments disponibles est fieldset
: c'est ce qui vous permettra de regrouper des éléments. Lorsque vous utilisez un fieldset, il crée une section du formulaire avec ses propres valeurs de poids.
Alors, disons que vous avez un formulaire avec trois champs: Nom , Société et Adresse e-mail. Le Nom devrait apparaître en premier, Société deuxième, Adresse e-mail troisième. Vous pouvez spécifier la forme comme ceci:
$form['name'] = array(
'#type' => 'textfield',
'#title' => t('Name'),
'#weight' => 1,
);
$form['company'] = array(
'#type' => 'textfield',
'#title' => t('Company'),
'#weight' => 2,
);
$form['email'] = array(
'#type' => 'textfield',
'#title' => t('E-mail address'),
'#weight' => 3,
);
Notez la clé #weight
. Si vous vouliez Company à apparaître après Adresse e-mail, vous devez créer $form['company']['#weight']
à quelque chose de supérieur à 3.
Maintenant que vous vouliez groupe Nom et Société dans un fieldset appelé Informations personnelles.Votre forme ressemblerait maintenant quelque chose comme ceci:
$form['personal'] = array(
'#type' => 'fieldset',
'#title' => t('Personal information'),
'#weight' => 1,
);
$form['personal']['name'] = array(
'#type' => 'textfield',
'#title' => t('Name'),
'#weight' => 1,
);
$form['personal']['company'] = array(
'#type' => 'textfield',
'#title' => t('Company'),
'#weight' => 2,
);
$form['email'] = array(
'#type' => 'textfield',
'#title' => t('E-mail address'),
'#weight' => 3,
);
Notez que Nom et Company sont maintenant des éléments de tableau de $form['personal']
.
Si vous voulez faire Nom apparaître après Company dans le fieldset, définissez son #weight
supérieur à 2. Comme le nom fait maintenant partie d'un fieldset qui a une #weight
inférieure à la E adresse mail champ, même si vous définissez $form['personal']['name']['#weight']
à 4, il ne ferait pas le Nom apparaître après Adresse e-mail.
Donc, ce que vous allez faire est d'utiliser hook_form_alter()
pour modifier le formulaire user_register
pour modifier les poids de certains éléments de formulaire, créer vos propres fieldsets et déplacer certains éléments de formulaire dans vos fieldsets nouvellement créés.
Il existe des moyens de faire cela dans votre thème, mais je préfère créer un module personnalisé pour cela. Créez votre module personnalisé, et mettre en œuvre hook_form_alter()
:
function test_form_alter(&$form, $form_state, $form_id) {
if ($form_id === 'user_register') { // Only modify the user registration form
// Before you can get down to business, you need to figure out the
// structure of the user registration form. Use var_dump or kpr to dump
// the $form array.
// Note: if you want to use kpr on the user registration form, give
// anonymous permission to see devel information.
// kpr($form);
// Move Name field to after E-Mail field
$form['name']['#weight'] = 2;
$form['mail']['#weight'] = 1;
// Group Name and E-mail together into a fieldset
$form['personal_info'] = array(
'#type' => 'fieldset',
'#title' => t('Personal information'),
);
$form['personal_info']['name'] = $form['name'];
$form['personal_info']['mail'] = $form['mail'];
// The last block only copied the elements: unset the old ones.
unset($form['name']);
unset($form['mail']);
}
}
Dans les formes plus complexes, faire avancer les choses d'un à l'autre fieldset pourrait donner des résultats inattendus lors de la présentation du formulaire. C'est parce que $form['name']
n'est pas le même que $form['group']['name']
, ce qui n'est pas la même chose que $form['other_group']['name']
. Vous n'avez pas à vous soucier de cela sur le formulaire user_register
pour la plupart, mais consultez la page du manuel sur #tree and #parents pour plus d'informations à ce sujet. Cela concerne la modification des champs existants dans le formulaire d'inscription de l'utilisateur: si vous souhaitez ajouter de nouveaux champs, je recommande fortement d'utiliser Content Profile. Si vous voulez créer des champs personnalisés par vous-même, cela va devenir beaucoup plus complexe car vous devrez implémenter vos propres gestionnaires de validation et de soumission. Le profil de contenu gère cela pour vous: consultez son fichier README pour voir comment l'activer pour les formulaires d'inscription.
où cela va-t-il? dans template.php dans le répertoire du thème? – Tim
Vous devez placer ce code dans un module personnalisé, dans Drupal 7, vous pouvez faire des choses comme ça dans votre thème. – googletorp