FEATURE_NAME.installファイルのhook_uninstall()
を使用してコンテンツタイプのステータスを変更すると、システムはロック解除されたカスタムコンテンツタイプと見なします。
<?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();
}
これにより、そのコンテンツタイプの[削除]ボタンが表示され、管理者から削除できるようになります。
これが誰かを助けることを願っています!
私にとっての解決策は、コンテンツタイプページに「削除」リンクがないため、削除ページを手動でロードすることでした。これを行うには、他のコンテンツタイプの削除ページと同じURL構造に従って、URLを自分で作成する必要があります。
admin/structure/types/manage/YOUR_CONTENT_TYPE_MACHINE_NAME/delete
これにより、コンテンツタイプの削除確認ページが表示され、コンテンツタイプを削除できました。
参考までに、Drupal.orgの次のスレッドを参照してください。
https://drupal.org/node/1055460#comment-729768
よろしく、
@cmsdave
上記の方法では分類法は削除されませんが、これは、モジュールを無効にしてアンインストールした後に次のコードを追加することで実現できます。
// 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);
}
開発サイトのデータベースに直接アクセスできる別のソリューション。常にデータベースをバックアップすることを忘れないでください。
機能によって作成されたコンテンツタイプを手動で削除するには #16 Nedjo の提案は次のとおりです。
- 機能を無効にします。これで問題が発生することがあります-機能が無効になりません。この場合、機能モジュールのコードを削除してください。
- 削除するコンテンツタイプのマシン名を決定します(例: 'mytype')。
- データベースで、コンテンツタイプがUIを介して手動で作成されたかのように、node_typeテーブルの値をデフォルトに戻します。
mysql> UPDATE node_type SET module = 'node', custom = 1, modified = 1, locked = 0 WHERE type = 'mytype';
- キャッシュをクリアして、コンテンツタイプの変更を確実に利用できるようにします。
- Admin/structure/typesのUIを使用して、コンテンツタイプを削除します。
admin_menu module を使用する場合、コンテンツタイプページに表示されていなくても、プルダウンメニューの[構造]/[コンテンツタイプ]/[コンテンツタイプ名]/[削除]に削除リンクが表示されます。
このコンテンツタイプへの参照が他にないことを確認できれば、この削除リンクを使用してもかなり安全だと思います。