ฉันเพิ่งทำอะไรแบบนี้ เนื่องจากโปรไฟล์ใช้ฟิลด์สิ่งนี้จึงเป็นเรื่องง่าย สำหรับแบบฟอร์มคุณสามารถทำสิ่งนี้:
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;
}
เนื่องจากรูปแบบโปรไฟล์ทั้งหมดเท่านั้นคือฟิลด์ที่แนบกับโปรไฟล์คุณจึงสามารถแนบฟิลด์ด้วยตัวคุณเองกับฟอร์มโดยใช้ Drupal core APIs:
field_attach_form
เพิ่มเขตข้อมูลให้กับฟอร์ม
field_attach_validate
จัดการการตรวจสอบ
field_attach_submit
เพื่อจัดการการเพิ่มค่าให้กับกิจการ (โปรไฟล์)
profile2_save
สุดท้ายคุณจะต้องบันทึกรายละเอียดนิติบุคคลโดยใช้
หลังจากเรียกดูรหัสโมดูล profile2 ฉันพบว่ามันมีฟังก์ชั่น wrapper เพื่อแนบฟิลด์ไปยังแบบฟอร์มและบันทึกฟอร์ม สิ่งนี้ง่ายกว่า แต่ในการทำเช่นนั้นคุณขาดการควบคุมเล็กน้อย profile2_attach_form
เมื่อต้องการใช้นี้คุณจำเป็นต้องใช้ การทำเช่นนี้จะจัดการการตรวจสอบและการบันทึกข้อมูล
ในการใช้รหัสข้างต้นคุณควรจะสามารถ c / p มันเปลี่ยนชื่อแบบฟอร์มและแทนที่profile_machine_name
ด้วยชื่อเครื่องจริงของโปรไฟล์ที่คุณต้องการแสดงแบบฟอร์มสำหรับ