मैंने हाल ही में कुछ ऐसा किया है। चूँकि प्रोफ़ाइल फ़ील्ड का उपयोग करता है, इसलिए यह चीजों को बहुत सरल बनाता है। फॉर्म के लिए आप कुछ इस तरह से कर सकते हैं:
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;
}
चूंकि सभी प्रोफ़ाइल फ़ॉर्म केवल फ़ील्ड हैं जो प्रोफ़ाइल से जुड़ी हैं, आप ड्रुपल कोर एपीआई का उपयोग करके फ़ील्ड को स्वयं प्रपत्र में संलग्न कर सकते हैं:
field_attach_form फ़ील्ड को प्रपत्र में जोड़ता है।
field_attach_validate सत्यापन संभालता है।
field_attach_submit इकाई (प्रोफ़ाइल) में मान जोड़ने के लिए हैंडल।
- अंत में आपको प्रोफाइल इकाई को उपयोग करके सहेजना होगा
profile2_save।
प्रोफाइल 2 मॉड्यूल कोड ब्राउज़ करने के बाद, मैंने पाया कि यह फ़ील्ड को फ़ॉर्म से जोड़ने और फ़ॉर्म को सहेजने के लिए एक आवरण फ़ंक्शन प्रदान करता है। यह सरल है, लेकिन ऐसा करने में, आप थोड़ा नियंत्रण ढीला करते हैं। इसका उपयोग करने के लिए आपको उपयोग करने की आवश्यकता है profile2_attach_form। ऐसा करने से डेटा की मान्यता और बचत भी हो जाएगी।
उपरोक्त कोड का उपयोग करने के लिए आपको इसे c / p करने में सक्षम होना चाहिए, फ़ॉर्म का नाम बदलें और profile_machine_nameउस प्रोफ़ाइल के वास्तविक मशीन नाम से बदलें जिसे आप फ़ॉर्म दिखाना चाहते हैं।