Tidak dapat menghapus jenis konten fitur setelah menghapus fitur

24

Isu

Menghapus instalasi fitur yang membuat jenis konten menyembunyikan tautan "Hapus" di admin/structure/types.

Masalah pada Drupal.org

Aram Boyajyan
sumber

Jawaban:

15

Larutan

Menggunakan hook_uninstall()file FEATURE_NAME.instal dan mengubah status tipe konten, sehingga sistem berpikir itu adalah tipe konten yang tidak terkunci dan kustom.

Saya memposting ini juga di 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();

}

Ini akan membuat tombol "Hapus" muncul untuk jenis konten itu, sehingga Anda dapat menghapusnya dari admin.

Semoga ini bisa membantu seseorang!

Aram Boyajyan
sumber
1
Untuk memperjelas, ini tidak menghapus tipe konten; itu membuat tautan 'hapus' tersedia di halaman daftar jenis konten. Terima kasih @ Ivanhoe123!
doub1ejack
1
Juga, saya tidak dapat melakukan ini ketika modul fitur saya diaktifkan, tetapi setelah menonaktifkan & menghapus (saya menggunakan drush) ini bekerja dengan baik. Shortcut: gunakan modul devel dengan menjatuhkan konten fungsi ini ke / devel / php. Untuk secara terprogram menghapus tipe konten tambahkan node_type_delete($ctype); setelah kueri dalam loop for.
doub1ejack
Terima kasih untuk kode itu. Setelah melihat kode ini saya mengedit database saya menggunakan phpMyAdmin dan mengedit tabel "node_type". Kemudian saya menemukan tipe contect yang ingin saya hapus dan atur nilai "Custom" menjadi "1". Dan akhirnya saya menghapusnya dari Administrasi Drupal.
ANDiTKO
2
mysql> UPDATE node_type SET custom = 1, locked = 0 WHERE type = '<content type machine name>';
Marco Lazzeri
@ MarcoLazzeri solusi bekerja dengan baik untuk saya dan jauh lebih baik daripada harus memperbarui modul fitur saya hanya untuk menghapusnya.
donat
11

Bagi saya, solusinya adalah memuat halaman hapus secara manual karena tidak ada tautan "hapus" pada halaman tipe konten. Untuk melakukan ini, Anda hanya perlu membuat URL sendiri dengan mengikuti struktur URL yang sama dengan halaman hapus untuk tipe konten lain:

admin / struktur / tipe / kelola / YOUR_CONTENT_TYPE_MACHINE_NAME / hapus

Ini memunculkan halaman konfirmasi penghapusan tipe konten, yang kemudian memungkinkan saya untuk menghapus tipe konten.

Untuk referensi, lihat utas ini di Drupal.org:

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

Salam,

@cmsdave

cmsdave
sumber
Saya baru saja mengubah tautan jenis konten tampilan di bagian akhir untuk dihapus dan dapat menghapus jenis konten tanpa masalah. Solusi ini berhasil!
cateye
Catatan : Sebelum ini berhasil saya harus mengedit file fitur .infodan menghapus jenis konten, maka itu benar-benar akan menghapus.
Duncanmoo
3

Metode di atas tidak menghapus taksonomi, tetapi ini dapat dicapai dengan menambahkan yang berikut setelah menonaktifkan dan menghapus modul:

// 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);
}
Juampy NR
sumber
1

Solusi lain yang bekerja untuk saya langsung ke database di situs pengembangan saya. Ingatlah untuk selalu membuat cadangan basis data Anda.

Untuk secara manual menghapus tipe konten yang dibuat oleh fitur # 16 yang disarankan Nedjo adalah sebagai berikut:

  • Nonaktifkan fitur ini. Saya terkadang mengalami masalah dengan ini - fitur tidak akan dinonaktifkan. Dalam hal ini, hapus kode modul fitur.
  • Tentukan nama mesin dari jenis konten yang akan dihapus, misalnya, 'mytype'.
  • Dalam database, kembalikan nilai tabel node_type ke default seolah-olah tipe konten dibuat secara manual melalui UI:

mysql> UPDATE node_type SET module = 'node', custom = 1, modified = 1, locked = 0 WHERE type = 'mytype';

  • Hapus cache untuk memastikan perubahan tipe konten tersedia.
  • Melalui UI di admin / struktur / tipe, hapus tipe konten.
cayerdis
sumber
0

Jika Anda menggunakan modul admin_menu , Anda masih akan melihat tautan hapus di menu tarik-turun Struktur / Tipe konten / [nama tipe konten] / Hapus, meskipun tidak ditampilkan pada halaman tipe konten.

Saya akan mengatakan bahwa cukup aman untuk menggunakan tautan penghapusan ini jika Anda memastikan tidak ada referensi lain untuk jenis konten ini lagi.

Mirsoft
sumber