Saya memiliki daftar node yang tidak dipublikasikan, dibuat dengan modul Views . Saya ingin tugas dijalankan 3 kali sehari, pada waktu yang ditentukan. Setiap kali tugas dijalankan, hanya satu dari node dalam daftar yang harus dipublikasikan. Bagaimana saya bisa melakukan ini?
Langkah saya sudah mencoba
Penjadwal
The Scheduler modul mengharuskan Anda untuk menentukan waktu yang tepat Anda ingin node yang akan diterbitkan. Ini membuatnya rumit, karena saya harus bekerja ketika setiap node seharusnya diterbitkan.
Tampilan Operasi Massal + Aturan + Penjadwal Aturan
Dengan modul Operasi Massal Views , Anda dapat membuat daftar Node yang diekspos ke modul Aturan . Aturan kemudian dapat bertindak pada daftar dan mempublikasikan simpul pada daftar. Anda dapat memberi tahu Aturan untuk hanya menerbitkan jumlah node tertentu.
Ini bekerja dengan sempurna. Kecuali, sepertinya tidak mungkin menjadwalkan Aturan berjalan 3 kali sehari.
Anda dapat menautkan Aturan ke pekerjaan situs Cron utama, tetapi ini tampaknya tidak terlalu tepat karena pekerjaan Cron dapat berjalan lebih dari 3 kali.
Ada modul Penjadwal Aturan (sub-modul Aturan), tetapi sepertinya Anda tidak bisa menggunakan ini dengan ketentuan Aturan. Sepertinya juga tidak ada cara untuk menentukan waktu berjalan.
Penjadwal Pekerjaan
Ini memungkinkan Anda mengatur waktu, tetapi tampaknya tidak berintegrasi dengan Aturan atau Tampilan .
Jawaban:
Menggunakan modul VBO, Aturan dan Penjadwal Aturan
Tentang pendekatan Anda menggunakan modul Views Operasi Massal (VBO) , Aturan dan Penjadwal aturan (submodule of Rules ), di mana Anda menulis " sepertinya tidak mungkin menjadwalkan Aturan untuk berjalan 3 kali sehari. ": Yang menurut saya "a" pendekatan yang valid.
Apa yang sebenarnya perlu Anda lakukan adalah variasi kecil dari apa yang dijelaskan dalam tutorial Tugas per jam menggunakan penjadwal aturan : dalam kasus Anda, Anda harus menggunakan offset 8 jam (bukan hanya 1).
Dan seperti yang dijelaskan juga dalam tutorial itu: Awalnya jalankan komponen secara manual. (sejak saat itu setiap 8 jam lainnya aturan akan dieksekusi lagi).
Menggunakan modul Aturan dan Aturan Sekali per Hari
Ada modul yang cukup baru terkait dengan aturan, yaitu modul " Aturan Sekali per Hari ". Inilah cara kerjanya (sesuai komentar dalam edisi 2495775 , dari pemilik modul):
Cara saya memahami / Baca ini (belum bereksperimen dengannya) adalah seperti ini:
Jadi dengan membuat 3 aturan yang sama, Anda dapat memiliki 1 dari mereka berlarian (katakanlah) jam 6 sore, yang lain sekitar jam 2 siang dan yang lain jam 10 malam.
PS: Saya berasumsi pertanyaan ini tentang D7.
sumber
stringtotime()
. Jika "aturan sekali sehari" berjalan pada tengah malam dan saya ingin aturan saya berjalan pada pukul 6 sore, apakah+18 hours
cara yang tepat untuk menulisstringtotime
perintah?Anda dapat mencapai ini dengan menggunakan beberapa kode.
Tampilan yang mencantumkan semua node yang diterbitkan untuk penjadwalan. Jika Anda juga menerapkan DraggableViews, Anda dapat membiarkan administrator menyusun ulang node dengan drag-and-drop, yang selalu menyenangkan.
Fungsi PHP khusus
publishdaily_get_top_node()
yang mengeksekusi tampilan di atas dan mengembalikan NID untuk node teratas. Saya akan merekomendasikan menempatkan ini dalam modul mini kustom.Aturan yang dipicu pada cron run, dan memeriksa apakah sudah waktunya untuk menerbitkan node baru (oleh, katakanlah, memeriksa apakah waktunya antara 00.00 dan 00.15 - tergantung pada seberapa sering cron Anda berjalan). Jika sudah saatnya, maka ia akan mengaktifkan aksi 'load node' dan menggunakan
publishdaily_get_top_node()
untuk mendapatkan NID untuk dimuat. Kemudian menerbitkan node yang dimuat.Jika Anda ingin membuatnya lebih bersih, Anda menulis plugin Aturan bukan hanya fungsi PHP.
Jika Anda menginginkannya kurang bersih, Anda menulis fungsi secara langsung dalam tindakan untuk mengeksekusi kode PHP sewenang-wenang.
Referensi
sumber
checking if the time is between 00.00 and 00.15
Bagaimana Anda memeriksa waktu dalam aturan? Terima kasih.Mengkonfigurasi pekerjaan cron menggunakan perintah cron pada waktu yang Anda inginkan.
Buat modul untuk mengimplementasikan hook_cron (). Untuk memperbarui simpul pertama Anda sebagai
$node->status = 1
.$ node-> status = 0, berarti tidak dipublikasikan.
$ node-> status = 1, berarti dipublikasikan.
Anda dapat menggunakan views_get_view () dapatkan simpul Anda nid
sumber
Apakah Anda menggunakan aturan atau kode untuk menerbitkan satu node dari atas tampilan Anda, saya percaya cara termudah untuk menjadwalkannya adalah menggunakan Ultimate Cron .
Atur penjadwal ke Crontab dan untuk tugas tertentu Anda dapat memberitahukannya kapan tepatnya Anda ingin menjalankannya. Misalnya, jika Anda ingin 8:00, 12 siang dan 4:00 Anda dapat membuat aturan:
Informasi lebih lanjut:
Elysia Cron tampaknya memungkinkan tugas cron khusus, yang memungkinkan Anda menargetkan aturan tertentu (mungkin melalui kode php).
sumber
Buat aturan sebagai berikut:
Di / admin / config / alur kerja / aturan / komponen / tambahkan
Buat "Kumpulan tindakan": Nama = Batalkan Variabel Konten: Jenis data = Node Label = Node Nama mesin = node -Continue-
Di / admin / config / workflow / rules Buat "aturan": Name = Batalkan publikasi Aturan Bereaksi pada acara = Node> Setelah menyimpan konten baru Batasi berdasarkan tipe = tipe-konten Anda -Simpan-
Artinya, tidak perlu menyaring konten saat membuat komponen atau menambahkan kondisi tipe konten dalam aturan.
Selain itu, periksa pengaturan cron situs web Anda dari Admin >> Configuration >> System >> Cron (admin / config / system / cron)
Beri tahu saya jika Anda menghadapi pertanyaan / masalah terkait hal ini.
sumber