2012-10-12 14 views
5

वहाँ Drupal 6 में CCK के साथ एक विधि हमारे कस्टम रूप में एक CCK क्षेत्र संलग्न करने के लिए, की तरह था:कस्टम फार्म के लिए CCK फ़ील्ड जोड़ें Drupal में 7

$field = content_fields('field_name'); // field_name is cck field 
(text_field,text_Area,image_field anything.) 
$form['#field_info'][$name] = $field; 
$form += content_field_form($form, $form_state, $field); 

मैं Drupal 7 में ही कार्यक्षमता कैसे प्राप्त कर सकते ? मेरे पास एक फॉर्म था और मैं उस क्षेत्र का उपयोग करना चाहता हूं जिसे मैंने सामग्री प्रकार के लिए बनाया था। मैं field.module की सभी फाइलों के माध्यम से गया लेकिन कुछ भी नहीं मिला। इसमें _attach_field, field_info_Field और field_info_instance जैसे फ़ंक्शन हैं, लेकिन उन्हें फॉर्म फ़ील्ड के रूप में प्रस्तुत नहीं किया जा सकता है।

+1

यह _possible_ लेकिन सुंदर गंदा है। आप एक कोड उदाहरण [यहां] ढूंढ सकते हैं (http://drupal.stackexchange.com/questions/25140/is-displaying-a-working-field-widget-form-on-its-own-possible) – Clive

उत्तर

2

मुझे पूरा फॉर्म जोड़ने और परेशान करने का आपका समाधान पसंद है। मैं इसे किसी अन्य कोण से हमला कर रहा हूं - एक फेंकने वाला अस्थायी रूप बनाएं और केवल उस क्षेत्र में कॉपी करें जिसे आप संरक्षित करना चाहते हैं। यहां मैंने http://api.drupal.org/api/drupal/modules%21field%21field.attach.inc/function/field_attach_form/7#comment-45908 पर पोस्ट किया है:

एक मनमानी इकाई बंडल (इस मामले में, एक स्वत: पूर्ण नोडरेफरेंस टेक्स्टफील्ड) को एक अन्य रूप में जोड़ने के लिए, एक अस्थायी रूप और फॉर्मस्टेट के रूप में फ़ॉर्म बनाएं, और जगह पर कॉपी करें उस क्षेत्र की परिभाषा। मेरे मामले में, मैं एक वाणिज्य चेकआउट फ़ॉर्म पर काम कर रहा हूँ में परिवर्तन:

function example_form_commerce_checkout_form_checkout_alter(&$form, &$form_state, $form_id) { 
    $tmpform = array(); 
    $tmpform_state = array(); 
    $tmpnode = new stdClass(); 
    $tmpnode->type = 'card'; 
    // Create the temporary form/state by reference 
    field_attach_form('node', $tmpnode, $tmpform, $tmpform_state); 
    // Create a new fieldset on the Commerce checkout form 
    $form['cart_contents']['org_ref_wrap'] = array(
    '#type' => 'fieldset', 
    '#title' => t('Support Organization'), 
); 
    // Place a copy of the new form field within the new fieldset 
    $form['cart_contents']['org_ref_wrap'][] = $tmpform['field_card_organization']; 
    // Copy over the $form_state field element as well to avoid Undefined index notices 
    $form_state['field']['field_card_organization'] = $tmpform_state['field']['field_card_organization']; 

    .. 

लाभ या तो समाधान होने की संभावना "स्रोत" की जटिलता पर निर्भर करता प्रपत्र (बहुत जटिल unsets का एक बहुत फार्म के साथ का मतलब करने के लिए सम्मिलित विधि) और क्या स्रोत फ़ॉर्म कभी भी समय के साथ नए फ़ील्ड प्राप्त करेगा (नए फ़ील्ड फॉर्म-डालने विधि में आपके "गंतव्य" फ़ॉर्म पर दिखाई देंगे)।

अपना समाधान साझा करने के लिए धन्यवाद!

+0

धन्यवाद यह है वास्तव में मददगार !! – miteshmap

+0

@texasbronius क्या आप मुझे मेरे कस्टम फॉर्म में उपयोगकर्ता फ़ील्ड संलग्न करने में मदद कर सकते हैं? यहां [form.inc] है (https://www.dropbox.com/s/o1gf5j51n7jbo81/statuses.form.inc?dl=0) फ़ाइल – Umair

2

आखिर में जवाब मिला। ऐसा करने के लिए चाल है।

$node = new stdClass(); 
$node->type = 'video'; //content type 
field_attach_form('node', $node, $form, $form_state); 
unset($form['body']); //unset other fields like this. 

यह फ़ील्ड एपीआई के साथ जोड़े गए सभी कस्टम फ़ील्ड प्रदर्शित करेगा। इसलिए आपको किसी भी अतिरिक्त फ़ील्ड को अनसेट करने की आवश्यकता है जिसे आप अपने फॉर्म में प्रदर्शित नहीं करना चाहते हैं। बाकी आईटी के रूप में होगा।

संबंधित मुद्दे