Créer un nouveau type de contenu sur hook_install

11

Quelqu'un peut-il me montrer un bon exemple de la façon de créer un nouveau type de contenu dans la méthode hook_install d' un module ?

J'aimerais aussi savoir si / ce que je dois faire pendant hook_uninstall pour nettoyer mon désordre; J'ai lu qu'il y avait un débat sur la simple suppression du contenu.

Je n'ai pas été en mesure de trouver un exemple de la bonne méthode pour accomplir cette tâche, toute aide serait appréciée!

Jane Panda
la source

Réponses:

7

Pour répondre exactement à vos questions:

Création d'un type de contenu dans l'installation de raccordement : vous utilisez node_type_save () pour créer le type de contenu, voici un exemple de 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);

Que faire dans hook_uninstall : Fondamentalement, nettoyez- vous après vous-même, supprimez donc les variables créées par votre module (en utilisant variable_del () ), supprimez tous les fichiers téléchargés par le module (en utilisant file_unmanaged_delete_recursive () ), supprimez les types de contenu définis (en utilisant node_type_delete () ), etc.

J'espère que cela t'aides!

Alex Weber
la source
Merci, il est bon de connaître la façon de coder pour le faire également, et j'avais besoin de trouver de bonnes informations sur l'utilisation de la désinstallation
Jane Panda
pas de problème, heureux de vous aider! :)
Alex Weber
11

L'une des meilleures façons de conserver ces informations dans le code consiste à utiliser les fonctionnalités . Les fonctionnalités peuvent mettre en code:

  • Types de contenu
  • Champs CCK
  • Autorisations
  • Rôles

La liste continue.

Une fonctionnalité intéressante sur les fonctionnalités est l'intégration drush

drush featuresvous donnera une liste de toutes les fonctionnalités du site, et leur état
drush features revert allramènera toutes les fonctionnalités à ce qui est dans le code (vraiment pratique pour fonctionner après les déploiements)

Aide cela aide

wiifm
la source
D'accord, bien qu'il ne réponde pas directement à la question ...
Alex Weber
Oui, je sais que ce n'est pas exactement la solution exacte demandée, mais finalement ils atteindront tous les deux le même objectif, c'est juste que l'un sera un cauchemar à maintenir, et l'autre sera facile avec pointer et cliquer et une intégration drush impressionnante . Bob peut décider ce qui fonctionne pour lui
wiifm
1
Encore d'accord! Drush + Les fonctionnalités peuvent être intimidantes au début, mais c'est tellement utile une fois que vous avez compris :)
Alex Weber
Je vais essayer, je pense que cela gagnera du temps si je peux exporter un type de contenu personnalisé, donc je n'aurai pas à brouiller tous les champs. Merci!
Jane Panda
3

Découvrez le module Exemples D7 . node_example a installer et désinstaller.

Vous pourrez peut-être étoffer le type avec les outils d'interface, puis créer une fonctionnalité (avec le module de fonctionnalités) et extraire les parties pertinentes dans la fonction d'installation de votre module personnalisé.

A dessiné
la source
0

Si vous souhaitez créer un nouveau type de contenu avec certains champs, vous pouvez utiliser le code ci-dessous.

Ce code fonctionne parfaitement pour moi.

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

}
Sanjay
la source
-1

Je l'ai fait dans le module MySpace Sync .
Je me souviens d'avoir rassemblé cela à partir de diverses sources, mais je ne me souviens pas quelles étaient toutes les sources. Vous pouvez parcourir le référentiel git pour voir ce que j'ai fait, mais il s'agit essentiellement d'une exportation de chaque type de contenu avec le module Content Copy de CCK à l'installation, puis de supprimer tous les nœuds avant de supprimer le type de contenu lors de la désinstallation.

Scott Reynen
la source
4
Alors que la question est taguée drupal-7, le module MySpace Sync n'est disponible que depuis Drupal 6. L'API utilisée pour créer le type de contenu a beaucoup changé entre Drupal 6 et Drupal 7.
Pierre Buyle