प्रोफाइल 2 मॉड्यूल का उपयोग करके प्रोफाइल फॉर्म कैसे प्रदर्शित करें


11

Profile2 एक ऐसा मॉड्यूल है जो उपयोगकर्ता खाते से अलग प्रोफाइल बनाने के लिए संस्थाओं का उपयोग करता है।

अपने मॉड्यूल के भीतर से, मैं प्रोफाइल संस्थाओं को संपादित करने के लिए एक फॉर्म प्रदर्शित करने में सक्षम होना चाहता हूं। संभवतः drupal_get_form या शायद Profile2 के API या किसी अन्य विधि का उपयोग करके।

इस के बारे में जाने के लिए सबसे अच्छा तरीका क्या है?

जवाबों:


20

मैंने हाल ही में कुछ ऐसा किया है। चूँकि प्रोफ़ाइल फ़ील्ड का उपयोग करता है, इसलिए यह चीजों को बहुत सरल बनाता है। फॉर्म के लिए आप कुछ इस तरह से कर सकते हैं:

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उस प्रोफ़ाइल के वास्तविक मशीन नाम से बदलें जिसे आप फ़ॉर्म दिखाना चाहते हैं।


मुझे समझ नहीं आ रहा है कि यहाँ क्या हो रहा है। मुझे सिर्फ Profile2 फॉर्म प्रदर्शित करना है। क्या यह संभव है?
कार्लोस मुनिज़

जब मैं अपने कोड का उपयोग अपने मॉड्यूल में करता हूं तो यह मुझे यह त्रुटि देता है: घातक त्रुटि: सी में 550: C पर \ wamp \ www \ working \ मॉड्यूल \ field \ field.attach.inc में असमर्थित प्रकार
कार्लोस

@Charlie मैंने अधिक विवरण के साथ अपने उत्तर को अपडेट किया है और प्रोफ़ाइल 2 एपीआई का उपयोग करके एक वैकल्पिक और सरल समाधान प्रदान किया है।
googletorp

यह है googletorp !!! आपके उत्तर ने एक छोटे से संपादन के साथ काम किया: मेरे द्वारा जोड़े गए फ़ंक्शन के अंत में: $ फॉर्म लौटाएं जो एकमात्र तरीका था जिसे मैं इसे ड्रुपाल_गेटफॉर्म () के साथ कॉल करके प्रदर्शित कर सकता था। यदि $ $ रिटर्न के बिना इसे प्रदर्शित करने का एक वैकल्पिक तरीका था, तो कृपया समझाएं, अन्यथा बहुत बहुत धन्यवाद!
कार्लोस मुनिज़

इनाम जीतने के लिए मुझे 12 घंटे इंतजार करना होगा :)
कार्लोस मुनिज़
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.