Come pubblicare i nodi 3 volte al giorno?


8

Ho un elenco di nodi non pubblicati, creati con il modulo Views . Vorrei che un'attività venisse eseguita 3 volte al giorno, in determinati orari. Ogni volta che l'attività viene eseguita, deve essere pubblicato solo uno dei nodi nell'elenco. Come posso fare questo?

Passi che ho provato

Scheduler

Il modulo Scheduler richiede di specificare l'ora esatta in cui si desidera pubblicare il nodo. Questo rende complicato, come dovrei capire quando ogni nodo dovrebbe essere pubblicato.

Visualizzazioni operazioni collettive + Regole + Utilità di pianificazione regole

Con il modulo Operazioni collettive Views , è possibile creare un elenco di nodi esposti al modulo Regole . Le regole possono quindi agire sull'elenco e pubblicare il nodo nell'elenco. Puoi dire a Rules di pubblicare solo un numero specifico di nodi.

Funziona perfettamente. Tranne il fatto che non sembra possibile programmare l'esecuzione della Regola 3 volte al giorno.

È possibile collegare la regola al processo Cron del sito principale, ma ciò non sembra molto preciso in quanto il processo Cron potrebbe essere eseguito più di 3 volte.

C'è un modulo Scheduler regole (un sottomodulo di regole), ma non sembra che tu possa usare questa condizione di regole. Inoltre, non sembra esserci un modo per specificare il tempo di esecuzione.

Job Scheduler

Ciò ti consente di impostare un orario, ma non sembra integrarsi con Regole o Viste .


Qualche motivo per cui non vuoi farlo attraverso un modulo personalizzato? Posso fornirti una risposta se vuoi farlo in questo modo.
Aram Boyajyan

@Topsitemakers Speravo di usare un modulo esistente, dato che sarebbe stato passato attraverso più utenti, quindi sarà un codice migliore del mio !. Ho l'impressione che ciò che voglio fare sia possibile, ho solo bisogno di ordinare il bit di programmazione delle attività!
big_smile,

Risposte:


5

Utilizzo dei moduli VBO, Scheduler regole e regole

Informazioni sul tuo approccio usando i moduli Views Bulk Operations (VBO) , Scheduler regole e regole (sottomodulo di regole ), per il quale hai scritto " non sembra possibile pianificare l'esecuzione della regola 3 volte al giorno ": questo mi appare "un" approccio valido.

Quello che devi effettivamente fare è una piccola variazione di ciò che è spiegato nel tutorial Attività orarie usando lo scheduler delle regole : nel tuo caso dovresti usare un offset di 8 ore (invece di solo 1).

E come spiegato anche in quel tutorial: eseguire inizialmente il componente manualmente. (da allora in poi ogni 8 ore la regola verrà eseguita di nuovo).

Utilizzo dei moduli Regole e regole Una volta al giorno

Esiste un modulo abbastanza nuovo relativo alle regole, ovvero il modulo " Regole una volta al giorno ". Ecco come funziona (come da commento nel numero 2495775 , dal proprietario del modulo):

  • Si specifica un'ora di attivazione nella pagina delle impostazioni di amministrazione per questo modulo.
  • Il trigger della regola verrà quindi eseguito quando le attività cron vengono eseguite per la prima volta dopo l'inizio di quell'ora . Il tempo di esecuzione effettivo dipenderà dai tempi dell'attività cron.

Il modo in cui capisco / leggi questo (ma non l'ho ancora sperimentato) è così:

  • L '"Evento" verrà attivato solo quando viene eseguito un processo cron.
  • E quell'evento verrà attivato solo 1 volta / giorno, ovvero "la prossima volta che cron viene eseguito dopo che è trascorsa l'ora del trigger".

Quindi, creando 3 regole simili, potresti averne una in giro (diciamo) alle 18:00, un'altra intorno alle 14:00 e l'altra alle 22:00.

PS: presumo che questa domanda riguardi D7.


Come faccio a farlo funzionare contemporaneamente. Non sembra esserci un'opzione per attivare una regola in un determinato momento.
big_smile

Conosci il modulo Regole una volta al giorno? Fai riferimento alla mia risposta aggiornata ... curioso di sapere se questo potrebbe funzionare ...
Pierre.Vriens,

"Regole una volta al giorno" viene eseguito solo una volta al giorno. Ma spero di poter aggiungere un offset per ottenere i tempi che desidero. Le regole ti permettono di usare stringtotime(). Se "regole una volta al giorno" +18 hoursvenisse eseguito a mezzanotte e volessi che la mia regola venisse eseguita alle 18:00, sarebbe il modo corretto di scrivere il stringtotimecomando?
big_smile,

È vero che Regole una volta al giorno viene eseguito solo una volta al giorno (come indica anche il nome). Ma se definisci 3 regole (simili), hai 3 volte una volta al giorno, giusto? Inoltre, il trigger effettivo sarà quando viene eseguito il processo cron. Dì che cron parte ogni ora, anche alle 18:05 (18:05). Quindi la tua "ora di innesco" dovrebbe essere un po 'prima (come +18 ore), in modo che quando viene eseguito il prossimo cron (alle 18:05), ottieni il trigger. Se il tuo cron funziona anche alle (ad esempio) 12:05 e 04:05, dovresti avere un'altra regola con ora di attivazione come +12 ore e un'altra ancora come +4 ore.
Pierre.Vriens,

1
Anche se l'ho provato solo al 90%, è la risposta che ha funzionato meglio finora, quindi ottiene la taglia.
big_smile,

1

È possibile ottenere ciò utilizzando un po 'di codice.

  1. Una vista che elenca tutti i nodi pubblicati per la pianificazione. Se si applica anche DraggableViews, è possibile consentire agli amministratori di riordinare i nodi trascinandoli, il che è sempre utile.

  2. Una funzione PHP personalizzata publishdaily_get_top_node()che esegue la vista sopra e restituisce il NID per il nodo superiore. Consiglierei di inserirlo in un mini-modulo personalizzato.

  3. Una regola che viene attivata durante l'esecuzione cron e verifica se è il momento di pubblicare un nuovo nodo (ad esempio, controllando se il tempo è compreso tra 00.00 e 00.15, a seconda della frequenza con cui viene eseguito cron). Se è il momento, quindi attiva il "nodo di caricamento" e lo utilizza publishdaily_get_top_node()per caricare il NID. Quindi pubblica il nodo caricato.

Se vuoi renderlo ancora più pulito, scrivi un plug-in Rules anziché solo una funzione PHP.

Se vuoi che sia meno pulito, scrivi la funzione direttamente in un'azione per eseguire codice PHP arbitrario.

Riferimento


checking if the time is between 00.00 and 00.15Come controlleresti il ​​tempo nelle regole? Grazie.
big_smile,

è possibile utilizzare un programmatore di regole o un pianificatore di
processi

Benvenuto in Drupal Answers! Se hai intenzione di copiare e incollare una risposta, collega nuovamente il post originale.
kiamlaluno

1
  1. Configurare i lavori cron usando il comando cron in momenti specifici che ti piacciono.

  2. Crea un modulo per implementare hook_cron (). Per aggiornare il tuo primo nodo come $node->status = 1.

    $ node-> status = 0, significa non pubblicato.
    $ node-> status = 1, significa pubblicato.

    function yourmodule_cron() {
      update $node->status = 1;    
    }
    
  3. Puoi usare views_get_view () per ottenere il tuo nodo 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    
    
    }
    

Come posso scegliere come target i nodi non pubblicati? Grazie!
big_smile,

Utilizzare views_get_view () per ottenere il NID del nodo
Dong Tao,

0

Sia che usi una regola o un codice per pubblicare un singolo nodo dalla parte superiore della tua vista, credo che il modo più semplice per pianificare sia usare Ultimate Cron .

Imposta lo scheduler su Crontab e per l'attività specifica puoi dirlo esattamente quando vuoi che venga eseguito. Ad esempio, se vuoi le 8, le 12 e le 16, puoi fare la regola:

0 8,12,16 * * *

Ulteriori informazioni:

Elysia Cron sembra consentire attività cron personalizzate, che potrebbero consentire di scegliere come target una regola specifica (magari tramite codice php).


con Ultimate Cron è possibile attivare una regola. Ho provato a giocarci, ma non sono riuscito a capirlo. Le regole non sembrano essere in grado di rispondere a specifici lavori cron (reagisce a tutti loro).
big_smile,

Non la pensavo così, ma sembra che Elysia Cron potrebbe permetterti di creare lavori personalizzati.
Darvanen,

0

Crea una regola come segue:

In / admin / config / workflow / regole / componenti / aggiungi

Crea un "Set di azioni": Nome = Non pubblicare variabili di contenuto: Tipo di dati = Etichetta nodo = Nodo Nome macchina = nodo -Continua-

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

In / admin / config / workflow / rules Crea una "regola": Nome = Annulla pubblicazione regola Reagisci su evento = Nodo> Dopo aver salvato il nuovo contenuto Limita per tipo = contenuto-tipo -Salva-

    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-

Ossia, non è necessario filtrare il contenuto quando si crea il componente né aggiungere una condizione di tipo contenuto nella regola.

Inoltre, controlla le impostazioni cron del tuo sito web da Admin >> Configurazione >> Sistema >> Cron (admin / config / system / cron)

Fammi sapere se hai domande o dubbi in merito.


Grazie! Come posso specificare i tempi in cui la regola dovrebbe essere eseguita? (Voglio solo che funzioni a orari specifici). Come ottengo per pubblicare solo uno dei nodi nel mio elenco Visualizzazioni di nodi non pubblicati?
big_smile,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.