Bagaimana saya bisa dengan cepat menyimpan kembali semua node di situs saya (untuk memicu aturan yang aktif pada pembaruan konten)?

24

Saya membuat beberapa kesalahan dengan mengkonfigurasi jenis konten tertentu di situs saya. Untuk memperbaiki kesalahan ini, saya membuat aturan yang melakukan beberapa tindakan "ketika konten yang ada diperbarui." Namun, saya tidak ingin mengunjungi situs saya dan secara manual menyimpan semua node satu per satu. Apakah ada cara untuk menggunakan Aturan atau Operasi Massal Tampilan untuk dengan cepat menyimpan kembali semua node?

Patrick Kenny
sumber

Jawaban:

22

VBO memiliki tindakan "Jalankan kode PHP". Jalankan, dan masukkan "node_save ($ entitas);" (tanpa tanda kutip) di kotak teks. Itu akan melakukan trik, sambil menangani timeout untuk Anda.

Bojan Zivanovic
sumber
1
Ahh, lebih cepat :)
Clive
5
Ada opsi di VBO untuk "Simpan konten", yang akan melakukan hal yang sama tanpa harus menulis PHP sendiri.
stevenw00
Saya tidak dapat menemukan opsi "Simpan Konten", tetapi metode php yang Anda sebutkan bekerja sangat baik! Terima kasih!
hockey2112
Mencoba metode php dan vbo tanpa hasil. Di usecase saya, hanya manual Simpan yang benar memperbarui label untuk bidang tabel. Aneh ...
Bisonbleu
14

Saya tidak tahu tentang aturan atau VBO tetapi Anda dapat menggunakan cuplikan kode pendek untuk mendapatkan hasil yang sama:

$nids = db_query('SELECT nid FROM {node}')->fetchCol();
foreach (node_load_multiple($nids) as $node) {
  node_save($node);
}

Jika Anda punya banyak node yang mungkin memerlukan sedikit waktu, jadi jika server Anda memperbolehkannya, akan lebih baik untuk memperpanjang batas waktu di awal kode itu, mungkin hingga tidak terbatas jika ini adalah salah satu :

set_time_limit(0);
Clive
sumber
12

Anda dapat menggunakan fungsi node_mass_update () :

module_load_include('inc', 'node', 'node.admin');
$nids = db_query('SELECT nid FROM {node}')->fetchCol();
node_mass_update($nids, array());

Ini sangat baik karena Anda tidak perlu peduli dengan batas waktu. Proses batch untuk pembaruan node akan mulai secara otomatis jika ada lebih dari 10 node.

milkovsky
sumber
5
Bekerja dengan sempurna pada lebih dari 200.000 node. Menangani bets untuk Anda. Jika Anda memiliki modul devel yang diaktifkan, Anda cukup menempelkan kode di atas di halaman '/ devel / php'
2pha
1
Solusi brilian, berjalan di latar belakang sehingga tidak ada peluang waktu habis atau membunuh kinerja situs
Daniel Waters
5

Pembaruan: Saya baru saja membuat Resave All Nodes . Untuk saat ini hanya berisi formulir untuk memicu proses batch untuk resave semua node dari jenis node yang dipilih. Saat ini dalam alpha. Saya berencana untuk menambahkan perintah Drush (beta) dan beberapa tes (stabil) juga.

Drupal Resave All Nodes dari screenshot


Ada Resave Nodes . Ini dimaksudkan untuk digunakan pada cron run. Tapi Anda juga bisa memicunya secara manual. Cukup pilih node jenis konten mana yang harus disimpan ulang.

Sebelum Anda dapat menjalankan resave manual dengan menekan "Resave Nodes Now" Anda harus "Save Configuration" (pilih tipe cron dan tipe konten).

leymannx
sumber
2

Buka admin / konten dan filter berdasarkan jenis konten Anda - hanya diterbitkan. Pilih semua dan kemudian pilih "ubah nilai" dari drop down operasi. Klik 'jalankan'. Pada halaman berikutnya, pilih 'status' dari properti dan biarkan dipublikasikan. Klik 'berikutnya' Semua node yang diterbitkan akan resave tanpa perubahan.

Ulangi untuk node yang tidak diterbitkan (tetapi pilih yang tidak dipublikasikan sebagai properti).

Robb Davis
sumber