Как программно создать поля для типов контента и добавить их в форму типа контента

8

Скажем, у меня есть это поле, "map_description". Я знаю, я бы эту функцию, чтобы определить поле:

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

И у меня есть этот код, который я не уверен, что он делает, но мне сказали, что он мне понадобится:

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

Эти два бита кода находятся в моем хуке установки и запускаются при установке модуля. Но в то время как поля фактически созданы, я должен вручную назначить их типу контента через «управление полями», есть ли способ автоматически назначить поля типу контента?

rugbert
источник

Ответы:

10

Ты почти там.

Из вашего кода:

'bundle' => 'my_content_type',

Замените my_content_type именем типа контента, к которому вы хотите присоединить.

Вот полный пример добавления текстового поля Alias к типу контента Article . (от 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)));
  }
}
Меррик
источник
0

Сделайте небольшие изменения в вашем коде. В полях

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

);
field_create_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'
      )
    )
  ),
Викрам Сингх Шехават
источник