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.