hook_node_info ()에 필드를 추가하십시오.


9

hook_node_info를 사용하여 선언 된 노드 유형에 필드를 추가 할 수 있습니까? 필드를 별도로 추가해야합니까? 그렇다면 어떤 후크를 사용해야합니까?

답변:


8

필드를 별도로 첨부해야합니다 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;
}

감사. hook_uninstall에서 무엇을해야합니까?
Gaelan

그것은 당신에게 달려 있습니다 ... 만약 당신이 만든 어떤 컨텐츠 / 컨텐트 타입 / 필드를 제거하고 싶다면 그렇습니다. 그렇지 않으면 아니오 :)
Clive

모듈이 꺼져도 컨텐츠 유형이 사라지지 않습니까?
Gaelan

2
비활성화 된 모듈을 제거하더라도 모듈이 비활성화되면 (Drupal 7에서) 사용자 정의 컨텐츠 유형이 사라지지 않습니다. 모듈의 hook_uninstall () 중에 설치 중에 작성한 컨텐츠 유형을 삭제하는 코드를 작성하는 경우 모듈을 설치 제거 할 때 컨텐츠 유형이 사라집니다 (단, 단순히 사용 안함으로 설정 한 경우는 아님).
삼촌 코드 원숭이
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.