J'ai créé par programme un type de conten lors de l'installation d'un module (en utilisant la configuration de stockage sur le terrain).
Je veux supprimer ce type de contenu pendant désinstallation le module.
Existe-t-il un moyen de le faire avec Drupal 8?
Assurez-vous simplement que le type de nœud dépend de votre module, puis Drupal le supprimera automatiquement pour vous.
Voir node.type.book.yml dans le module livre pour un exemple, c'est la partie pertinente:
dependencies:
enforced:
module:
- book
Notez que les utilisateurs devront supprimer tout le contenu de ce type avant de pouvoir désinstaller le module.
Cela semble le faire pour moi.
$content_type = \Drupal::entityManager()->getStorage('node_type')->load('MACHINE_NAME_OF_TYPE');
$content_type->delete();
N'ayant pas assez de crédit pour commenter, je vais le mettre ici:
@Berdir, il me semble que l'application du module dans le fichier node.type.custom.yml n'est pas suffisante pour imposer la suppression des nœuds lors de la désinstallation
Notez que les utilisateurs devront supprimer tout le contenu de ce type avant de pouvoir désinstaller le module, puis
Dans mon cas, le type de contenu est supprimé lors de la désinstallation du module. Mais la suppression du contenu personnalisé (nœuds) n'est pas appliquée. Pour ce faire, le module personnalisé doit implémenter ModuleUninstallValidatorInterface
.
Une fois implémenté, le module personnalisé ne peut pas être désinstallé avant la suppression des nœuds personnalisés. La case de sélection sera désactivée.
Au lieu d'implémenter l'interface, je le fais sale en supprimant les nœuds dans hook_uninstall()
:
function MYMODULE_uninstall() {
// Delete custom_type nodes when uninstalling.
$query = \Drupal::entityQuery('node')
->condition('type', 'custom_type');
$nids = $query->execute();
// debug($nids);
foreach ($nids as $nid) {
\Drupal\node\Entity\Node::load($nid)->delete();
}
}
Pour déclencher une action lors de la désinstallation d'un module, vous devez implémenter hook_uninstall
dans le module *.install
fichier. Avant de supprimer le type de contenu, vous pouvez également vous assurer que tous les nœuds de ce type de contenu ont également été supprimés. Enfin, après avoir désinstallé le module et avoir supprimé le type de contenu, n'oubliez pas d'exporter la configuration mise à jour.
/**
* Place a short description here.
*/
function MYMODULE_uninstall() {
// Delete all nodes of given content type.
$storage_handler = \Drupal::entityTypeManager()
->getStorage('node');
$nodes = $storage_handler->loadByProperties(['type' => 'MACHINE_NAME_OF_TYPE']);
$storage_handler->delete($nodes);
// Delete content type.
$content_type = \Drupal::entityTypeManager()
->getStorage('node_type')
->load('MACHINE_NAME_OF_TYPE');
$content_type->delete();
}