Tôi đã làm một cái gì đó như thế này gần đây. Vì hồ sơ sử dụng các trường, điều này làm cho mọi thứ khá đơn giản. Đối với hình thức bạn có thể làm một cái gì đó như thế này:
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;
}
Vì tất cả các biểu mẫu hồ sơ chỉ là các trường được đính kèm vào hồ sơ, bạn chỉ cần tự mình đính kèm các trường vào biểu mẫu, sử dụng API lõi Drupal:
field_attach_form
thêm các trường vào mẫu.
field_attach_validate
xử lý xác nhận.
field_attach_submit
để xử lý thêm các giá trị cho thực thể (hồ sơ).
- Cuối cùng, bạn sẽ cần lưu thực thể hồ sơ bằng cách sử dụng
profile2_save
.
Sau khi duyệt mã mô-đun profile2, tôi thấy rằng nó cung cấp chức năng bao bọc để đính kèm các trường vào biểu mẫu và lưu biểu mẫu. Điều này đơn giản hơn, nhưng khi làm như vậy, bạn mất một chút kiểm soát. Để sử dụng, bạn cần sử dụng profile2_attach_form
. Làm điều này cũng sẽ xử lý xác nhận và lưu dữ liệu.
Để sử dụng mã ở trên, bạn sẽ có thể c / p nó, đổi tên biểu mẫu và thay thế profile_machine_name
bằng tên máy thực tế của hồ sơ bạn muốn hiển thị biểu mẫu cho.