हुक_नोड_इन्फो () में फ़ील्ड जोड़ें;


9

क्या हुक_नोड_इन्फो के उपयोग से घोषित नोड प्रकार में फ़ील्ड जोड़ना संभव है? क्या मुझे खेतों को अलग से जोड़ना होगा? यदि हां, तो मैं उसके लिए किस हुक का उपयोग करूंगा?

जवाबों:


8

आपको अलग से फ़ील्ड संलग्न करने की आवश्यकता है, उन्हें इसके माध्यम से नहीं जोड़ा जा सकता है hook_node_info()। आप आमतौर पर hook_install()अपने मॉड्यूल की स्थापना फ़ाइल में एक फ़ंक्शन में ऐसा करेंगे ।

Drupal core से एक अच्छा सरल उदाहरण ब्लॉग मॉड्यूल की इंस्टॉल फ़ाइल में है:

function blog_install() {
  // Ensure the blog node type is available.
  node_types_rebuild();
  $types = node_type_get_types();
  node_add_body_field($types['blog']);
}

फ़ंक्शन केवल नोड प्रकारों को पुनर्निर्मित करता है (इसलिए नया जोड़ा प्रकार उपलब्ध है), फिर node_add_body_field()फ़ंक्शन का उपयोग करके इसमें एक बॉडी फ़ील्ड जोड़ता है । यह फ़ंक्शन अपने आप में एक उत्कृष्ट उदाहरण देता है कि किसी फ़ील्ड को कैसे बनाया जाए, उस फ़ील्ड का एक उदाहरण, और फिर field_create_field()और field_create_instance()फ़ंक्शंस का उपयोग करके इसे सामग्री प्रकार से संलग्न करें ।

कोड इतना लंबा नहीं है इसलिए मैं इसे एक उदाहरण के रूप में यहाँ शामिल करूँगा:

function node_add_body_field($type, $label = 'Body') {
  // Add or remove the body field, as needed.
  $field = field_info_field('body');
  $instance = field_info_instance('node', 'body', $type->type);
  if (empty($field)) {
    $field = array(
      'field_name' => 'body', 
      'type' => 'text_with_summary', 
      'entity_types' => array('node'),
    );
    $field = field_create_field($field);
  }
  if (empty($instance)) {
    $instance = array(
      'field_name' => 'body', 
      'entity_type' => 'node', 
      'bundle' => $type->type, 
      'label' => $label, 
      'widget' => array('type' => 'text_textarea_with_summary'), 
      'settings' => array('display_summary' => TRUE), 
      'display' => array(
        'default' => array(
          'label' => 'hidden', 
          'type' => 'text_default',
        ), 
        'teaser' => array(
          'label' => 'hidden', 
          'type' => 'text_summary_or_trimmed',
        ),
      ),
    );
    $instance = field_create_instance($instance);
  }
  return $instance;
}

धन्यवाद। क्या मुझे अपने hook_uninstall में कुछ भी करने की आवश्यकता है?
गेलन

यह आप पर निर्भर है वास्तव में है ... आप किसी भी सामग्री / सामग्री प्रकार / आप तो बना लिया है हाँ क्षेत्रों को निकालना चाहते हैं, यदि आप नहीं, तो कोई कर :)
क्लाइव

जब मेरा मॉड्यूल बंद हो जाता है तो मेरी सामग्री का प्रकार गायब नहीं होगा?
गेलन

2
जब आपका मॉड्यूल अक्षम हो जाता है (Drupal 7 में) तो आपका कस्टम कंटेंट टाइप गायब नहीं होगा, भले ही आप अक्षम मॉड्यूल को अनइंस्टॉल कर दें। यदि आप अपने मॉड्यूल के hook_uninstall () के दौरान इंस्टॉल किए गए सामग्री प्रकार को हटाने के लिए कोड लिखते हैं, तो हाँ जब आप अपने मॉड्यूल को अनइंस्टॉल करते हैं (लेकिन तब भी जब आप इसे केवल अक्षम नहीं करते हैं) तो सामग्री प्रकार गायब हो जाएगा।
चाचा कोड बंदर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.