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!
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!
L'une des meilleures façons de conserver ces informations dans le code consiste à utiliser fonctionnalités . Les fonctionnalités peuvent mettre en code:
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 statutdrush 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
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é.
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'));
}
}