Saya secara terprogram membuat tipe konten selama instalasi modul (menggunakan konfigurasi penyimpanan lapangan).
Saya ingin menghapus tipe konten itu saat menghapus modul.
Apakah ada cara untuk melakukan ini dengan Drupal 8?
Saya secara terprogram membuat tipe konten selama instalasi modul (menggunakan konfigurasi penyimpanan lapangan).
Saya ingin menghapus tipe konten itu saat menghapus modul.
Apakah ada cara untuk melakukan ini dengan Drupal 8?
Jawaban:
Pastikan saja bahwa tipe simpul tergantung pada modul Anda, maka Drupal akan menghapusnya secara otomatis untuk Anda.
Lihat node.type.book.yml dalam modul buku untuk contoh, ini adalah bagian yang relevan:
dependencies:
enforced:
module:
- book
Perhatikan bahwa pengguna harus menghapus semua konten jenis itu sebelum mereka dapat menghapus modul itu.
Tidak memiliki kredit yang cukup untuk berkomentar, saya akan taruh di sini:
@Berdir, bagi saya tampaknya menegakkan modul dalam file node.type.custom.yml tidak cukup untuk menegakkan penghapusan node ketika menghapus instalan
Perhatikan bahwa pengguna harus menghapus semua konten jenis itu sebelum mereka dapat menghapus modul itu
Dalam kasus saya, tipe konten dihapus ketika menghapus modul. Tetapi penghapusan konten khusus (node) tidak diberlakukan. Untuk mencapai hal ini, modul khusus harus mengimplementasikan ModuleUninstallValidatorInterface.
Ketika diimplementasikan modul khusus tidak dapat dihapus sebelum simpul kustom dihapus. Kotak pilih akan dinonaktifkan.
Alih-alih mengimplementasikan Antarmuka saya melakukannya kotor dengan menghapus node di hook_uninstall():
function MYMODULE_uninstall() {
// Delete custom_type nodes when uninstalling.
$query = \Drupal::entityQuery('node')
->condition('type', 'custom_type');
$nids = $query->execute();
// debug($nids);
foreach ($nids as $nid) {
\Drupal\node\Entity\Node::load($nid)->delete();
}
}
Untuk memicu beberapa tindakan setelah penghapusan modul Anda harus menerapkan hook_uninstalldalam *.installfile modul Anda . Sebelum menghapus tipe konten, Anda mungkin ingin memastikan semua node dari tipe konten itu juga dihapus. Akhirnya, setelah menghapus modul dan menghapus jenis konten jangan lupa untuk mengekspor konfigurasi yang diperbarui.
/**
* Place a short description here.
*/
function MYMODULE_uninstall() {
// Delete all nodes of given content type.
$storage_handler = \Drupal::entityTypeManager()
->getStorage('node');
$nodes = $storage_handler->loadByProperties(['type' => 'MACHINE_NAME_OF_TYPE']);
$storage_handler->delete($nodes);
// Delete content type.
$content_type = \Drupal::entityTypeManager()
->getStorage('node_type')
->load('MACHINE_NAME_OF_TYPE');
$content_type->delete();
}
bundledari MACHINE_NAME_OF_TYPE, seperti permintaan simpul-id jawaban berdasarkan tidak, atau tidak? Maksud saya, sepertinya agak mahal (jika ada banyak NID) dan saya ingin menggunakan solusi ini jika memungkinkan.
drupal snippet --code='$content_type = \Drupal::entityManager()->getStorage("node_type")->load("MACHINE_NAME_OF_TYPE"); $content_type->delete();'