Tambahkan bidang di hook_node_info ();


9

Apakah mungkin untuk menambahkan bidang ke jenis simpul yang dideklarasikan menggunakan hook_node_info? Apakah saya harus menambahkan bidang secara terpisah? Jika demikian, kait apa yang akan saya gunakan untuk itu?

Jawaban:


8

Anda harus melampirkan bidang secara terpisah, mereka tidak dapat ditambahkan melalui hook_node_info(). Anda biasanya melakukan ini dalam suatu hook_install()fungsi di file instal modul Anda.

Contoh sederhana yang bagus dari inti Drupal ada di file instal modul 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']);
}

Fungsi hanya membangun kembali jenis simpul (sehingga jenis yang baru ditambahkan tersedia), kemudian menambahkan bidang tubuh ke dalamnya menggunakan node_add_body_field()fungsi. Fungsi ini sendiri memberikan contoh yang sangat baik tentang cara membuat bidang, contoh bidang itu, dan kemudian melampirkannya ke jenis konten menggunakan fungsi field_create_field()dan field_create_instance().

Kode tidak terlalu lama jadi saya akan memasukkannya di sini sebagai contoh:

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

Terima kasih. Apakah saya perlu melakukan sesuatu di hook_uninstall saya?
Gaelan

Terserah Anda ... jika Anda ingin menghapus konten / tipe / bidang konten apa pun yang Anda buat, ya, jika tidak, maka tidak :)
Clive

Jadi tipe konten saya tidak akan hilang ketika modul saya dimatikan?
Gaelan

2
Jenis Konten khusus Anda tidak akan hilang ketika modul Anda dinonaktifkan (dalam Drupal 7), bahkan jika Anda Menghapus modul yang dinonaktifkan. Jika Anda menulis kode untuk menghapus Tipe Konten yang Anda buat saat menginstal selama hook_uninstall () modul Anda, maka ya Tipe Konten akan hilang ketika Anda Uninstall modul Anda (tetapi masih tidak ketika Anda hanya menonaktifkannya).
Monkey Kode Paman
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.