답변:
필드를 별도로 첨부해야합니다 hook_node_info()
.를 통해 추가 할 수 없습니다 . 일반적으로 hook_install()
모듈의 .install 파일 에있는 함수 에서이 작업을 수행 합니다.
Drupal 코어의 좋은 간단한 예는 블로그 모듈의 설치 파일에 있습니다.
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()
and 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;
}