เป็นไปได้หรือไม่ที่จะเพิ่มฟิลด์ลงในประเภทโหนดที่ประกาศโดยใช้ hook_node_info ฉันต้องเพิ่มฟิลด์แยกกันหรือไม่? ถ้าเป็นเช่นนั้นฉันจะใช้ตะขอตัวอะไร
เป็นไปได้หรือไม่ที่จะเพิ่มฟิลด์ลงในประเภทโหนดที่ประกาศโดยใช้ hook_node_info ฉันต้องเพิ่มฟิลด์แยกกันหรือไม่? ถ้าเป็นเช่นนั้นฉันจะใช้ตะขอตัวอะไร
คำตอบ:
คุณต้องแนบฟิลด์ต่าง ๆ พวกเขาไม่สามารถเพิ่ม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;
}