Bagaimana saya bisa menghapus simpul setelah, misalnya, 2 minggu telah dibuat?
14
Jika Anda mencari solusi yang berpusat pada pengembang, Anda dapat menggunakan hook_cron()
modul khusus untuk membersihkan node lama:
function MYMODULE_cron() {
// Other conditions can be altered/added as neeed
$query = \Drupal::entityQuery('node')
->condition('created', strtotime('-2 week'), '<=');
$nids = $query->execute();
foreach ($nids as $nid) {
$node = node_load($nid);
$node->delete();
}
}
Berdasarkan jawaban Shawn Conn, berikut ini solusi lengkap untuk pemula:
Buat file di folder yang baru Anda buat bernama: "delete_old_nodes.info.yml" dan rekatkan kode ini di dalamnya:
Buat file bernama "delete_old_nodes.module" dan masukkan kode ini ke dalamnya:
Siram cache, lalu arahkan ke halaman modul - (yoursite.com/admin/modules) - dan aktifkan modul Anda, (dengan mencari "hapus node lama", klik kotak centang dengan nama modul dan klik simpan).
Selesai! Setiap kali Anda menjalankan cron, node / halaman yang diterbitkan -2 minggu, atau apa pun yang Anda miliki, mulai sekarang akan dihapus.
Catatan: Untuk menjadwalkan saat cron berjalan, buka yoursite.com/admin/config/system/cron
Pengujian:
Buat simpul dan ubah tanggal publikasi, biasanya di sidebar kanan, ke -2 minggu atau apa pun yang Anda miliki. Jalankan cron secara manual di yoursite.com/admin/config/system/cron dan Anda seharusnya tidak dapat menemukan simpul Anda.
sumber
Saya akan menggunakan
hook_cron()
implementasi juga, tetapi menggunakan kode berikut.Kode yang saya gunakan untuk menghapus node adalah kode yang pesan penyusutannya
entity_delete_multiple()
disarankan untuk digunakan.Saya juga menggunakan panggilan untuk
accessCheck(FALSE)
menghindari permintaan entitas mengembalikan hanya node yang memiliki akses pengguna anonim. (Tugas Cron dijalankan sebagai pengguna anonim.)Jika ada kemungkinan node untuk dihapus terlalu banyak, saya akan membatasi jumlah node yang dihapus setiap kali tugas cron dijalankan.
sumber
article
, Terima kasihhook_cron()
Implementasi terakhir yang ditunjukkan sudah melakukan hal itu, sebagaimana panggilannyarange()
, berbeda dari implementasi sebelumnya.range()
seperti yang saya mengerti, akan membatasi jumlah node dihapus setiap kali tugas cron menjalankan. Tetapi katakanlah saya memiliki di situs 30 node jenispage
&article
dengan tanggal pembuatan lebih dari 2 minggu yang lalu ... Bagaimana cara menghapus hanya simpul jenisarticle
tanpa menghapus simpul jenispage
? ... Maafkan kemampuan php saya yang sederhana tapi saya tidak bisa melihat implementasi seperti itu dalam kode di atas! Terima kasihSaya akan mencoba melakukannya seperti itu:
Saya akan mencoba mengujinya ketika saya mendapat kesempatan, karena saya tidak sepenuhnya yakin betapa mudah / mungkinnya untuk menggunakan tampilan seperti itu di 3., tapi di situlah saya akan mulai. Tentu saja, ini datang dengan peringatan bahwa itu tidak akan menghapus node ketika menjadi tepat 2 minggu, tetapi akan tergantung pada kapan Cron berjalan pada sistem Anda; tapi, saya berasumsi dalam 3 jam atau lebih masih cukup.
(Saya hanya memperhatikan ini untuk D8; Saya pikir prosesnya masih bagus.)
sumber