Wie veröffentliche ich Knoten dreimal am Tag?

8

Ich habe eine Liste unveröffentlichter Knoten, die mit dem Modul Ansichten erstellt wurden . Ich möchte, dass eine Aufgabe dreimal am Tag zu bestimmten Zeiten ausgeführt wird. Jedes Mal, wenn die Aufgabe ausgeführt wird, sollte nur einer der Knoten in der Liste veröffentlicht werden. Wie kann ich das machen?

Schritte, die ich versucht habe

Planer

Im Scheduler- Modul müssen Sie den genauen Zeitpunkt angeben, zu dem der Knoten veröffentlicht werden soll. Dies macht es kompliziert, da ich herausfinden müsste, wann jeder Knoten veröffentlicht werden soll.

Ansichten Massenoperationen + Regeln + Regelplaner

Mit dem Modul Views Bulk Operations können Sie eine Liste von Knoten erstellen, die für das Modul Rules verfügbar sind. Regeln können dann auf die Liste einwirken und den Knoten in der Liste veröffentlichen. Sie können Rules anweisen, nur eine bestimmte Anzahl von Knoten zu veröffentlichen.

Das funktioniert perfekt. Außer, es scheint nicht möglich zu sein, die Regel so zu planen, dass sie dreimal am Tag ausgeführt wird.

Sie können die Regel mit dem Cron-Job der Hauptsite verknüpfen, dies scheint jedoch nicht sehr genau zu sein, da der Cron-Job mehr als dreimal ausgeführt werden kann.

Es gibt ein Regelplanungsmodul (ein Untermodul von Regeln), aber es sieht nicht so aus, als könnten Sie dies als Regelbedingung verwenden. Es scheint auch keine Möglichkeit zu geben, die Laufzeit anzugeben.

Job Scheduler

Auf diese Weise können Sie eine Zeit festlegen, die sich jedoch nicht in Regeln oder Ansichten integrieren lässt .

big_smile
quelle
Gibt es einen Grund, warum Sie dies nicht über ein benutzerdefiniertes Modul tun möchten? Ich kann Ihnen eine Antwort geben, wenn Sie es so machen möchten.
Aram Boyajyan
@Topsitemakers Ich hatte gehofft, ein vorhandenes Modul verwenden zu können, da es von mehr Benutzern durchlaufen wurde und somit ein besserer Code als meiner ist!. Ich habe den Eindruck, dass das, was ich tun möchte, möglich ist. Ich muss nur das Aufgabenplanungsbit sortieren!
big_smile

Antworten:

5

Verwenden der Module VBO, Rules und Rules Scheduler

Informationen zu Ihrem Ansatz mit Modulen Views Bulk Operations (VBO) , Rules and Rules Scheduler (Submodul of Rules ), für die Sie geschrieben haben: " Es scheint nicht möglich zu sein, die Regel so zu planen, dass sie dreimal am Tag ausgeführt wird. ": Das scheint mir "ein" gültiger Ansatz.

Was Sie tatsächlich tun müssen, ist eine geringfügige Abweichung von dem, was im Tutorial Stündliche Aufgaben mit dem Regelplaner erklärt wird : In Ihrem Fall sollten Sie einen Versatz von 8 Stunden (anstelle von nur 1) verwenden.

Und wie auch in diesem Tutorial erklärt: Führen Sie die Komponente zunächst manuell aus. (Von da an wird alle zwei Stunden die Regel erneut ausgeführt).

Verwenden von Modulen Regeln und Regeln einmal pro Tag

Es gibt ein ziemlich neues Modul, das sich auf Regeln bezieht, dh das Modul " Regeln einmal pro Tag ". So funktioniert es (gemäß dem Kommentar in Ausgabe 2495775 des Modulbesitzers ):

  • Auf der Seite mit den Verwaltungseinstellungen für dieses Modul legen Sie eine Auslösestunde fest .
  • Der Regelauslöser wird dann ausgeführt, wenn Cron-Aufgaben nach Beginn dieser Stunde zum ersten Mal ausgeführt werden . Die tatsächliche Laufzeit hängt von Ihren Cron-Task-Timings ab.

Die Art und Weise, wie ich das verstehe / lese (ich habe aber noch nicht damit experimentiert), ist wie folgt:

  • Das "Ereignis" wird nur ausgelöst, wenn ein Cron-Job ausgeführt wird.
  • Und dieses Ereignis wird nur 1 Mal / Tag ausgelöst, dh "das nächste Mal, wenn cron nach Ablauf der Auslösestunde ausgeführt wird".

Wenn Sie also drei ähnliche Regeln erstellen, können Sie eine davon um 18 Uhr herumlaufen lassen (eine) um 14 Uhr und die andere um 22 Uhr.

PS: Ich gehe davon aus, dass es sich bei dieser Frage um D7 handelt.

Pierre.Vriens
quelle
Wie kann ich es auf einmal zum Laufen bringen? Es scheint keine Option zu geben, eine Regel zu einem bestimmten Zeitpunkt zu aktivieren.
big_smile
Kennen Sie das Modul Regeln einmal am Tag? Siehe meine aktualisierte Antwort ... neugierig zu hören, ob das funktionieren könnte ...
Pierre.Vriens
"Regeln einmal am Tag" wird nur einmal am Tag ausgeführt. Aber ich hoffe, ich könnte einen Offset hinzufügen, um die gewünschten Zeiten zu erhalten. Regeln können Sie verwenden stringtotime(). Wenn "Regeln einmal pro Tag" um Mitternacht ausgeführt werden und ich wollte, dass meine Regel um 18 Uhr ausgeführt wird, wäre +18 hoursdies der richtige Weg, um den stringtotimeBefehl zu schreiben ?
big_smile
Es stimmt, dass Regeln einmal am Tag nur einmal am Tag ausgeführt werden (wie der Name auch anzeigt). Aber wenn Sie 3 (ähnliche) Regeln definieren, haben Sie dann dreimal am Tag, oder? Der eigentliche Auslöser ist auch, wenn Ihr Cron-Job ausgeführt wird. Angenommen, Cron läuft jede Stunde, auch um 18:05 Uhr (18:05 Uhr). Dann sollte Ihre "Triggerstunde" etwas vorher liegen (wie +18 Stunden), damit Sie den Trigger erhalten, wenn der nächste Cron läuft (um 18:05 Uhr). Wenn Ihr Cron auch um (z. B.) 12:05 und 04:05 läuft, sollten Sie eine andere Regel mit einer Triggerstunde wie +12 Stunden und einer weiteren wie +4 Stunden haben.
Pierre.Vriens
1
Obwohl ich dies nur zu 90% getestet habe, hat die Antwort bisher am besten funktioniert, sodass sie das Kopfgeld erhält.
big_smile
1

Sie können dies erreichen, indem Sie eine Codierung verwenden.

  1. Eine Ansicht, in der alle Knoten aufgelistet sind, die für die Planung veröffentlicht wurden. Wenn Sie auch DraggableViews anwenden , können Administratoren die Knoten per Drag & Drop neu anordnen, was immer hilfreich ist.

  2. Eine benutzerdefinierte PHP-Funktion publishdaily_get_top_node(), die die obige Ansicht ausführt und die NID für den obersten Knoten zurückgibt. Ich würde empfehlen, dies in ein benutzerdefiniertes Mini-Modul zu integrieren.

  3. Eine Regel, die beim Cron-Lauf ausgelöst wird und prüft, ob es Zeit ist, einen neuen Knoten zu veröffentlichen (z. B. indem überprüft wird, ob die Zeit zwischen 00.00 und 00.15 liegt - abhängig davon, wie oft Ihr Cron ausgeführt wird). Wenn es Zeit ist, wird die Aktion 'Ladeknoten' publishdaily_get_top_node()ausgelöst und verwendet , um die NID zum Laden zu bringen. Dann veröffentlicht es den geladenen Knoten.

Wenn Sie es noch sauberer machen möchten, schreiben Sie ein Regel-Plugin anstelle einer PHP-Funktion.

Wenn Sie möchten, dass es weniger sauber ist, schreiben Sie die Funktion direkt in eine Aktion zum Ausführen von beliebigem PHP-Code.

Referenz

rfegade
quelle
checking if the time is between 00.00 and 00.15Wie würden Sie die Zeit in Regeln überprüfen? Vielen Dank.
big_smile
Sie können einen
Regelplaner
Willkommen bei Drupal Answers! Wenn Sie eine Antwort kopieren und einfügen möchten, verknüpfen Sie bitte den ursprünglichen Beitrag zurück.
Kiamlaluno
1
  1. Konfigurieren von Cron-Jobs mit dem Befehl cron zu festgelegten Zeiten.

  2. Erstellen Sie ein Modul zur Implementierung von hook_cron (). So aktualisieren Sie Ihren ersten Knoten als $node->status = 1.

    $ node-> status = 0 bedeutet unveröffentlicht.
    $ node-> status = 1 bedeutet veröffentlicht.

    function yourmodule_cron() {
      update $node->status = 1;    
    }
  3. Sie können views_get_view () verwenden, um Ihre Knoten-NID abzurufen

    $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
quelle
Wie ziele ich auf die unveröffentlichten Knoten? Vielen Dank!
big_smile
Verwenden Sie views_get_view (), um Ihren Knoten NID
Dong Tao
0

Unabhängig davon, ob Sie eine Regel oder einen Code verwenden, um einen einzelnen Knoten von oben in Ihrer Ansicht zu veröffentlichen, ist die Verwendung von Ultimate Cron meiner Meinung nach der einfachste Weg, dies zu planen .

Stellen Sie den Scheduler auf Crontab ein und für die jeweilige Aufgabe können Sie genau angeben , wann er ausgeführt werden soll. Wenn Sie beispielsweise 8, 12 und 16 Uhr möchten, können Sie die Regel festlegen:

0 8,12,16 * * *

Weitere Informationen:

Elysia Cron scheint benutzerdefinierte Cron-Aufgaben zuzulassen, mit denen Sie möglicherweise auf eine bestimmte Regel abzielen können (möglicherweise über PHP-Code).

Darvanen
quelle
Mit Ultimate Cron ist es möglich, eine Regel auszulösen. Ich habe versucht, damit zu spielen, konnte es aber nicht herausfinden. Regeln scheinen nicht in der Lage zu sein, auf bestimmte Cron-Jobs zu reagieren (sie reagieren auf alle).
big_smile
Das habe ich nicht gedacht, aber es sieht so aus, als könnten Sie mit Elysia Cron benutzerdefinierte Jobs erstellen.
Darvanen
0

Erstellen Sie eine Regel wie folgt:

Unter / admin / config / workflow / rules / components / add

Erstellen Sie einen "Aktionssatz": Name = Veröffentlichung von Inhaltsvariablen aufheben: Datentyp = Knotenbezeichnung = Knoten Maschinenname = Knoten -Weiter-

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

Unter / admin / config / workflow / rules Erstellen Sie eine "Regel": Name = Veröffentlichung aufheben Reaktion auf Ereignis = Knoten> Nach dem Speichern neuer Inhalte Nach Typ einschränken = Ihr Inhaltstyp -Save-

    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-

Das heißt, es ist nicht erforderlich, den Inhalt beim Erstellen der Komponente zu filtern oder der Regel eine inhaltliche Bedingung hinzuzufügen.

Überprüfen Sie außerdem die Cron-Einstellung Ihrer Website unter Admin >> Konfiguration >> System >> Cron (admin / config / system / cron).

Lassen Sie mich wissen, wenn Sie diesbezüglich Fragen oder Bedenken haben.

AddWeb Solution Pvt Ltd.
quelle
Vielen Dank! Wie gebe ich die Zeiten an, zu denen die Regel ausgeführt werden soll? (Ich möchte, dass es nur zu bestimmten Zeiten ausgeführt wird). Wie kann ich nur einen der Knoten in meiner Ansichtsliste unveröffentlichter Knoten veröffentlichen?
big_smile