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 .
Antworten:
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 ):
Die Art und Weise, wie ich das verstehe / lese (ich habe aber noch nicht damit experimentiert), ist wie folgt:
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.
quelle
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 hours
dies der richtige Weg, um denstringtotime
Befehl zu schreiben ?Sie können dies erreichen, indem Sie eine Codierung verwenden.
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.
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.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
quelle
checking if the time is between 00.00 and 00.15
Wie würden Sie die Zeit in Regeln überprüfen? Vielen Dank.Konfigurieren von Cron-Jobs mit dem Befehl cron zu festgelegten Zeiten.
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.
Sie können views_get_view () verwenden, um Ihre Knoten-NID abzurufen
quelle
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:
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).
quelle
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-
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-
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.
quelle