web-dev-qa-db-fra.com

Créer un nouveau type de contenu sur hook_install

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!

11
Jane Panda

Pour répondre exactement à vos questions:

Création d'un type de contenu dans l'installation de hook : Vous utilisez node_type_save () pour créer le type de contenu, voici un exemple de formulaire Web. installer:

  // 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, il suffit de nettoyer après vous-même, donc supprimez les variables créées par votre module (en utilisant variable_del () ), supprimer tous les fichiers téléchargés par le module (en utilisant file_unmanaged_delete_recursive () ), supprimer les types de contenu définis (en utilisant node_type_delete () ), etc.

J'espère que cela t'aides!

7
Alex Weber

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

  • Types de contenu
  • Champs CCK
  • Autorisations
  • Les rôles

La liste continue.

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

drush features vous donnera une liste de toutes les fonctionnalités du site et leur statut
drush features revert all ramènera toutes les fonctionnalités à ce qui est dans le code (très pratique pour fonctionner après les déploiements)

Aide cela aide

11
wiifm

Découvrez le module D7 Exemples . 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é.

3
Drew

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

}
0
Sanjay