Aggiungi campo in hook_node_info ();


9

È possibile aggiungere campi a un tipo di nodo dichiarato utilizzando hook_node_info? Devo aggiungere i campi separatamente? Se è così, quale gancio dovrei usare per quello?

Risposte:


8

Devi allegare i campi separatamente, non possono essere aggiunti hook_node_info(). Di solito lo faresti in una hook_install()funzione nel file .install del tuo modulo.

Un semplice esempio del core Drupal è nel file di installazione del modulo 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']);
}

La funzione ricostruisce semplicemente i tipi di nodo (quindi è disponibile il tipo appena aggiunto), quindi aggiunge un campo body ad esso utilizzando la node_add_body_field()funzione. Questa funzione in sé fornisce un eccellente esempio di come creare un campo, un'istanza di quel campo e quindi collegarlo a un tipo di contenuto usando le funzioni field_create_field()e field_create_instance().

Il codice non è così lungo quindi lo includerò qui come esempio:

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

Grazie. Devo fare qualcosa nel mio hook_uninstall?
Gaelan,

Dipende davvero da te ... se vuoi rimuovere qualsiasi contenuto / tipo di contenuto / campi che hai creato, allora sì, se non lo fai, quindi no :)
Clive

Quindi il mio tipo di contenuto non scompare quando il mio modulo viene spento?
Gaelan,

2
Il tipo di contenuto personalizzato non scompare quando il modulo viene disabilitato (in Drupal 7), anche se si disinstalla il modulo disabilitato. Se si scrive codice per eliminare i tipi di contenuto creati durante l'installazione durante hook_uninstall () del modulo, sì, il tipo di contenuto scompare quando si disinstalla il modulo (ma non quando si disabilita semplicemente).
Zio Code Monkey
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.