เพิ่มเขตข้อมูลใน hook_node_info ();


9

เป็นไปได้หรือไม่ที่จะเพิ่มฟิลด์ลงในประเภทโหนดที่ประกาศโดยใช้ hook_node_info ฉันต้องเพิ่มฟิลด์แยกกันหรือไม่? ถ้าเป็นเช่นนั้นฉันจะใช้ตะขอตัวอะไร

คำตอบ:


8

คุณต้องแนบฟิลด์ต่าง ๆ พวกเขาไม่สามารถเพิ่มhook_node_info()ได้ คุณมักจะทำสิ่งนี้ในhook_install()ฟังก์ชั่นในไฟล์. 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 ของฉันหรือไม่
Gaelan

มันขึ้นอยู่กับคุณจริงๆ ... ถ้าคุณต้องการที่จะลบเนื้อหา / ชนิดเนื้อหา / เขตข้อมูลใด ๆ ที่คุณได้สร้างแล้วใช่ถ้าคุณทำไม่ได้แล้วไม่มี :)
ไคลฟ์

ดังนั้นประเภทเนื้อหาของฉันจะไม่หายไปเมื่อโมดูลถูกปิด?
Gaelan

2
ประเภทเนื้อหาที่กำหนดเองของคุณจะไม่หายไปเมื่อโมดูลของคุณถูกปิดใช้งาน (ใน Drupal 7) แม้ว่าคุณจะถอนการติดตั้งโมดูลที่ถูกปิดใช้งาน หากคุณเขียนรหัสเพื่อลบประเภทเนื้อหาที่คุณสร้างขึ้นระหว่างการติดตั้งระหว่าง hook_uninstall () ของโมดูลของคุณแล้วใช่ประเภทเนื้อหาจะหายไปเมื่อคุณถอนการติดตั้งโมดูลของคุณ (แต่ยังไม่เมื่อคุณปิดใช้งาน)
ลุงรหัสลิง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.