Come creare a livello di codice campi per i tipi di contenuto e aggiungerli al modulo del tipo di contenuto


8

Supponiamo di avere questo campo, "map_description". So che vorrei questa funzione per definire il campo:

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

E ho questo codice che non sono sicuro di cosa faccia ma mi viene detto che ne avrò bisogno:

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

Questi due bit di codice sono entrambi nel mio hook di installazione ed eseguono quando installo il modulo. Ma mentre i campi vengono effettivamente creati, devo assegnarli manualmente al tipo di contenuto tramite "gestisci campi", c'è un modo per assegnare automaticamente i campi al tipo di contenuto?

Risposte:


10

Ci sei quasi.

Dal tuo codice:

'bundle' => 'my_content_type',

Sostituisci my_content_type con il nome del tipo di contenuto a cui vuoi che sia associato.

Ecco un esempio completo di aggiunta di un campo di testo Alias al tipo di contenuto dell'articolo . (da 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

Apporta piccole modifiche al tuo codice. Nei campi

$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'
      )
    )
  ),
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.