Impossible de supprimer le type de contenu de la fonctionnalité après la désinstallation de la fonctionnalité

24

Problème

La désinstallation d'une fonctionnalité qui crée un type de contenu masque le lien "Supprimer" sur le admin/structure/types.

Numéro sur Drupal.org

Aram Boyajyan
la source

Réponses:

15

Solution

L'utilisation d'un hook_uninstall()fichier dans FEATURE_NAME.install et la modification de l'état du type de contenu, de sorte que le système pense qu'il s'agit d'un type de contenu personnalisé déverrouillé.

J'ai également posté cela sur d.org .

<?php
/**
 * Implements hook_uninstall().
 */
function FEATURE_NAME_uninstall() {

  // List custom content types added by this feature
  $custom_ctypes = array(
    'blog',
  );

  // Go through each and unlock the content type
  foreach ($custom_ctypes as $ctype) {
    db_query("UPDATE {node_type} SET `custom` = 1, locked = 0 WHERE type = :ctype", array(':ctype' => $ctype));
  }

  // Clean Drupal cache; this is necessary for the "Delete" link to appear
  // next to the content type created by the feature.
  drupal_flush_all_caches();

}

Cela fera apparaître le bouton "Supprimer" pour ce type de contenu, vous pouvez donc le supprimer de l'administrateur.

J'espère que cela aide quelqu'un!

Aram Boyajyan
la source
1
Pour clarifier, cela ne supprime pas le type de contenu; il rend le lien «supprimer» disponible dans la page de liste des types de contenu. Merci @ Ivanhoe123!
doub1ejack
1
De plus, je n'ai pas pu le faire pendant que mon module de fonctionnalités était activé, mais après avoir désactivé et désinstallé (j'ai utilisé drush) cela a fonctionné à merveille. Raccourci: utilisez le module devel en déposant le contenu de cette fonction dans / devel / php. Pour supprimer par programme le type de contenu, ajoutez node_type_delete($ctype); après la requête dans la boucle for.
doub1ejack
Merci pour ce code. Après avoir vu ce code, j'ai édité ma base de données en utilisant phpMyAdmin et édité la table "node_type". Ensuite, j'ai trouvé le type de contect que je souhaitais supprimer et définir la valeur "Personnalisé" sur "1". Et enfin je l'ai supprimé de l'administration Drupal.
ANDiTKO
2
mysql> UPDATE node_type SET custom = 1, locked = 0 WHERE type = '<content type machine name>';
Marco Lazzeri
@ La solution de MarcoLazzeri a parfaitement fonctionné pour moi et était bien meilleure que de devoir mettre à jour mon module de fonctionnalités juste pour le désinstaller.
beignet
11

Pour moi, la solution était de charger la page de suppression manuellement car il n'y a pas de lien "supprimer" sur la page des types de contenu. Pour ce faire, il vous suffit de créer l'URL vous-même en suivant la même structure d'URL que la page de suppression pour les autres types de contenu:

admin / structure / types / manage / YOUR_CONTENT_TYPE_MACHINE_NAME / delete

Cela a fait apparaître la page de confirmation de suppression du type de contenu, ce qui m'a ensuite permis de supprimer le type de contenu.

Pour référence, voir ce fil sur Drupal.org:

https://drupal.org/node/1055460#comment-7297680

Cordialement,

@cmsdave

cmsdave
la source
Je viens de changer le lien du type de contenu d'affichage à la fin pour le supprimer et j'ai pu supprimer le type de contenu sans problème. Cette solution fonctionne!
cateye
Remarque : Avant que cela ne fonctionne, je devais modifier le .infofichier de la fonctionnalité et supprimer le type de contenu, puis il serait effectivement supprimé.
Duncanmoo
3

La méthode ci-dessus ne supprime pas les taxonomies, mais cela peut être réalisé en ajoutant les éléments suivants après avoir désactivé et désinstallé le module:

// Delete taxonomies.
$machine_names = array('taxonomy_a', 'taxonomy_b');
foreach ($machine_names as $machine_name) {
  $taxonomy = taxonomy_vocabulary_machine_name_load($machine_name);
  taxonomy_vocabulary_delete($taxonomy->vid);
}
Juampy NR
la source
1

Une autre solution qui a fonctionné pour moi directement dans la base de données de mon site de développement. N'oubliez pas de toujours sauvegarder votre base de données.

Pour supprimer manuellement un type de contenu créé par une fonctionnalité # 16, Nedjo suggère ce qui suit:

  • Désactivez la fonction. J'ai parfois rencontré des problèmes avec cela - une fonctionnalité ne se désactivera pas. Dans ce cas, supprimez le code du module de fonction.
  • Déterminez le nom de la machine du type de contenu à supprimer, par exemple, 'mytype'.
  • Dans la base de données, rétablissez les valeurs par défaut de la table node_type comme si le type de contenu avait été créé manuellement via l'interface utilisateur:

mysql> UPDATE node_type SET module = 'node', custom = 1, modified = 1, locked = 0 WHERE type = 'mytype';

  • Videz les caches pour vous assurer que le changement de type de contenu est disponible.
  • Via l'interface utilisateur dans admin / structure / types, supprimez le type de contenu.
cayerdis
la source
0

Si vous utilisez le module admin_menu , vous verrez toujours les liens de suppression dans le menu déroulant Structure / Types de contenu / [nom du type de contenu] / Supprimer, même s'ils ne sont pas affichés sur la page des types de contenu.

Je dirais qu'il est assez sûr d'utiliser ce lien de suppression si vous vous assurez qu'il n'y a plus d'autres références à ce type de contenu.

Mirsoft
la source