Crea un nuovo tipo di contenuto su hook_install


11

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 ripulire 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!

Risposte:


7

Per rispondere esattamente alle tue domande:

Creazione di un tipo di contenuto nell'installazione hook : si utilizza node_type_save () per creare il tipo di contenuto, ecco un esempio da webform.install:

  // 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 elimina le variabili create dal tuo 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 () ), eccetera.

Spero che questo ti aiuti!


Grazie, è bello conoscere anche il modo di codifica per farlo, e avevo bisogno di trovare alcune buone informazioni sull'uso della disinstallazione
Jane Panda,

nessun problema, felice di aiutarti! :)
Alex Weber,

11

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

  • Tipi di contenuto
  • Campi CCK
  • permessi
  • ruoli

L'elenco continua.

Una bella caratteristica delle funzionalità è l'integrazione drush

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

Aiuta questo aiuta


D'accordo, anche se non risponde direttamente alla domanda ...
Alex Weber

Sì, lo so che non è esattamente la soluzione esatta richiesta, ma alla fine entrambi raggiungeranno lo stesso obiettivo, è solo che uno sarà un incubo da mantenere, e l'altro sarà facile con il point and click e la fantastica integrazione con la droga . Bob può decidere cosa funziona per lui
con il

1
Di nuovo d'accordo! Drush + Caratteristiche può essere intimidatorio in un primo momento, ma la sua così utile una volta a ottenere il blocco di esso :)
Alex Weber

Ci proverò, penso che farà risparmiare tempo se posso esportare un tipo di contenuto personalizzato, quindi non dovrò inceppare tutti i campi. Grazie!
Jane Panda,

3

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 modulo caratteristiche) ed estrarre parti rilevanti nella funzione di installazione del tuo modulo personalizzato.


0

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

}

-1

L'ho fatto nel modulo MySpace Sync .
Ricordo di averlo messo insieme da varie fonti, ma non ricordo quali fossero tutte le fonti. Puoi sfogliare il repository git lì per vedere cosa ho fatto, ma è fondamentalmente un'esportazione di ogni tipo di contenuto con il modulo Content Copy di CCK all'installazione, quindi eliminare tutti i nodi prima di eliminare il tipo di contenuto al momento della disinstallazione.


4
Mentre la domanda è taggata drupal-7, il modulo MySpace Sync è disponibile solo per Drupal 6. L'API utilizzata per creare il tipo di contenuto è cambiata molto tra Drupal 6 e Drupal 7.
Pierre Buyle

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.