J'ai fait quelque chose comme ça récemment. Puisque le profil utilise des champs, cela rend les choses assez simples. Pour le formulaire, vous pouvez faire quelque chose comme ceci:
function my_profile_form($form, &$form_state) {
global $user;
if (!isset($form_state['profiles'])) {
$profile = profile2_load_by_user($user, 'profile_machine_name');
if (!$profile) {
$profile = profile_create(array(
'type' => 'profile_machine_name',
'uid' => $user->uid
));
}
$form_state['profiles'][$profile->type] = $profile;
}
// Use field attach form and handle the fields yourself:
field_attach_form('profile2', $profile, $form, $form_state);
// Or use profile2 API which is simpler
profile2_attach_form($form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
return $form;
}
Étant donné que tout le formulaire de profil est uniquement les champs qui sont attachés au profil, vous pouvez simplement attacher les champs vous-même au formulaire, en utilisant les API de base Drupal:
field_attach_form
ajoute les champs au formulaire.
field_attach_validate
gère la validation.
field_attach_submit
à gère l'ajout de valeurs à l'entité (profil).
- Enfin, vous devez enregistrer l'entité de profil à l'aide de
profile2_save
.
Après avoir parcouru le code du module profile2, j'ai constaté qu'il fournit une fonction wrapper pour attacher les champs au formulaire et enregistrer le formulaire. C'est plus simple, mais ce faisant, vous perdez un peu de contrôle. Pour l'utiliser, vous devez utiliser le profile2_attach_form
. Cette opération gérera également la validation et la sauvegarde des données.
Pour utiliser le code ci-dessus, vous devez être en mesure de le c / p, de renommer le formulaire et de le remplacer profile_machine_name
par le nom de machine réel du profil pour lequel vous souhaitez afficher le formulaire.