Apa cara terbaik untuk menghapus bidang Drupal 7 dari jenis konten yang ditentukan melalui GUI? Saya ingin menggunakan hook_update_N agar perubahan dapat disebarkan ke beberapa server saat menjalankan update.php. Namun sepertinya saya tidak dapat menemukan solusi. db_drop_table () akan masuk akal bagi saya untuk skema yang ditentukan khusus, tetapi tidak untuk jenis / bidang konten yang didefinisikan melalui GUI.
21
Jawaban:
Ada dua fungsi api untuk menghapus bidang:
field_delete_field
Untuk menghapus seluruh bidang (semua instance bidang)field_delete_instance
Untuk menghapus hanya instance dari bidang - yang bagaimana itu dilampirkan ke entitas.Jika Anda tidak ingin menggunakan kembali bidang tersebut, mungkin akan sedikit lebih bersih untuk menghapus seluruh bidang alih-alih hanya menghapus contohnya pada jenis konten yang dipermasalahkan. Hanya Anda yang bisa menjadi hakim untuk itu.
sumber
Ya, field_delete_instance () adalah fungsi untuk menghapus instance bidang.
Perhatikan bahwa
field_delete_instance()
panggilan secara otomatisfield_delete_field()
jika tidak ada contoh yang tersisa, jadifield_delete_instance()
kemungkinan besar semua yang Anda butuhkan._update_7000_field_delete_instance()
dirancang untuk fungsi pembaruan inti. Contoh: dalam fungsi pembaruanx_update_7000()
, Anda menggunakanfield_delete_instance()
. Kemudianx_update_7001()
, Anda mengubah{field_config}
tabel dengan cara yang tidak konsisten danfield_delete_instance()
jelas perlu diubah juga.Tetapi
x_update_7000()
panggilan sekarang untukfield_delete_instance()
akan menghasilkan kesalahan karena tabel masih dalam struktur yang lama. Namun, situasi untuk modul yang disumbangkan berbeda, karena mereka harus selalu dieksekusi setelah semua pembaruan inti dan karenanya perlu bekerja dengan versi inti terbaru.Namun, ini adalah pola yang mungkin ingin Anda gunakan untuk fungsi API Anda sendiri yang Anda gunakan dalam fungsi pembaruan.
Selain itu, fungsi-fungsi _update ini tidak mengeksekusi kait karena hasilnya tidak dapat diprediksi (misalnya karena modul yang menjalankan pembaruan mungkin dinonaktifkan).
sumber