Problem
Wenn Sie ein Feature deinstallieren, das einen Inhaltstyp erstellt, wird der Link "Löschen" auf der Seite ausgeblendet admin/structure/types
.
Wenn Sie ein Feature deinstallieren, das einen Inhaltstyp erstellt, wird der Link "Löschen" auf der Seite ausgeblendet admin/structure/types
.
Antworten:
Verwenden Sie eine hook_uninstall()
in FEATURE_NAME.install enthaltene Datei und ändern Sie den Status des Inhaltstyps, damit das System davon ausgeht, dass es sich um einen nicht gesperrten benutzerdefinierten Inhaltstyp handelt.
Ich habe das auch auf d.org gepostet .
<?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();
}
Dadurch wird die Schaltfläche "Löschen" für diesen Inhaltstyp angezeigt, sodass Sie ihn aus dem Administrator löschen können.
Hoffe das hilft jemandem!
node_type_delete($ctype);
nach der Abfrage in die for-Schleife ein.
mysql> UPDATE node_type SET custom = 1, locked = 0 WHERE type = '<content type machine name>';
Für mich bestand die Lösung darin, die Löschseite manuell zu laden, da auf der Seite mit den Inhaltstypen kein Link "Löschen" vorhanden ist. Dazu müssen Sie die URL nur selbst erstellen, indem Sie dieselbe URL-Struktur wie die Löschseite für andere Inhaltstypen verwenden:
admin / structure / types / manage / YOUR_CONTENT_TYPE_MACHINE_NAME / delete
Daraufhin wurde die Bestätigungsseite zum Löschen des Inhaltstyps aufgerufen, auf der ich den Inhaltstyp löschen konnte.
Informationen hierzu finden Sie in diesem Thread auf Drupal.org:
https://drupal.org/node/1055460#comment-7297680
Grüße,
@cmsdave
.info
Datei bearbeiten und den Inhaltstyp entfernen, dann wurde sie tatsächlich gelöscht.
Die obige Methode löscht keine Taxonomien. Dies kann jedoch erreicht werden, indem nach dem Deaktivieren und Deinstallieren des Moduls Folgendes angehängt wird:
// 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);
}
Eine weitere Lösung, die für mich direkt mit der Datenbank in meiner Entwicklungssite zusammenarbeitete. Denken Sie daran, Ihre Datenbank immer zu sichern.
Zum manuellen Löschen eines Inhaltstyps, der mit Feature 16 erstellt wurde, schlägt Nedjo Folgendes vor:
- Deaktivieren Sie die Funktion. Ich habe manchmal Probleme damit - eine Funktion wird nicht deaktiviert. Entfernen Sie in diesem Fall den Funktionsmodulcode.
- Ermitteln Sie den Computernamen des zu löschenden Inhaltstyps, z. B. "MeinTyp".
- Setzen Sie in der Datenbank die Werte der Tabelle "node_type" auf die Standardwerte zurück, als ob der Inhaltstyp manuell über die Benutzeroberfläche erstellt worden wäre:
mysql> UPDATE node_type SET module = 'node', custom = 1, modified = 1, locked = 0 WHERE type = 'mytype';
- Löschen Sie die Caches, um sicherzustellen, dass die Änderung des Inhaltstyps verfügbar ist.
- Löschen Sie über die Benutzeroberfläche unter admin / structure / types den Inhaltstyp.
Wenn Sie das Modul admin_menu verwenden , werden die Links zum Löschen weiterhin im Pulldown-Menü Struktur / Inhaltstypen / [Name des Inhaltstyps] / Löschen angezeigt, auch wenn sie nicht auf der Seite Inhaltstypen angezeigt werden.
Ich würde sagen, dass es ziemlich sicher ist, diesen Link zum Löschen zu verwenden, wenn Sie versichern, dass es keine weiteren Verweise auf diesen Inhaltstyp mehr gibt.