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


回答:


15

溶液

hook_uninstall()FEATURE_NAME.installファイルでを使用し、コンテンツタイプのステータスを変更します。これにより、システムはロックされていないカスタムコンテンツタイプであると判断します。

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

}

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

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


1
明確にするために、これはコンテンツタイプを削除しません。コンテンツタイプのリストページで「削除」リンクを使用できるようにします。ありがとう@ Ivanhoe123!
-doub1ejack

1
また、機能モジュールが有効になっている間はこれを行うことができませんでしたが、無効にしてアンインストールした後(drushを使用)、これはうまく機能しました。ショートカット:この関数の内容を/ devel / phpにドロップして、develモジュールを使用します。プログラムでコンテンツタイプを削除するにnode_type_delete($ctype); は、forループのクエリの後に追加します。
doub1ejack

そのコードをありがとう。このコードを見た後、phpMyAdminを使用してデータベースを編集し、「node_type」テーブルを編集しました。それから、削除し、「カスタム」値を「1」に設定する必要がある接続タイプを見つけました。そして最後に、Drupal Administrationから削除しました。
-ANDiTKO

2
mysql> UPDATE node_type SET custom = 1, locked = 0 WHERE type = '<content type machine name>';
マルコラッツェリ14

@MarcoLazzeriのソリューションは完全に機能し、アンインストールするためだけに機能モジュールを更新するよりもはるかに優れていました。
ドーナツ14

11

私にとって、ソリューションは、コンテンツタイプページに「削除」リンクがないため、削除ページを手動で読み込むことでした。これを行うには、他のコンテンツタイプの削除ページと同じURL構造に従って、自分でURLを作成するだけです。

admin / structure / types / manage / YOUR_CONTENT_TYPE_MACHINE_NAME / delete

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

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

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

よろしく、

@cmsdave


最後に表示コンテンツタイプのリンクを削除するように変更しただけで、問題なくコンテンツタイプを削除できました。このソリューションは機能します!
キャットアイ14年

:これが機能する前に、機能の.infoファイルを編集し、コンテンツタイプを削除する必要がありました。その後、実際に削除されました。
ダンカンムー14年

3

上記の方法では分類法は削除されませんが、これはモジュールを無効にしてアンインストールした後に次を追加することで実現できます。

// 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);
}

1

開発サイトのデータベースに直接アクセスできる別のソリューション。必ずデータベースをバックアップしてください。

機能#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を使用して、コンテンツタイプを削除します。

0

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

このコンテンツタイプへの参照が他にないことを確認したら、この削除リンクを使用するのはかなり安全だと思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.