ProcessWire - Cronjob: Unterschied zwischen den Versionen

Aus Wikizone
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: „Damit ein Cronjob Skript Zugriff auf die ProcessWire Funktionen hat kannst du einfach die index.php inkludieren. Beachte, dass du bei Selektoren z.B. include=…“)
(kein Unterschied)

Version vom 3. April 2025, 11:32 Uhr

Damit ein Cronjob Skript Zugriff auf die ProcessWire Funktionen hat kannst du einfach die index.php inkludieren.

Beachte, dass du bei Selektoren z.B. include=all angeben musst, wenn du auf Templates mit Zugriffsbeschränkungen zugreifst (z.B. wenn diese nur für eine Benutzergruppe zugelassen sind.

Beispiel Archivierungsskript für DEKRA Gewinnspiel:

<?php namespace ProcessWire;
/**
 * 
 * job.php
 * Maintenance tasks called via cronjob
 */

//require_once('../index.php'); // Bootstrapping ProcessWire
//$pw_path = $_SERVER['DOCUMENT_ROOT'] . 'index.php';
$pw_path = __DIR__ . '/../index.php'; // passe den Pfad ggf. an
require_once($pw_path);
$archivedCount = moveAnswersToArchive(10);
echo "Verschobene Antworten: " . $archivedCount . chr(10);
echo " nomail"; // uncomment if you don't want cronjob mails

/**
 * moveAnswersToArchive
 * bewegt Antworten zu Fragen ins Archiv (Checkbox gewählt)
 * Bewegt nur eine begrenzte Anzahl aus Effizienzgründen
 * Wird vom export Tool automatisch aufgerufen
 */
function moveAnswersToArchive($limit = 3, $parentPage = 30321, $archieveTemplate = 'user-archieved-answer') {
	$lockedQuestions = pages()->find("template=question, checkbox=1, sort=date, limit=3, include=all"); // include ist wichtig, da template zugriff eingeschränkt
  //var_dump($lockedQuestions);
	$c = 0;
	$parent = pages()->get($parentPage);
	if($lockedQuestions->count) {
			foreach($lockedQuestions as $question) {
					$answers = pages()->find("template=user-answer, pr_question={$question->id}, sort=date, limit={$limit}");
					foreach($answers as $answer) {
							$answer->template = $archieveTemplate;
							$answer->parent = $parent;
							if($answer->save()) {
									$c++;
							}
					}
			}
	}
	
	// Rückgabe der Anzahl der verschobenen Antworten
  wire('log')->save('cronjob', 'Antworten archiviert: '. $c);
	return $c;
}