Thêm trường trong hook_node_info ();


9

Có thể thêm các trường vào một loại nút được khai báo bằng hook_node_info không? Tôi có phải thêm các trường riêng biệt không? Nếu vậy, tôi sẽ sử dụng cái móc gì cho việc đó?

Câu trả lời:


8

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()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;
}

Cảm ơn. Tôi có cần phải làm bất cứ điều gì trong hook_uninstall của tôi không?
Gaelan

Điều này tùy thuộc vào bạn ... nếu bạn muốn xóa bất kỳ loại nội dung / loại nội dung / trường nào bạn đã tạo thì có, nếu bạn không, thì không :)
Clive

Vì vậy, loại nội dung của tôi sẽ không biến mất khi mô-đun của tôi bị tắt?
Gaelan

2
Loại nội dung tùy chỉnh của bạn sẽ không biến mất khi mô-đun của bạn bị vô hiệu hóa (trong Drupal 7), ngay cả khi bạn Gỡ cài đặt mô-đun bị vô hiệu hóa. Nếu bạn viết mã để xóa Loại nội dung bạn đã tạo trong khi cài đặt trong hook_uninstall () của mô-đun, thì có, Loại Nội dung sẽ biến mất khi bạn Gỡ cài đặt mô-đun của mình (nhưng vẫn không phải khi bạn chỉ vô hiệu hóa nó).
Chú mã khỉ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.