web-dev-qa-db-fra.com

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

Problème

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

Problème sur Drupal.org

23
Aram Boyajyan

Solution

Utilisation d'une hook_uninstall() dans le fichier FEATURE_NAME.install et 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é ceci 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!

15
Aram Boyajyan

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, consultez ce fil sur Drupal.org:

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

Cordialement,

@cmsdave

11
cmsdave

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);
}
3
Juampy NR

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 ce que Nedjo suggère est le suivant:

  • 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.
1
cayerdis

Si vous utilisez module admin_men , 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.

0
Mirsoft