Saya melakukan sesuatu seperti ini baru-baru ini. Karena profil menggunakan bidang, ini membuat semuanya sangat sederhana. Untuk formulir Anda bisa melakukan sesuatu seperti ini:
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;
}
Karena semua formulir profil hanya merupakan bidang yang dilampirkan ke profil, Anda dapat dengan mudah melampirkan bidang itu sendiri ke formulir, menggunakan API inti Drupal:
field_attach_form
menambahkan bidang ke formulir.
field_attach_validate
menangani validasi.
field_attach_submit
untuk menangani penambahan nilai ke entitas (profil).
- Terakhir Anda harus menyimpan entitas profil menggunakan
profile2_save
.
Setelah menelusuri kode modul profile2, saya menemukan bahwa itu menyediakan fungsi pembungkus untuk melampirkan bidang ke formulir dan menyimpan formulir. Ini lebih sederhana, tetapi dengan melakukannya, Anda kehilangan sedikit kontrol. Untuk menggunakan ini, Anda perlu menggunakan profile2_attach_form
. Melakukan ini juga akan menangani validasi dan penyimpanan data.
Untuk menggunakan kode di atas Anda harus bisa c / p, ganti nama formulir dan ganti profile_machine_name
dengan nama mesin profil yang Anda inginkan untuk menampilkan formulir.