Cómo crear campos mediante programación para tipos de contenido y AGREGARlos al formulario de tipo de contenido

8

Digamos que tengo este campo, "map_description". Sé que haría esta función para definir el campo:

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

Y tengo este código que no estoy seguro de lo que hace pero me dicen que lo necesitaré:

 $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)

Esos dos bits de código están en mi gancho de instalación y se ejecutan cuando instalo el módulo. Pero si bien los campos se crean, tengo que asignarlos manualmente al tipo de contenido a través de "administrar campos", ¿hay alguna manera de que los campos se asignen automáticamente al tipo de contenido?

Rugbert
fuente

Respuestas:

10

Ya casi estás ahí.

De tu código:

'bundle' => 'my_content_type',

Reemplace my_content_type con el nombre del tipo de contenido al que desea adjuntarlo.

Aquí hay un ejemplo completo de agregar un campo de texto Alias al tipo de contenido del artículo . (de 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
fuente
0

Haga pequeños cambios en su código. En los campos

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

);
field_create_field ($ campo);

& 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
fuente