Bagaimana cara mempublikasikan node 3 kali sehari?

8

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 .

senyum lebar
sumber
Apa alasan Anda tidak ingin melakukan ini melalui modul khusus? Saya dapat memberi Anda jawaban jika Anda ingin melakukannya dengan cara ini.
Aram Boyajyan
@Topsitemakers Saya berharap untuk menggunakan modul yang sudah ada, karena akan telah melewati lebih banyak pengguna sehingga akan menjadi kode yang lebih baik daripada milikku !. Saya mendapat kesan bahwa apa yang ingin saya lakukan adalah mungkin, saya hanya perlu sedikit penjadwalan tugas diurutkan!
big_smile

Jawaban:

5

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):

  • Anda menentukan jam pemicu pada halaman pengaturan administrasi untuk modul ini.
  • Pemicu Aturan kemudian akan berjalan ketika tugas cron dijalankan pertama setelah awal jam itu . Waktu berjalan yang sebenarnya akan tergantung pada timing tugas cron Anda.

Cara saya memahami / Baca ini (belum bereksperimen dengannya) adalah seperti ini:

  • "Acara" hanya akan dipicu ketika pekerjaan cron dijalankan.
  • Dan peristiwa itu hanya akan dipicu 1 kali / hari, yaitu "waktu berikutnya cron berjalan setelah jam pemicu telah berlalu".

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.

Pierre
sumber
Bagaimana cara menjalankannya pada satu waktu. Tampaknya tidak ada opsi untuk mengaktifkan aturan pada waktu tertentu.
big_smile
Apakah Anda terbiasa dengan modul Rules Once a Day? Lihat jawaban saya yang diperbarui ... penasaran ingin tahu apakah itu berhasil ...
Pierre.Vriens
"Aturan Sekali Sehari" hanya berjalan sekali sehari. Tapi saya berharap saya bisa menambahkan offset untuk mendapatkan waktu yang saya inginkan. Aturan memungkinkan Anda untuk menggunakannya stringtotime(). Jika "aturan sekali sehari" berjalan pada tengah malam dan saya ingin aturan saya berjalan pada pukul 6 sore, apakah +18 hourscara yang tepat untuk menulis stringtotimeperintah?
big_smile
Benar bahwa Aturan Sekali Sehari hanya berjalan sekali sehari (seperti namanya juga menunjukkan). Tetapi jika Anda mendefinisikan 3 aturan (serupa), Anda memiliki 3 kali sehari, bukan? Selain itu, pemicu yang sebenarnya adalah ketika pekerjaan cron Anda berjalan. Katakanlah cron berjalan setiap jam, juga pada 6:05 (18:05). Maka "jam pemicu" Anda harus sedikit sebelum itu (seperti +18 jam), sehingga ketika cron berikutnya berjalan (pada 18:05), Anda mendapatkan pelatuknya. Jika cron Anda juga berjalan pada (misalnya) 12:05 dan 04:05, Anda harus memiliki aturan lain dengan jam pemicu seperti +12 jam dan yang lain seperti +4 jam.
Pierre.Vriens
1
Meskipun saya baru menguji 90% ini, itu adalah jawaban yang telah bekerja sejauh ini, sehingga mendapat karunia.
big_smile
1

Anda dapat mencapai ini dengan menggunakan beberapa kode.

  1. 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.

  2. 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.

  3. 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

rfegade
sumber
checking if the time is between 00.00 and 00.15Bagaimana Anda memeriksa waktu dalam aturan? Terima kasih.
big_smile
Anda dapat menggunakan penjadwal aturan atau penjadwal pekerjaan
rfegade
Selamat Datang di Jawaban Drupal! Jika Anda ingin menyalin-menempelkan jawaban, tautkan kembali kiriman asli.
kiamlaluno
1
  1. Mengkonfigurasi pekerjaan cron menggunakan perintah cron pada waktu yang Anda inginkan.

  2. 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.

    function yourmodule_cron() {
      update $node->status = 1;    
    }
  3. Anda dapat menggunakan views_get_view () dapatkan simpul Anda nid

    $view = views_get_view('your_views_name');
    
    $view->execute('default');
    
    $view->preview();
    
    $renderer = $view->style_plugin->row_plugin;
    
    foreach ($view->result as $index => $row) {
    
      // get node NID from first row    
    
    }
Dong Tao
sumber
Bagaimana cara menargetkan node yang tidak dipublikasikan? Terima kasih!
big_smile
Gunakan views_get_view () untuk mendapatkan NID node Anda
Dong Tao
0

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:

0 8,12,16 * * *

Informasi lebih lanjut:

Elysia Cron tampaknya memungkinkan tugas cron khusus, yang memungkinkan Anda menargetkan aturan tertentu (mungkin melalui kode php).

Darvanen
sumber
dengan Ultimate Cron apakah mungkin untuk memicu suatu aturan. Saya mencoba bermain dengannya, tetapi tidak dapat menemukannya. Aturan tampaknya tidak dapat menanggapi pekerjaan cron tertentu (itu bereaksi terhadap semuanya).
big_smile
Saya tidak berpikir begitu tetapi sepertinya Elysia Cron memungkinkan Anda untuk membuat pekerjaan khusus.
Darvanen
0

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-

    Add Actions:
      Node > Unpublish content
      Data selector = node
      -Save-

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-

    Conditions:
              Content is published
            Data selector = node
              -Save-

    Actions:
      Schedule component evaluation
      Component Value = Unpublish Content
      Scheduled evaluation date data selector = node:field-your-node-date-field
      Identifier value = Unpublish content ID [node:nid] ([node:title]).
      Node Data selector = node
      -Save-

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.

AddWeb Solution Pvt Ltd
sumber
Terima kasih! Bagaimana cara menentukan waktu kapan aturan harus dijalankan? (Saya hanya ingin dijalankan pada waktu tertentu). Bagaimana cara saya mempublikasikan hanya satu dari node di daftar Views saya dari node yang tidak dipublikasikan?
big_smile