Bagaimana secara terprogram membuat bidang untuk tipe konten, dan ADD mereka ke bentuk tipe konten

8

Katakanlah saya memiliki bidang ini, "map_description". Saya tahu saya ingin fungsi ini mendefinisikan bidang:

$field = array(
  'field_name' => 'map_description',
  'cardinality' => 1,
  'type' => 'text',
);
field_create_field($field);

Dan saya memiliki kode ini yang saya tidak yakin apa fungsinya, tetapi saya diberitahu bahwa saya akan membutuhkannya:

 $instance = array(
    'field_name' => 'map_description',
    'label' => 'The map description.',
    'bundle' => 'my_content_type',
    'entity_type' => 'node',
    'widget' => array(
    'type' => 'text_textfield',
 );
 field_create_instance($instance)

Kedua bit kode itu sama-sama ada di kait penginstal saya dan dijalankan ketika saya menginstal modul. Tetapi sementara bidang sebenarnya dibuat, saya harus menetapkannya secara manual ke jenis konten melalui "kelola bidang", adakah cara untuk membuat bidang tersebut secara otomatis ditetapkan ke jenis konten?

rugbert
sumber

Jawaban:

10

Kamu hampir sampai.

Dari kode Anda:

'bundle' => 'my_content_type',

Ganti my_content_type dengan nama tipe konten yang Anda inginkan.

Berikut adalah contoh lengkap menambahkan bidang teks Alias ke tipe konten artikel . (dari monarchdigital.com )

/**
 * Update hook to add a field to a node.
 */
function my_module_update_7000() {
  $field_name = 'field_alias';
  // Make sure the field doesn't already exist.
  if (!field_info_field($field_name)) {
    // Create the field.
    $field = array(
      'field_name' => $field_name,
      'type' => 'text',
      'settings' => array('max_length' => 64),
    );
    field_create_field($field);

    // Create the instance.
    $instance = array( 'field_name' => $field_name,
      'entity_type' => 'node',
      'bundle' => 'article',
      'label' => 'Alias',
      'description' => 'The article alias.',
      'required' => TRUE,
    );
    field_create_instance($instance);

    watchdog('my_module', t('!field_name was added successfully.', array('!field_name' => $field_name)));
  }
  else {
    watchdog('my_module', t('!field_name already exists.', array('!field_name' => $field_name)));
  }
}
Merrick
sumber
0

Buat perubahan kecil pada kode Anda. Di Bidang

$t = get_t();
$field = array(
   'field_name' => 'map_description',
    'label' => $t('My Description'),
    'type' => 'text',

);
field_create_field ($ field);

& Write this in Instance

$t = get_t();
return array(
  'map_description' => array(
    'field_name' => 'map_description',
    'type' => 'text',
    'label' => $t('Map Description'),
    'bundle' => 'your_custom_content_type',
    'entity_type' => 'node',
    'widget' => array(
      'type' => 'text_textfield'
    ),
    'display' => array(
      'example_node_list' => array(
        'label' => $t('Map Description'),
        'type' => 'text'
      )
    )
  ),
Vikram Singh Shekhawat
sumber