it-swarm.it

Crea un nuovo tipo di contenuto su hook_install

Qualcuno può mostrarmi un esempio corretto di come creare un nuovo tipo di contenuto nel metodo hook_install di un modulo?

Vorrei anche sapere se/cosa dovrei fare durante hook_uninstall per pulire il mio casino; Ho letto che c'è un dibattito sulla semplice rimozione del contenuto.

Non sono stato in grado di trovare un esempio del metodo corretto per eseguire questo compito, qualsiasi aiuto sarebbe apprezzato!

11
Jane Panda

Per rispondere esattamente alle tue domande:

Creazione di un tipo di contenuto in hook install : si utilizza node_type_save () per creare il tipo di contenuto, ecco un esempio dal modulo web. installare:

  // Create the default webform type.
  $webform_type = array(
    'type' => 'webform',
    'name' => st('Webform'),
    'base' => 'node_content',
    'description' => st('Create a new form or questionnaire accessible to users. Submission results and statistics are recorded and accessible to privileged users.'),
    'custom' => TRUE,
    'modified' => TRUE,
    'locked' => FALSE,
  );

  $webform_type = node_type_set_defaults($webform_type);
  node_type_save($webform_type);
  node_add_body_field($webform_type);

Cosa fare in hook_uninstall : Fondamentalmente basta ripulire dopo te stesso, quindi eliminare le variabili create dal modulo (usando variabile_del () ), elimina tutti i file caricati dal modulo (usando file_unmanaged_delete_recursive () ), elimina i tipi di contenuto definiti (usando node_type_delete () ), ecc.

Spero che sia di aiuto!

7
Alex Weber

Uno dei modi migliori per conservare queste informazioni nel codice è usare caratteristiche . Le funzionalità possono inserire il codice:

  • Tipi di contenuto
  • Campi CCK
  • Permessi
  • Ruoli

L'elenco continua.

Una caratteristica interessante delle funzionalità è l'integrazione drush

drush features ti fornirà un elenco di tutte le funzionalità del sito e il loro stato
drush features revert all ripristinerà tutte le funzionalità a ciò che è nel codice (molto utile per l'esecuzione dopo le distribuzioni)

Aiuta questo aiuta

11
wiifm

Dai un'occhiata al modulo D7 Esempi . node_example ha installazione e disinstallazione.

Potresti essere in grado di perfezionare il tipo con gli strumenti di interfaccia e quindi creare una funzione (con il modulo caratteristiche) ed estrarre parti rilevanti nella funzione di installazione del tuo modulo personalizzato.

3
Drew

Se si desidera creare un nuovo tipo di contenuto con alcuni campi, è possibile utilizzare il codice seguente.

Questo codice funziona perfettamente per me.

function HOOK_install() {

 /* CREATE THE CONTENT TYPE */
 $t = get_t();
 $node_example = array(
    'type' => 'slider',
    'name' => $t('Slider Content'),
    'base' => 'node_content',
    'description' => $t('Add slider content.'),
    'body_label' => $t('Slider Description')
 );
 $content_type = node_type_set_defaults($node_example);

// Create a custom Field with our required field-type.
$field = array(
  'field_slider_images' => array (
    'field_name' => 'field_slider_images',
    'type' => 'image',
  ),
 'field_slider_links' => array (
   'field_name' => 'field_slider_links',
   'type' => 'text',
   'entity_types' => array('node'),
  ),

);
foreach ($field as $fields) {
  field_create_field($fields);
}

// Create a instances of that Field.
$instance = array(
'field_slider_images' => array (
  'field_name' => 'field_slider_images',
  'entity_type' => 'node',
  'bundle' => 'slider',
  'label' => t('Slider Image'),
  'description' => 'Add Slider Image.',
  'settings' => array(
    'file_directory' => 'field/document',
    'file_extensions' => 'png PNG jpg jpeg JPG JPEG',
    'max_filesize' => '10MB',
    'title_field' => '',
  ),
  'widget' => array(
     'type' => 'image_image',
     'weight'=> 10,
  ),
  'formatter' => array(
    'label' => t('label'),
    'format' => 'image'
  ),
  'settings' => array(
    'file_directory' => 'slider-image', // save inside "public://photos"
    'max_filesize' => '4M',
    'preview_image_style' => 'thumbnail',
    'title_field' => TRUE,
    'alt_field' => FALSE,
  )
),
'field_slider_links' => array (
  'field_name' => 'field_slider_links',
  'entity_type' => 'node',
  'bundle' => 'slider',
  'label' => t('Slider Link'),
  'widget' => array('type' => 'text_textfield'),
 ),
);

foreach ($instance as $fieldinstance) {
 field_create_instance($fieldinstance);
}

$status = node_type_save($content_type);
node_add_body_field($content_type);

// Replacement rule for the messages.
$t_args = array('%name' => $content_type->name);
if ($status == SAVED_UPDATED) { // update case
 drupal_set_message($t('The content type %name has been updated.', $t_args));
} 
 elseif ($status == SAVED_NEW) { // create case
   drupal_set_message($t('The content type %name has been added.', $t_args));
   watchdog('node', 'Added content type %name.', $t_args, WATCHDOG_NOTICE, l($t('view'), 'admin/structure/types')); 
}

}
0
Sanjay