Ostatnio zrobiłem coś takiego. Ponieważ profil używa pól, to czyni sprawę bardzo prostą. Dla formularza możesz zrobić coś takiego:
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;
}
Ponieważ wszystkie formularze profilu są tylko polami dołączonymi do profilu, możesz po prostu sam dołączyć pola do formularza, używając podstawowych interfejsów API Drupal:
field_attach_form
dodaje pola do formularza.
field_attach_validate
obsługuje sprawdzanie poprawności.
field_attach_submit
obsługuje dodawanie wartości do encji (profilu).
- Na koniec musisz zapisać encję profilu za pomocą
profile2_save
.
Po przejrzeniu kodu modułu profile2 odkryłem, że zapewnia on funkcję otoki w celu dołączenia pól do formularza i zapisania formularza. To jest prostsze, ale robiąc to tracisz trochę kontroli. Aby tego użyć, musisz użyć profile2_attach_form
. W ten sposób zajmie się również sprawdzaniem poprawności i zapisywaniem danych.
Aby użyć powyższego kodu, powinieneś być w stanie go c / p, zmienić nazwę formularza i zastąpić profile_machine_name
rzeczywistą nazwą komputera profilu, dla którego chcesz wyświetlić formularz.