web-dev-qa-db-ja.com

機能をアンインストールした後、機能コンテンツタイプを削除できません

問題

コンテンツタイプを作成する機能をアンインストールすると、admin/structure/typesの[削除]リンクが非表示になります。

Drupal.orgの問題

23
Aram Boyajyan

解決

FEATURE_NAME.installファイルのhook_uninstall()を使用してコンテンツタイプのステータスを変更すると、システムはロック解除されたカスタムコンテンツタイプと見なします。

これも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();

}

これにより、そのコンテンツタイプの[削除]ボタンが表示され、管理者から削除できるようになります。

これが誰かを助けることを願っています!

15
Aram Boyajyan

私にとっての解決策は、コンテンツタイプページに「削除」リンクがないため、削除ページを手動でロードすることでした。これを行うには、他のコンテンツタイプの削除ページと同じURL構造に従って、URLを自分で作成する必要があります。

admin/structure/types/manage/YOUR_CONTENT_TYPE_MACHINE_NAME/delete

これにより、コンテンツタイプの削除確認ページが表示され、コンテンツタイプを削除できました。

参考までに、Drupal.orgの次のスレッドを参照してください。

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

よろしく、

@cmsdave

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

開発サイトのデータベースに直接アクセスできる別のソリューション。常にデータベースをバックアップすることを忘れないでください。

機能によって作成されたコンテンツタイプを手動で削除するには #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を使用して、コンテンツタイプを削除します。
1
cayerdis

admin_menu module を使用する場合、コンテンツタイプページに表示されていなくても、プルダウンメニューの[構造]/[コンテンツタイプ]/[コンテンツタイプ名]/[削除]に削除リンクが表示されます。

このコンテンツタイプへの参照が他にないことを確認できれば、この削除リンクを使用してもかなり安全だと思います。

0
Mirsoft