Câu trả lời:
Bạn cần đính kèm các trường riêng biệt, chúng không thể được thêm vào thông qua hook_node_info()
. Bạn thường sẽ làm điều này trong một hook_install()
chức năng trong tệp .install của mô-đun.
Một ví dụ đơn giản đẹp từ lõi Drupal nằm trong tệp cài đặt của mô-đun blog:
function blog_install() {
// Ensure the blog node type is available.
node_types_rebuild();
$types = node_type_get_types();
node_add_body_field($types['blog']);
}
Hàm chỉ đơn giản là xây dựng lại các loại nút (vì vậy loại mới được thêm vào có sẵn), sau đó thêm một trường cơ thể vào nó bằng cách sử dụng node_add_body_field()
hàm. Bản thân hàm này đưa ra một ví dụ tuyệt vời về cách tạo một trường, một thể hiện của trường đó và sau đó gắn nó vào một loại nội dung bằng cách sử dụng các hàm field_create_field()
và field_create_instance()
.
Mã không quá dài nên tôi sẽ đưa nó vào đây làm ví dụ:
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;
}